Prometheus: Resolução de Problemas

Erros que pode encontrar com o Prometheus

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Prometheus cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Alert Manager incluído para enviar alertas para Slack, Mattermost, PagerDuty, etc.
  • Servidor de email dedicado para enviar alertas de email ilimitados.
  • Blackbox para sondar HTTP, ICMP, TCP, e mais.
  • Configuração fácil com editor de ficheiros de configuração online.
  • Atualizações sem esforço com apenas um clique.
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: leva apenas 5 minutos para experimentar a solução de hospedagem cloud Prometheus da Stackhero!

Com o lançamento do Prometheus v3, é agora necessário que os servidores alvo incluam o cabeçalho Content-Type nas suas respostas para informar o Prometheus sobre o protocolo das métricas contidas na resposta. Isto afeta ferramentas como o Node Exporter, que agora devem responder a pedidos HTTP do Prometheus com o Content-Type apropriado. Para mais detalhes, pode consultar a documentação do Prometheus.

Se este requisito não for cumprido, poderá encontrar uma mensagem de erro como esta:

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

Aqui estão algumas formas de resolver este problema:

Se estiver a trabalhar com um servidor alvo como o Node Exporter, considere atualizá-lo para a versão mais recente. As atualizações recentes geralmente garantem que o cabeçalho Content-Type está corretamente definido, o que deverá resolver o erro no Prometheus.

Para servidores alvo personalizados, como uma rota API que desenvolveu para retornar métricas do Prometheus, pode definir diretamente o cabeçalho Content-Type na resposta.

Por exemplo, se estiver a usar HapiJS, em vez de retornar as suas métricas assim:

return metrics

Pode definir o cabeçalho Content-Type assim:

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

Aqui estão os cabeçalhos Content-Type suportados com base no protocolo das métricas que está a retornar:

  • 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

Também pode definir um protocolo de fallback no seu ficheiro de configuração prometheus.yml. Este protocolo será utilizado se o servidor alvo não especificar um cabeçalho Content-Type.

Aqui está um exemplo:

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

Os valores suportados são PrometheusProto, PrometheusText0.0.4, PrometheusText1.0.0, OpenMetricsText0.0.1, e OpenMetricsText1.0.0.