domingo, 23 de janeiro de 2022

OMV5 - Métricas de funcionamento do servidor com Pode Exporter, Prometheus e Grafana

 Pessoal,

O OpenMediaVault, pelo menos a versão 5, contem uma apresentação das métricas de funcionamento bem simples e feias, pelo menos para o meu gosto.

Para acessá-las, vá em Diagnostics -> System Information -> Performance statistics e escolha a métrica desejada: uso da CPU, dos discos, médias de trabalho, uso da memória e da rede e tempo de funcionamento.

Vejam alguns exemplos:


Não que sejam imprestáveis as métricas, mas eu acho que poderiam ser mais completas e com uma apresentação melhor. O OMV6 parece que terá uma melhora significativa (e necessária) na parte visual. Os betas mostram que será algo como a figura abaixo:


Bem melhor, né? Mas ainda vai demorar um tempo pra versão estável do OMV6 sair. Então, até lá, vamos ter que melhorar isso no OMV5.

Bom, dando uma pesquisada, encontrei uma solução interessante: são 3 conteineres do Docker que juntos coletam dados e produzem uma apresentação das métricas bem configurável e bem apresentável. A sequência é essa aqui:

1 - Instalar o Prometheus Node Exporter, responsável por coletar as métricas;

2 - Instalar o Prometheus. Ele coleta as métricas de alvos configurados (no caso, pelo Node Exporter) em determinados intervalos e exibe os resultados;

3 - Instalar o Grafana, que utilizará os dados do Prometheus e produzirá apresentações mais completas e bonitas.

Para realizar estas instalações, segui algumas dicas desse vídeo aqui. Caso precise dele no futuro, vou deixar ele disponibilizado aqui no blog, logo abaixo:


O autor do vídeo também tem um blog onde coloca algumas instruções para a instalação (veja aqui). Tentei fazer como ele orientou, mas tive que dar algumas adaptadas. Diga-se de passagem, os conteúdos dele no YT são muito bons! Vale a pena assistir e seguir o canal dele (aqui).

A primeira coisa a se fazer é criar um arquivo de configuração para o Prometheus (prometheus.yml). Primeira coisa a ser dita: esse arquivo deve estar no disco onde está armazenado o OMV (ou seja, no meu caso, o /sda). Assim, criei o arquivo dentro desta pasta:

# /srv/Configs/Prometheus/prometheus.yml

Para criar o arquivo, criei todo o caminho até o arquivo (/srv/Config/Prometheus) e lá dentro criei um arquivo vazio chamado "prometheus.yml" com o nano:

# /srv/Configs/Prometheus# nano prometheus.yml

Dentro do arquivo coloquei o seguinte texto:

global:

  scrape_interval: 5s

  external_labels:

    monitor: 'node'

scrape_configs:

  - job_name: 'prometheus'

    static_configs:

      - targets: ['192.168.1.3:9090'] ## IP Address do localhost. Direcione a porta para o seu contêiner

  - job_name: 'node-exporter'

    static_configs:

      - targets: ['192.168.1.3:9100'] ## IP Address do localhost

Interessante observar que os alvos (targets) devem ser o IP do seu servidor e você deve certificar-se que as portas escolhidas não estão sendo utilizadas por nenhum contêiner do Docker.

Agora vamos instalar o Prometheus Node Exporter.

Eu até tentei criar um arquivo para o Docker Compose, mas só foi funcionar mesmo com a boa e velha linha de comando:

# docker run -d  --net="host"  --pid="host"  -v "/:/host:ro,rslave"  quay.io/prometheus/node-exporter:latest  --path.rootfs=/host


