Post

Monitoria e Observabilidade com Prometheus e Grafana

Monitoria e Observabilidade com Prometheus e Grafana

Prometheus

É uma ferramenta de monitoria, muito utilizado em ambientes dinâmicos, como containers (k8s, swarms, e etc…)

Pode ser utilizado em outros ambientes bare metal, mas o forte dele é em infraestrutura de microserviços e containers.

Você utilizar ele de diversas maneiras:

  1. Como um http server que salva e expõe as métricas, assim você pode consultar usando outro sistema de observabilidade.
  2. Como um sistema de observabilidade completo, criando dashboards e gerando alertas em cima dessas métricas

Arquitetura Prometheus

Um outro ponto importante é que o Prometheus faz o pull das métricas, diferente de outras aplicações de monitoria, realizando esse pull, deixa o processo mais leve e menos danoso para o servidor/ambiente monitorado.

  • architecture

Alguns aspectos importantes são:

  • Targets: Qualquer ambiente que podemos recolher as métricas, como: linux server, http server, databases, containers, microserviços e qualquer ambiente.
  • Units: Qualquer medida que podemos analisar do ambiente: CPU, memória, latência, espaço em disco, etc…
  • Metrics: Todas as units que foram recolhidas e armazenadas no Prometheus.

O Retrieval é o agente que envia essas métricas, ele recolhe essas informações atráves de uma URL de conexão com seu ambiente. Para isso vamos precisar de um library que expõe a sua aplicação com o recurso /metrics

  • Alguns serviços já possuem esse /metrics expostos.

Arquitetura Prometheus Simplificada

  • architecture_prometheus
  • Fonte: https://michelleamesquita.medium.com/monitoramento-com-grafana-prometheus-fc2227e67433

O nosso Prometheus utiliza o retrieval para realizar o pull das métricas de nossos ambientes e adiciona essas métricas em um Storage (Time Series Database). Com o Grafana nós conseguimos consultar essas métricas e criar dashboards personalizados de monitoria e observabilidade.

Podemos também usar a própria UI do Prometheus ou consultar via API.

Grafana

É uma ferramenta Open Source para visualização de dados, ela é muito popular para visualização de monitoria e observabilidade.

Você pode criar alertas, queries e diversas visualizações consultando as /metrics.

Existem vários dashboards já pré-configurados que foram disponibilizados pela comunidade, vamos utilizar um deles:

  • Nós vamos utilizar os dashboard do repositório Grafana Dashboards, segue link do GitHub: acesse aqui

  • Podemos importar um dashboard para o grafana usando usando o tema.json do repositório acima: acesse aqui

O que é o Node Exporter?

  • O Node Exporter é um componente do ecossistema de monitoramento do Prometheus, utilizado para coletar e expor métricas sobre o hardware e o sistema operacional de um nó (servidor) em um formato que pode ser lido pelo Prometheus. Ele é especialmente útil para obter informações detalhadas sobre o desempenho e o estado dos recursos do sistema, como CPU, memória, disco, rede, entre outros.

Subindo um Serviço de Observabilidade e Monitoria com Prometheus e Grafana

Eu adicionei todos os arquivos que utilizei em um repositório no meu GitHub. Você pode clonar e iniciar com os comandos abaixo.

Resumo dos Arquivos:

  • Vagrantfile: Configuração para criar e provisionar a VM com Vagrant.
  • provision.sh: Script de provisionamento para instalar e configurar Docker na VM.
  • prometheus.yml: Arquivo de configuração do Prometheus para definir as fontes de scrape.
  • node_exporter-1.3.0.linux-amd64.tar.gz: Binário do Node Exporter para monitorar a máquina.

Subindo a VM

Para iniciar a VM, use o comando:

1
vagrant up

Acessando a VM

Sincronize e adicione os arquivos na pasta do servidor:

1
vagrant rsync

Configuração do Node Exporter

  1. Extraia os arquivos do tar:
    1
    
    tar -xvf node_exporter-1.3.0.linux-amd64.tar.gz
    
  2. Mova os arquivos para o diretório /opt/:
    1
    
    tar -xvf node_exporter-1.3.0.linux-amd64.tar.gz
    
  3. Navegue para a pasta do node_exporter:
    1
    
    cd /opt/node_exporter-1.3.0.linux-amd64
    
  4. Execute o node exporter em background (para não travar o cmd):
    1
    
    nohup ./node_exporter &
    
  5. Verifique os logs do nohup:
    1
    
    tail -f nohup.out`
    

Testando a Conexão do Node Exporter (Opcional)

Para instalar telnet, se necessário, e testar a conexão do node exporter:

1
2
yum install telnet -y
telnet 192.168.1.6 9100

Configuração do Prometheus

Suba o Prometheus via Docker:

1
docker run -d -p 9090:9090 -v /vagrant/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Acessando as Interfaces

  • Acesse a UI do Prometheus em: http://192.168.1.6:9090
  • Acesse o node exporter em: http://192.168.1.6:9100/metrics

Configuração do Grafana

  1. Suba a imagem do Grafana:
    1
    
    docker run -d -p 3000:3000 --name grafana grafana/grafana:latest
    
  2. Verifique se o Docker e o Prometheus estão no ar:
    1
    
    docker ps
    
  3. Acesse a interface do Grafana:
    • URL: http://192.168.1.3:3000
    • Login padrão: admin
    • Senha padrão: admin
  4. Configure a fonte de dados no Grafana:
    • Vá em Data Sources -> Add data source -> Prometheus
    • Em Connection -> URL, adicione: http://192.168.1.6:9090
    • Clique em Save & Test
  5. Importando um Dashboard pré-configurado para o Node Exporter:
    • Acesse os dashboard nesse [repositório] e o .json que utilizei [aqui].
    • Copie o conteúdo do arquivo .json do dashboard.
    • No Grafana, vá em Dashboards -> Create Dashboard -> Import.
    • Cole o conteúdo do .json no campo Import.
    • Selecione a fonte de dados Prometheus configurada anteriormente.
    • Clique em Import.
  6. Seu Dashboard estará disponível e configurado.
    • dashboard

Obrigado por ler até aqui!

Fazendo o que precisa ser feito.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.