He ido integrando gradualmente Prometheus en mis flujos de trabajo de monitoreo, a fin de recopilar métricas detalladas sobre la ejecución de la infraestructura.
Durante esto, me di cuenta de que a menudo me encuentro con un problema peculiar: a veces, un exportador del que se supone que Prometheus extrae datos no responde. Tal vez debido a una configuración incorrecta de la red, ya no es accesible, o simplemente porque el exportador se bloqueó.
Cualquiera sea el motivo, creo que faltan algunos de los datos que espero ver en Prometheus y no hay nada en la serie durante un período de tiempo determinado. A veces, la falla de un exportador (¿está agotando el tiempo?) También parece causar que otros fallen (¿el primer tiempo de espera empujó todo el trabajo por encima del tiempo de espera del nivel superior? Solo especulando).
Todo lo que veo es un vacío en la serie, como se muestra en la visualización anterior. No hay nada en el registro cuando esto sucede. Las métricas de Prometeo también parecen bastante estériles. Acabo de tener que recurrir a intentar manualmente replicar lo que Prometheus está haciendo y ver dónde se rompe. Esto es molesto. ¡Tiene que haber una mejor manera! Si bien no necesito alertas en tiempo real, al menos quiero poder ver que un exportador no pudo entregar datos. Incluso un indicador booleano de "oye comprobar tus datos" sería un comienzo.
¿Cómo obtengo información significativa sobre Prometheus que no puede obtener datos de los exportadores? ¿Cómo entiendo por qué existen brechas sin tener que realizar una simulación manual de la recopilación de datos de Prometheus? ¿Cuáles son las prácticas sensatas a este respecto, tal vez incluso cuando se extienden al monitoreo de la recolección de datos en general, más allá de Prometeo?
fuente
Respuestas:
Creo que puedes hacer algún tipo de alerta en una métrica
rate
con algo como esto:La idea principal es alertar siempre que la tasa métrica esté en 0 durante 3 minutos, con el nombre de la métrica adecuada y una etiqueta en algún lugar que indique de qué exportador proviene, que debería darle la información correcta.
Elegir la métrica correcta para monitorear por exportador podría ser complejo, sin más información es difícil dar un mejor consejo de la nada.
Esta publicación de blog podría ser una inspiración también para una detección más genérica.
fuente
time
Por ejemplo, usar la métrica en un exportador de nodos sería suficiente. Si tiene una mejor manera de alertar sobre la falla de un exportador, siéntase libre de agregar una respuestaHay algunas razones que podrían haber causado la brecha. Lo más probable es que el exportador no sea accesible, en cuyo caso la serie de
up
tiempo será 0. Puede alertar sobre esto de esta manera (tomado de https://prometheus.io/docs/alerting/rules/#templating ):En la página de estado también debería ver que está inactivo, incluido un mensaje de error. Desafortunadamente, no hay forma de ver el error pasado, pero hay un problema para rastrear esto: https://github.com/prometheus/prometheus/issues/2820
Su servidor Prometheus también puede sobrecargarse, lo que hace que se detenga el raspado, lo que también explicaría las brechas. En ese caso, debería ver
Storage needs throttling. Scrapes and rule evaluations will be skipped.
errores en el registro y aumentos en lasprometheus_target_skipped_scrapes_total
métricas. También debe alertar sobre eso, por ejemplo:fuente
No estoy seguro si este es el mismo problema que estás viendo. Pero vimos estas brechas aleatorias para aplicaciones Java que no establecieron específicamente la configuración de GC. Lo que significa que estábamos viendo brechas cuando la recopilación de datos se detuvo porque la actividad de la instancia se detuvo mientras la JVM estaba haciendo un GC completo. Si está utilizando Java, esto puede suceder. Nuestra solución fue utilizar explícitamente el recolector de basura G1 (Java 8+) con un límite especificado en la duración de la actividad de GC para evitar estos intervalos de tiempo en la recopilación de datos.
fuente