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:
- Como um http server que salva e expõe as métricas, assim você pode consultar usando outro sistema de observabilidade.
- 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.
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
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
- Extraia os arquivos do tar:
1
tar -xvf node_exporter-1.3.0.linux-amd64.tar.gz
- Mova os arquivos para o diretório
/opt/
:1
tar -xvf node_exporter-1.3.0.linux-amd64.tar.gz
- Navegue para a pasta do node_exporter:
1
cd /opt/node_exporter-1.3.0.linux-amd64
- Execute o node exporter em background (para não travar o cmd):
1
nohup ./node_exporter &
- 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
- Suba a imagem do Grafana:
1
docker run -d -p 3000:3000 --name grafana grafana/grafana:latest
- Verifique se o Docker e o Prometheus estão no ar:
1
docker ps
- Acesse a interface do Grafana:
- URL:
http://192.168.1.3:3000
- Login padrão:
admin
- Senha padrão:
admin
- URL:
- 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
- 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.
- Acesse os dashboard nesse [repositório] e o
- Seu Dashboard estará disponível e configurado.
Obrigado por ler até aqui!