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 à Slack, Mattermost, PagerDuty, etc.
  • Serveur d'email dédié pour envoyer des alertes email illimitées.
  • Blackbox pour sonder HTTP, ICMP, TCP, et plus encore.
  • Configuration facile avec un éditeur de fichier de configuration en ligne.
  • Mises à jour sans effort en un clic.
  • Performance optimale et sécurité robuste 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 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.