Pular para o conteúdo principal

Prometheus

prometheus

O Prometheus é um kit de ferramentas de monitoramento e alerta de sistemas de código aberto com um ecossistema ativo. É o único sistema suportado diretamente pelo Kubernetes e o padrão de fato em todo o ecossistema nativo da nuvem. É um projeto open source graduado pela CNCF e escrito em golang.

  • Armazena e coleta dados de métricas em séries temporais, ou seja, carimbadas com data e hora em que foram registradas.
  • Pode usar tags inclusive para armazenamento das métricas.

Github Prometheus

Funcionalidades

  • Modelo de dados multidimensional com dados de métrica em séries identificadas por nome para chave/valor.
  • Utiliza a linguagem PromQL que é mais poderosa que a SQL para monitoramento.
  • Nodes independentes e autônomos sem utilização de um sistema distribuído.
  • Métricas são coletadas via HTTP. O Prometheus vai até a aplicação e coleta no endpoint especificado.
  • Entrega de métricas pode utilizar um gateway intermediário.
  • O destino pode ser descoberto via service discovery ou configuração estática.
  • Suporta vários dashboards do mercado.
  • Configuração de alertas.

Métricas

São medições numéricas de dados relacionados a elementos do seu software ou da infraestrutura. Normalmente esses dados numéricos são relacionados por uma linha temporal.

Série temporal significa que mudanças são registradas ao longo do tempo.

Métricas do SistemaMétricas de Negócio
LatênciaNúmero de usuários acessando aplicação
Quantidade de RequisiçõesNúmero de boletos emitidos
Consumo de recursosCompras de um determinado produto
APIs mais acessadasFaturamento diário
Quantidade de erros

Por exemplo, o aplicativo pode ficar lento quando o número de solicitações é alto. Se você tiver a métrica de contagem de solicitações, poderá identificar o motivo e aumentar o número de servidores para lidar com a carga.

Métrica não é log

MétricasLog
Dados numéricosDados textuais
GráficoMensagens de erro
AgregaçõesInformações
PerformanceBuscáveis

Prometheus vs InfluxDB

Essas são as duas principais ferramentas de monitoramento hoje. Qual a diferença e quando usar cada uma?

O que ambos fazem iguais:

  • Compactação de dados
  • Dados multidimensionais (Prometheus usa labels e Influx tags)
  • Sistema de alerta (Alertmanager no Prometheus e Kapacitor no InfluxDB)
  • Linguagem de consulta para interagir com as métricas e analisá-las
  • Ambos tem integração com muitas outras ferramentas. O Prometheus um pouco mais, mas a grande maioria do que precisamos tem nas duas. O que não tem de integração pode ser resolvido com webhook em ambos.
  • Comunidade de desenvolvedores grande. O Prometheus um pouco mais.

Diferença entre eles:

  • InfluxDB tende a ser usado para um banco de dados de séries temporais e o prometheus tende ser mais usado no propósito de monitoramento.
  • InfluxDB tem uma linguagem própria FluxQL e o Prometheus o PromQL.
    • O PromQL é mais fácil e desenvolvido para fins de monitoramento, alerta e gráficos. O software de banco de dados Prometheus assume automaticamente muitas coisas sobre nossa consulta e não precisamos fornecer todas as etapas.
    • O FluxQL é necessário a passagem de mais parâmetros pois o InfluxDB é um banco de dados de série temporal para uso geral, enquanto o Prometheus foi desenvolvido especialmente para monitoramento.
  • InfluxDB suporta tipos float64, int64, bool e string e o Prometheus float64 e strings
  • InfluxDB grava dados com registro de data e hora até em nanosegundos e o Prometheus em milisegundos.
  • InfluxDB não extrai métricas periodicamente do sistema destino, ele espera que um aplicativo envie os dados para ele. O Prometheus pode extrair as métricas do sistema alvo.
  • InfluxDB possui problema com alto consumo de memória e CPU em relação ao Prometheus.
  • InfluxDB tem como objetivo guardar todo tipo de dados por muito tempo enquanto o Prometheus destina-se a guardar dados por padrão apenas de 15 dias, mas pode ser alterado.
  • Configuração no InfluxDB é feita por chamadas de API enquanto no Prometheus é por arquivo YAML. Nesse caso a configuração com o Prometheus é mais fácil inclusive. No InfluxDB é difícil garantir que as alterações sejam idempotentes porque você pode invocar o script de configuração várias vezes.

O InfluxDB é uma ferramenta mais poderosa e para grande volume de dados e de uso geral. Por outro lado o Prometheus tem uma instalação mais simples, uma comunidade maior.

Qualquer uma das ferramentas vai te atender bem. Mas fica em mente que se você só quer monitorar algo, para que usar uma bazuca para matar um mosquito?

Quando não usar o Prometheus?

A compactação de dados antigos pelo Prometheus faz com que a precisão não seja 100%. Ele calcula médias e substitui os dados para diminuir o uso de disco. Isso pode ser configurado, mas o consumo de disco irá aumentar muito.

Se você precisa de 100% de precisão o Prometheus não é uma boa escolha, pois os dados coletados provavelmente não serão tão confiáveis. Nesse caso seria melhor usar algum outro sistema para coletar e analisar os dados que precisam de 100% de precisão e Prometheus para o restante do monitoramento.