Monitoramento completo com EC2 + Grafana + Prometheus e Loki
Published: 2023-03-02 21:52:38

Em um post [passado](https://dev.to/pcb737/ec2-com-logs-centralizados-utilizando-loki-fluentbit-grafana-8jp) fiz a criação do servidor do Grafana e instalação do plugin do Loki. Também montei um servidor com nginx padrão para se utilizado no envio dos logs.

Neste post quero trazer o monitoramento full de uma instância EC2, monitoramento de disco, cpu, rede, swap, processos que estão rodando na máquina e logs.

Não vou contemplar a criação do servidor do Grafana e nem o servidor que será monitorado. Já vou direto para o ponto onde vou subir o contêiner com o Prometheus, na máquina do server do Grafana e a configuração do dashboard para análise da saúde do ambiente.

Neste ponto já temos o docker instalado na instância do Grafana, com o contêiner do Grafana e Loki rondando. Agora vou subir o contêiner do Prometheus, mas antes vou baixar o arquivo de configuração e fazer a criação de um diretório onde ficará o arquivo de configuração para ser mapeado no contêiner do Prometheus. Segue abaixo os comandos:
```
sudo mkdir /docker && \
cd /docker && \
git clone https://gitlab.com/snippets/2484803.git && \
sudo mv 2484803 prometheus
```
Neste ponto já temos os arquivos de configuração, agora podemos subir o contêiner do Prometheus com esse arquivo de configuração.

```
docker run -d --name=prometheus \
--network monitoring \
-p 9090:9090 \
-v /docker/prometheus/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml bitnami/prometheus:latest
```
Se tudo estiver ok, deverá estar desta forma:

![ContainersRUN](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gdifaiz0nvgwu27329k5.png)

Com o contêiner do Prometheus up, vou iniciar a configuração do Datasource. Para isso vá em **configurações > Plugins** na busca digite Prometheus. Deve estar assim:

![DataSourceGrafana](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qn4p331era5kavmnxzeb.png)
Selecionando o plugin do Prometheus irá para tela onde irei configurar o Datasource.

![Datasource](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/drvropsv8czgquul2tln.png)
Selecione **Create a Prometheus data source** e faça o preenchimento das seguintes informações:

![formulario](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjudoyz7cdmdn15uksqz.png)
Feito isso clique em **Salve & test**
Neste ponto já temos o Datasource do Prometheus configurado com o Grafana.
Agora vou fazer as configurações na instância que será monitorada. Na instância que será monitorada eu irei configurar o **node exporter**, que é responsável por enviar as métricas para o Prometheus.

## Instalando Node Exporter

Acesse via ssh a instância a ser monitorada. Esse servidor que será monitorado, eu estou utilizando Amazon Linux2. Com isso vou baixar o executável do **node_exporter** no diretório home do usuário **ec2-user** utilizando o comando abaixo:

```
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
```
Você pode verificar [aqui](https://prometheus.io/download/) versões mais atualizadas do node_exporter.
Agora vou descompactar e renomear o diretório do pacote baixado:

```
tar xf node_exporter-1.5.0.linux-amd64.tar.gz && \
mv node_exporter-1.5.0.linux-amd64 node_exporter
```
Feito isso, vou acessar o diretório node_exporter e inciar o executável. Vou executar com **nohup**, para que minha sessão não fica presa ao executável. O comando fica assim:
 
```
nohup ./node_exporter &
```
Pressionando 2x o enter para liberar a console, deverá ficar desta forma:

![nohup](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/avmz3i4703326yfaropm.png)
Para certificar que está tudo ok, podemos acessar via browser:

```
http://ip_do_server_node_exporter:9100
```
Você deve ver uma tela igual a essa:

![node_exporter_](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oy4q9vadawoouljc49ri.png)

Agora vou voltar ao servidor onde está instalado o Prometheus para que posso adicionar o ip interno da instância a ser monitorada, para que possa fechar a comunicação entre eles.
No servidor do Prometheus vá no diretório **docker/prometheus** e edite o arquivo **prometheus.yml**. Se você estiver com o arquivo que eu disponibilizei, deverá editar somente a **linha 28**.

![confignodeexporter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx85hn2e81osd40ovgy5.png)

Basta salvar o arquivo, o servidor já irá começar a se comunicar com o agente. Você pode validar, acessando o Prometheus via browser.

```
http://ip_do_servidor_grafana:9090
```

![console_prometheus](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r9hzgagvartsmty6kx3.png)
Acessando no menu superior **status > Service Discovery**. Você será direcionado para essa tela:

![service_discovery](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n43vk36o8uij8w278utu.png)
Agora clicando em **show more**, terá no próprio servidor do Prometheus e o servidor que vou monitorar.

![server_monitoring](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j2mfh09d2ykegmwhu0nq.png)
Configurações ok, vou para criação do dashboard de monitoramento de recursos e recebimento dos logs. A parte de config de recebimento de logs contemplei neste [post](url)
Para facilitar vou pegar um dashboard pronto e apenas importa-lo para o ambiente de teste. Selecione a opção **Dashboard > + Import**.

![import_dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sabbubnowc0x1kpxv7uu.png)
Nessa tela você vai adicionar o **ID 1860 > load**

![load](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5cgt00n3y9p9krn999sn.png)
A tela seguinte deverá estar desta forma:

![import_dash](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8xm14themn0p5h2xkb9g.png)
Agora é clicar em **import**
Se estiver tudo ok, você deve visualizar algo:

![dash](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nayzmy5pox09vpk1v9gk.png)
**Não esqueça de salvar o dash para não peder as configs..**
Agora vou inserir a visualização dos logs, as configs para deixar o Loki funcional estão [aqui](url).
Selecione add painel > add new panel

![add_new_panel](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p74xwbqwp828m6ta8doj.png)
Add new panel, vamos selecionar o Datasource Loki

![datasource_loki](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6vjf39q8bihu8k8i2sqc.png)
Agora vamos filtrar por labels:

![filter_labels](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2de67a7l640qe92071if.png)
Pode dar um **Run queries** para validar que está trazendo os logs do ambiente correto. Se o retorno estiver desta forma:

![logs](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dxwu5jts5df7dnjzlfpw.png)
Basta dar um apply.
Para que você veja os logs sendo exibidos é necessário acessar o Nginx no servidor que está enviando os logs via browser, e ficar dando f5 na página para gerar conteúdo dentro do access.log.

![end](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/503c633t5cyxiwwx7lgl.png)

Ambiente finalizado! Espero ter ajudo e nos vemos no próximo post

E ai vamos se conectar? Entre em contato comigo:
https://www.linkedin.com/in/pcmalves/