Prometheus: Dépannage

Erreurs que vous pouvez rencontrer avec Prometheus

👋 Bienvenue dans la documentation Stackhero !

Stackhero vous propose une plateforme Prometheus cloud entièrement gérée, conçue pour la fiabilité et la simplicité :

  • Alert Manager est intégré, ce qui vous permet d’acheminer les alertes directement vers Slack, Mattermost, PagerDuty et d’autres destinations populaires.
  • Un serveur email dédié vous permet d’envoyer un nombre illimité d’alertes par email sans configuration supplémentaire.
  • Blackbox est inclus, vous permettant de sonder les protocoles HTTP, ICMP, TCP et autres pour une surveillance complète.
  • Configurez votre instance rapidement grâce à l’éditeur de fichier de configuration en ligne. Plus besoin de gérer le YAML manuellement.
  • Appliquez les mises à jour en un seul clic. Stackhero s’occupe du processus de mise à niveau pour vous, réduisant ainsi les interruptions et les interventions manuelles.
  • Performance élevée et sécurité renforcée sont incluses grâce à votre propre infrastructure privée et dédiée.

Mettez votre instance en service en environ 5 minutes. Stackhero s’occupe de l’installation pour que vous puissiez vous concentrer sur la surveillance, pas sur la maintenance. Essayez l’hébergement Prometheus cloud sur Stackhero pour simplifier vos flux de travail de monitoring et d’alerting.

Avec la sortie de Prometheus v3, il est désormais nécessaire que les serveurs cibles incluent l'en-tête Content-Type dans leurs réponses pour informer Prometheus du protocole des métriques contenues dans la réponse. Cela affecte des outils comme Node Exporter, qui doivent maintenant répondre aux requêtes HTTP de Prometheus avec le Content-Type approprié. Pour plus de détails, vous pouvez consulter la documentation de Prometheus.

Si cette exigence n'est pas respectée, vous pourriez rencontrer un message d'erreur comme celui-ci :

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

Voici quelques moyens de résoudre ce problème :

Si vous travaillez avec un serveur cible comme Node Exporter, envisagez de le mettre à jour vers la dernière version. Les mises à jour récentes garantissent généralement que l'en-tête Content-Type est correctement défini, ce qui devrait résoudre l'erreur dans Prometheus.

Pour les serveurs cibles personnalisés, tels qu'une route API que vous avez développée pour retourner des métriques Prometheus, vous pouvez définir directement l'en-tête Content-Type dans la réponse.

Par exemple, si vous utilisez HapiJS, au lieu de retourner vos métriques comme ceci :

return metrics

Vous pouvez définir l'en-tête Content-Type comme ceci :

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

Voici les en-têtes Content-Type pris en charge en fonction du protocole des métriques que vous retournez :

  • 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

Vous pouvez également définir un protocole de secours dans votre fichier de configuration prometheus.yml. Ce protocole sera utilisé si le serveur cible ne spécifie pas d'en-tête Content-Type.

Voici un exemple :

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

Les valeurs prises en charge sont PrometheusProto, PrometheusText0.0.4, PrometheusText1.0.0, OpenMetricsText0.0.1, et OpenMetricsText1.0.0.