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 Managerinclus pour envoyer des alertes versSlack,Mattermost,PagerDuty, etc.- Serveur email dédié pour envoyer un nombre illimité d'alertes par e-mail.
Blackboxpour sonderHTTP,ICMP,TCPet 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 !
Résoudre l'erreur "received unsupported Content-Type "..." and no fallback_scrape_protocol specified for target"
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 :
1. Mettez à jour vos serveurs cibles
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.
2. Définissez l'en-tête Content-Type pour vos serveurs cibles
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
3. Définissez un protocole de secours
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.