Prometheus: Rozwiązywanie problemów

Błędy, które możesz napotkać z Prometheus

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Prometheus cloud, które zapewnia wiele korzyści, w tym:

  • Alert Manager w zestawie do wysyłania alertów do Slack, Mattermost, PagerDuty, itp.
  • Dedykowany serwer e-mail do wysyłania nieograniczonych alertów e-mail.
  • Blackbox do sondowania HTTP, ICMP, TCP i więcej.
  • Łatwa konfiguracja z edytorem plików konfiguracyjnych online.
  • Bezproblemowe aktualizacje za pomocą jednego kliknięcia.
  • Optymalna wydajność i solidne bezpieczeństwo dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Prometheus cloud hosting Stackhero!

Wraz z wydaniem Prometheus v3, serwery docelowe muszą teraz zawierać nagłówek Content-Type w swoich odpowiedziach, aby poinformować Prometheus o protokole metryk zawartych w odpowiedzi. Dotyczy to narzędzi takich jak Node Exporter, które powinny teraz odpowiadać na żądania HTTP Prometheus z odpowiednim Content-Type. Więcej szczegółów można znaleźć w dokumentacji Prometheus.

Jeśli ten wymóg nie zostanie spełniony, możesz napotkać taki komunikat o błędzie:

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

Oto kilka sposobów na rozwiązanie tego problemu:

Jeśli pracujesz z serwerem docelowym takim jak Node Exporter, rozważ jego aktualizację do najnowszej wersji. Ostatnie aktualizacje zazwyczaj zapewniają, że nagłówek Content-Type jest poprawnie zdefiniowany, co powinno rozwiązać błąd w Prometheus.

Dla niestandardowych serwerów docelowych, takich jak trasa API, którą opracowałeś do zwracania metryk Prometheus, możesz bezpośrednio ustawić nagłówek Content-Type w odpowiedzi.

Na przykład, jeśli używasz HapiJS, zamiast zwracać swoje metryki w ten sposób:

return metrics

Możesz ustawić nagłówek Content-Type w ten sposób:

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

Oto obsługiwane nagłówki Content-Type w zależności od protokołu metryk, które zwracasz:

  • 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

Możesz również zdefiniować protokół zapasowy w pliku konfiguracyjnym prometheus.yml. Ten protokół będzie używany, jeśli serwer docelowy nie określi nagłówka Content-Type.

Oto przykład:

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

Obsługiwane wartości to PrometheusProto, PrometheusText0.0.4, PrometheusText1.0.0, OpenMetricsText0.0.1, i OpenMetricsText1.0.0.