Prometheus: Solución de problemas

Errores que puede encontrar con Prometheus

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución nube de Prometheus lista para usar que proporciona una serie de beneficios, incluyendo:

  • Alert Manager incluido para enviar alertas a Slack, Mattermost, PagerDuty, etc.
  • Servidor de correo electrónico dedicado para enviar alertas de correo electrónico ilimitadas.
  • Blackbox para sondear HTTP, ICMP, TCP, y más.
  • Configuración fácil con un editor de archivos de configuración en línea.
  • Actualizaciones sin esfuerzo con solo un clic.
  • Rendimiento óptimo y seguridad robusta gracias a una VM privada y dedicada.

Ahorre tiempo y simplifique su vida: solo toma 5 minutos probar la solución de alojamiento en la nube de Prometheus de Stackhero!

Con el lanzamiento de Prometheus v3, ahora es necesario que los servidores de destino incluyan el encabezado Content-Type en sus respuestas para informar a Prometheus sobre el protocolo de las métricas contenidas en la respuesta. Esto afecta a herramientas como Node Exporter, que ahora deben responder a las solicitudes HTTP de Prometheus con el Content-Type adecuado. Para más detalles, puede consultar la documentación de Prometheus.

Si no se cumple este requisito, puede encontrar un mensaje de error como este:

received unsupported Content-Type "application/octet-stream" and no fallback_scrape_protocol specified for target

Aquí hay algunas formas de resolver este problema:

Si está trabajando con un servidor de destino como Node Exporter, considere actualizarlo a la última versión. Las actualizaciones recientes generalmente aseguran que el encabezado Content-Type esté correctamente definido, lo que debería resolver el error en Prometheus.

Para servidores de destino personalizados, como una ruta API que haya desarrollado para devolver métricas de Prometheus, puede establecer directamente el encabezado Content-Type en la respuesta.

Por ejemplo, si está utilizando HapiJS, en lugar de devolver sus métricas así:

return metrics

Puede establecer el encabezado Content-Type así:

return h.response(metrics).type('text/plain;version=0.0.4');

Aquí están los encabezados Content-Type compatibles según el protocolo de las métricas que está devolviendo:

  • PrometheusProto: application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited
  • PrometheusText 0.0.4: text/plain;version=0.0.4
  • PrometheusText 1.0.0: text/plain;version=1.0.0;escaping=allow-utf-8
  • OpenMetricsText 0.0.1: application/openmetrics-text;version=0.0.1
  • OpenMetricsText 1.0.0: application/openmetrics-text;version=1.0.0

También puede definir un protocolo de respaldo en su archivo de configuración prometheus.yml. Este protocolo se utilizará si el servidor de destino no especifica un encabezado Content-Type.

Aquí hay un ejemplo:

  - job_name: "my-job"
    # [...]
    fallback_scrape_protocol: PrometheusText0.0.4

Los valores compatibles son PrometheusProto, PrometheusText0.0.4, PrometheusText1.0.0, OpenMetricsText0.0.1, y OpenMetricsText1.0.0.