Prometheus: Dépannage

Erreurs que vous pouvez rencontrer avec Prometheus

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution Prometheus cloud prête à l'emploi qui offre de nombreux avantages, notamment :

  • Alert Manager inclus pour envoyer des alertes vers Slack, Mattermost, PagerDuty, etc.
  • Serveur email dédié pour envoyer un nombre illimité d'alertes par e-mail.
  • Blackbox pour sonder HTTP, ICMP, TCP et bien plus.
  • Configuration simple grâce à l'éditeur de fichier de configuration en ligne.
  • Mises à jour faciles en un clic.
  • Performance optimale et sécurité renforcée grâce à une VM privée et dédiée.

Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Prometheus cloud hosting de Stackhero !

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.