Prometheus: Dépannage

Erreurs que vous pouvez rencontrer avec Prometheus

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une plateforme Prometheus cloud entièrement managée, pensée pour la fiabilité et la simplicité :

  • Alert Manager est intégré, ce qui vous permet d'envoyer vos alertes directement vers Slack, Mattermost, PagerDuty et d'autres destinations populaires.
  • Un serveur d'e-mail dédié vous permet d'envoyer un nombre illimité d'alertes par e-mail sans configuration supplémentaire.
  • Blackbox est inclus, pour sonder les protocoles HTTP, ICMP, TCP et bien d'autres, afin d'assurer une supervision complète.
  • Configurez rapidement votre instance grâce à l'éditeur de fichier de configuration en ligne. Il n'est pas nécessaire de gérer le YAML manuellement.
  • Appliquez les mises à jour en un clic. Stackhero s'occupe du processus de mise à niveau pour vous, en limitant les interruptions et les interventions manuelles.
  • Performances élevées et sécurité renforcée sont intégrées, grâce à votre propre infrastructure privée et dédiée.

Soyez opérationnel en environ 5 minutes. Stackhero prend en charge l'installation pour que vous puissiez vous concentrer sur la supervision, pas sur la maintenance. Essayez l'hébergement Prometheus cloud sur Stackhero pour simplifier vos workflows 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 afin d'indiquer à Prometheus le protocole des métriques contenues dans la réponse. Cela concerne notamment des outils comme Node Exporter, qui doivent maintenant répondre aux requêtes HTTP de Prometheus avec le bon Content-Type. Pour plus d'informations, vous pouvez consulter la documentation Prometheus.

Si cette exigence n'est pas respectée, vous pouvez 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 solutions pour corriger ce problème :

Si vous utilisez un serveur cible comme Node Exporter, pensez à le mettre à jour vers la dernière version. Les versions récentes définissent généralement correctement l'en-tête Content-Type, ce qui devrait résoudre l'erreur dans Prometheus.

Pour les serveurs cibles personnalisés, comme une route d'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 ainsi :

return metrics

Vous pouvez définir l'en-tête Content-Type de cette façon :

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

Voici les en-têtes Content-Type supportés selon le protocole des métriques retournées :

  • 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 précise pas d'en-tête Content-Type.

Voici un exemple :

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

Les valeurs supportées sont PrometheusProto, PrometheusText0.0.4, PrometheusText1.0.0, OpenMetricsText0.0.1 et OpenMetricsText1.0.0.