Prometheus: Risoluzione dei problemi

Errori che puoi incontrare con Prometheus

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Prometheus cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Alert Manager incluso per inviare avvisi a Slack, Mattermost, PagerDuty, ecc.
  • Server email dedicato per inviare avvisi email illimitati.
  • Blackbox per sondare HTTP, ICMP, TCP e altro ancora.
  • Configurazione facile con editor di file di configurazione online.
  • Aggiornamenti senza sforzo con un solo clic.
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.

Risparmia tempo e semplifica la tua vita: bastano solo 5 minuti per provare la soluzione di Prometheus cloud hosting di Stackhero!

Con il rilascio di Prometheus v3, è ora necessario che i server target includano l'intestazione Content-Type nelle loro risposte per informare Prometheus sul protocollo delle metriche contenute nella risposta. Questo influisce su strumenti come Node Exporter, che ora devono rispondere alle richieste HTTP di Prometheus con il Content-Type appropriato. Per maggiori dettagli, puoi consultare la documentazione di Prometheus.

Se questo requisito non viene soddisfatto, potresti incontrare un messaggio di errore come questo:

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

Ecco alcuni modi per risolvere questo problema:

Se stai lavorando con un server target come Node Exporter, considera di aggiornarlo all'ultima versione. Gli aggiornamenti recenti generalmente assicurano che l'intestazione Content-Type sia correttamente definita, il che dovrebbe risolvere l'errore in Prometheus.

Per i server target personalizzati, come una rotta API che hai sviluppato per restituire metriche Prometheus, puoi impostare direttamente l'intestazione Content-Type nella risposta.

Ad esempio, se stai usando HapiJS, invece di restituire le tue metriche in questo modo:

return metrics

Puoi impostare l'intestazione Content-Type in questo modo:

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

Ecco le intestazioni Content-Type supportate in base al protocollo delle metriche che stai restituendo:

  • 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

Puoi anche definire un protocollo di fallback nel tuo file di configurazione prometheus.yml. Questo protocollo verrà utilizzato se il server target non specifica un'intestazione Content-Type.

Ecco un esempio:

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

I valori supportati sono PrometheusProto, PrometheusText0.0.4, PrometheusText1.0.0, OpenMetricsText0.0.1, e OpenMetricsText1.0.0.