Esta linha é, de um modo mais apresentável, isso aqui embaixo:
docker run -d \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host
Enfim, em poucos segundos ele instala e tudo está pronto. Um detalhe: se você for ao Portainer, verá que surgiu um contêiner com um nome estranho (o meu apareceu "unruffled_boyd", mas logo na frente do nome já aparece o nome da imagem (quay.io/prometheus/node-exporter:latest). Como tenho TOC, parei o contêiner e acrescentei o nome "node_exporter" e mandei funcionar novamente.

Para certificar-se que tudo está certo,  ao você ir na página que configurou para o Node Exporter lá no prometheus.yml, você deve encontrar isso aqui:


Ao clicar ali no Metrics, deve aparecer isso aqui:


Se apareceu uma extensa lista de coisas, então você está no caminho certo.

Agora vamos instalar o Prometheus. Pra isso, criei esse arquivo aqui no Docker Compose:


---

version: "2.1"

services:

   prometheus:

         image: prom/prometheus:latest

         container_name: prometheus

         ports:

             - '9090:9090' #modifique as portas caso necessário

         volumes:

             -'/srv/Configs/Prometheus/prometheus.yml:/etc/prometheus/prometheus.yml' #coloque o caminho da sua instalação

         restart: unless-stopped



Bom, se tudo deu certo aí, você conseguirá ver isso aqui acessando o endereço do seu servidor pela porta que configuramos aqui neste contêiner (no meu caso, 9090):


Pronto, essa é a página para configuração do Prometheus. Outra verificação importante é ir em Status -> Service Discovery:


E agora deveremos ver isso aqui:


Ou seja, nossos dois serviços instalados (o Node Exporter e o Prometheus) estão ativos e foram detectados.

Caso você seja masoquista e goste de usar a linha de comandos ao invés do Docker Compose, o comando para instalar o Prometheus é esse aqui (não tem que saltar linha, ok? é apenas a quebra automática do texto):

# docker run -d --name prometheus -p 9090:9090 -v /srv/Configs/Prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:latest


O Prometheus, até onde percebi, não é nada simples para configurar. Para isso, usaremos o Grafana!

O Grafana é bem fácil também de instalar. O você usa a linha de comando com:

# docker run -d --name=grafana -p 3000:3000 grafana/grafana

Ou usa o Docker Compose com:


---

version: "2.1"

services:

   grafana:

     image: grafana/grafana:latest

     container_name: grafana

     ports:

       - 3000:3000 #modifique o 'primeiro' 3000 de acordo com sua necessidade

     restart: unless-stopped



Vá no endereço do seu servidor e digite a porta que você configurou (no meu caso: 192.168.1.3:3000) e você deverá encontrar isso:


Parabéns! Deu tudo certo!

Para configurar o Grafana, use admin como username e senha (e troque por uma senha forte depois). Na tela principal, clique em "Data Sources" e escolha "Prometheus". Em URL, digite o endereço do Prometheus com a porta escolhida (no meu caso: http://192.168.1.3:9090) e, no final da página, clique em "Save and Test".

Agora vá para aqui e escolha o dashboard que você quer usar. São milhares de opções, mas lembre-se de usar o filtro: Prometheus em Data Sources e Node Exporter em Collector Types. Após escolher o layout, anote o número que aparece à direita da tela ("Get This Dashboard"), volte ao Grafana, clique no "+" que está à esquerda da tela ("Create") e depois em "Import" e digite o número do dashboard que você escolheu.

Pronto, agora você tem um dashboard apresentável!




Mais um detalhe. Eu tenho 4 servidores rodando: um com Proxmox, um com um Ubuntu Server para diversas coisas (rodando em VM), um com o OMV (rodando também em VM) e o Raspberry Pi. Neste Dashboard, consigo ver as métricas dos 4 ao mesmo tempo. Para isso, faça o seguinte:
 
1 - instale o Node Exporter em cada um dos servidores usando o mesmo comando já comentado acima:

# docker run -d  --net="host"  --pid="host"  -v "/:/host:ro,rslave"  quay.io/prometheus/node-exporter:latest  --path.rootfs=/host

2 - no servidor onde ficará o Prometheus (no meu caso, o 192.168.1.3), naquele arquivo que criamos (prometheus.yml), vamos acrescentar os endereços dos servidores com Node Exporter instalado. Ficará assim:

global:

  scrape_interval: 5s

  external_labels:

    monitor: 'node'

scrape_configs:

  - job_name: 'prometheus'

    static_configs:

      - targets: ['192.168.1.3:9090'] ## IP Address do localhost. Direcione a porta para o seu contêiner

  - job_name: 'node-exporter'

    static_configs:

      - targets: ['192.168.1.3:9100','192.168.1.44:9100','192.18.1.2:9100','192.168.1.22:9100'] ## IP Address do localhost

3 - Reinicie todos os conteineres (Prometheus e Grafana). Talvez seja necessário apagar o Dashboard anterior e refazê-lo (ao refazer, citaremos apenas o ip de onde está instalado o Prometheus, ou seja, 192.168.1.3:9090). Pronto!

Talvez seja necessário instalar o Docker em algum dos seus servidores. Para instalar, siga as instruções do site do Docker.

Depois de tudo pronto, ficou assim:


Pronto!

Nenhum comentário:

Postar um comentário