Instalação e configuração do Node Exporter em servidores Linux
Configure seu servidor Linux para exportar as métricas de CPU, Memória, Discos entre outras com o Node Exporter
Fala pessoal tudo beleza?
Se você caiu nesse artigo pela primeira vez, fique sabendo que essa é uma série de artigos onde descrevo como montar uma stack de monitoramento usando o Grafana e Prometheus com o docker e docker-compose.
Artigos da série
- Monitorando seus servidores com Grafana e Prometheus
- Instalação e configuração do Node Exporter em servidores Linux (Você está aqui!)
- Criando alertas com Prometheus e Alertmanager
- Configure e gerencie alertas no Grafana: Maximize a eficiência do monitoramento
Neste artigo, parte 2, irei configurar um servidor Linux para exportar as métricas para que o Prometheus possa ler e armazenar em seu banco de dados, sendo possível a análise em tempo real através de dashboards do Grafana.
Para isso é necessário instalar e configurar o node exporter, que é um arquivo binário que irá obter várias métricas de seu servidor Linux e expor em um endpoint HTTP. Para saber mais sobre o node exporter acesse a documentação.
Pré requisitos
- Ter acompanhado a parte 1 dessa série (Monitorando seus servidores com Grafana e Prometheus)
- Um servidor Linux instanciado em qualquer clodud ou em uma VM, por exemplo o Virtual Box
- Acesso via SSH a instância do servidor
Instalando Node Exporter
Para a instalação do node exporter você pode acessar o github do projeto e verificar qual a última versão disponível para download. No momento desse artigo, a última versão estável é a 1.5.0
.
Acesse seu servidor via SSH e vamos começar com a instalação do exporter. Crie uma variável de ambiente apenas para facilitar no processo de instalação que irá conter o valor da versão do node exporter:
export VERSION=1.5.0
Os comandos listados abaixo, irão realizar o download do arquivo, descompactar e mover o arquivo binário do node exporter para o diretório /usr/local/bin
.
curl -LO https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-amd64.tar.gz
tar -xvf node_exporter-${VERSION}.linux-amd64.tar.gz
sudo mv node_exporter-${VERSION}.linux-amd64/node_exporter /usr/local/bin/
Configurando Node Exporter
Até agora apenas baixamos e copiamos o binário para seu diretório, mas ainda é necessário configurar o serviço.
Crie um usuário no Linux para que possamos usar ele para executar o node exporter. Esse usuário só irá executar o binário, não sendo possível acessar via SSH com ele:
sudo useradd -rs /bin/false node_exporter
Crie um arquivo de inicialização no systemd
para o binário:
sudo vim /etc/systemd/system/node_exporter.service
Cole o seguinte conteúdo dentro do arquivo node_exporter.service
:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Reinicie o deamon e inicie o serviço node_exporter
que acabamos de criar:
# Reinicia o deamon e inicia o serviço
sudo systemctl daemon-reload
sudo systemctl start node_exporter
Para gerenciar o serviço do node_exporter, você poderá usar os comandos:
# Os comandos start / restart / status / stop estarão disponíveis para o serviço
sudo systemctl status node_exporter
Após o start do serviço, se tudo ocorrer bem, o resultado deve ser o seguinte:
aristides@my-server:~$ sudo systemctl status node_exporter
● node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-10-17 00:25:38 -03; 20s ago
Main PID: 25276 (node_exporter)
Tasks: 5 (limit: 4915)
CGroup: /system.slice/node_exporter.service
└─25276 /usr/local/bin/node_exporter
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - sockstat" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - stat" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - textfile" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - time" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - timex" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - uname" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - vmstat" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - xfs" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg=" - zfs" source="node_exporter.go:104"
Oct 17 00:25:38 my-server node_exporter[25276]: time="2022-10-17T00:25:38-03:00" level=info msg="Listening on :9100" source="node_exporter.go:170"
Como pode ser visto no log, o serviço está escutando na porta 9100. Se você acessar o endereço IP da sua instância http://IP-SERVIDOR:9100/metrics
, terá um resultado semelhante a esse:
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 1.9151e-05
go_gc_duration_seconds{quantile="0.25"} 5.6041e-05
go_gc_duration_seconds{quantile="0.5"} 9.2601e-05
go_gc_duration_seconds{quantile="0.75"} 0.000134661
go_gc_duration_seconds{quantile="1"} 0.000524014
go_gc_duration_seconds_sum 0.250765764
go_gc_duration_seconds_count 1720
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 8
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.19.1"} 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 2.153176e+06
...
Pronto, você já está expondo as métricas do seu servidor Linux para que uma instância do Prometheus possa ler e armazenar em seu banco de dados.
Ative o serviço do node exporter para que sempre que o servidor reiniciar, o serviço seja iniciado automaticamente:
sudo systemctl enable node_exporter
Agora para seguir a diante, iremos usar a stack que criamos na parte 1 dessa séria, se você ainda não viu, recomendo dar uma olhada aqui nesse link para que você possa acompanhar sem grandes dúvidas as alterações necessárias no arquivo de configuração do Prometheus.
Configurando o Prometheus para "raspar" as métricas
Já estamos com o nosso servidor expondo as métricas na porta 9100, o que precisamos agora é configurar o Prometheus para que ele raspe esse servidor e colete suas métricas.
Para isso, abra o arquivo prometheus/prometheus.yaml
. O arquivo contém esse conteúdo atualmente:
global:
scrape_interval: 15s # Por padrão, o alvo será 'raspado' a cada 15 segundos
scrape_configs:
- job_name: 'prometheus'
# Esse valor irá sobreescrever o valor padrão global para esse alvo
scrape_interval: 5s
metrics_path: /metrics # Endpoint padrão para a raspagem das métricas
static_configs:
- targets: ['localhost:9090']
Adicione a seguinte entrada:
global:
scrape_interval: 15s # Por padrão, o alvo será 'raspado' a cada 15 segundos
scrape_configs:
- job_name: 'prometheus'
# Esse valor irá sobreescrever o valor padrão global para esse alvo
scrape_interval: 5s
metrics_path: /metrics # Endpoint padrão para a raspagem das métricas
static_configs:
- targets: ['localhost:9090']
# Nova entrada adicionada
- job_name: 'node_exporter'
scrape_interval: 5s
- targets: ['IP-SEU-SERVIDOR:9100'] # <-- Insira o IP público do servidor
labels:
alias: webserver
Como visto acima, foi adicionado um novo JOB chamado de node_exporter
, esse nome é sugestivo ao exporter, mas pode ser qualquer coisa.
Após adicionar a entrada de um novo target, reinicie o container docker caso ele esteja em execução ou inicie todos os containers:
docker-compose restart prometheus
# ou
docker-compose up -d
A partir desse momento, sua instância do Prometheus já deve estar recebendo os dados da sua instância Linux, dados esses de CPU, memória RAM, uso de disco, rede entre várias outras métricas.
Dashboard Node Exporter Full
Para visualizar métricas do node exporter, podemos utilizar um dashboard que está disponível no site do Grafana, você pode visualizar acessando esse link https://grafana.com/grafana/dashboards/1860-node-exporter-full.
Para usar esse dashboard, copie esse ID 1860
e no painel do Grafana, acesse o menu Dashboard e Importar. Insira esse ID na caixa de texto e clique em Carregar.
Após a importação, você terá esse belo Dashboard, com métricas de vários recursos da sua máquina. Show de bola!
Download código
Todo o código dessa stack você pode baixar pelo link do Github.
Conclusão
Nesse artigo fizemos a instalação e configuração do binário do node exporter, que irá expor métricas de CPU, memória RAM, uso de diso, de rede e tantas outras métricas.
Para seu conhecimento, caso você queira usar o node exporter através de uma imagem docker também é possível. Ao invés de baixar, instalar e configurar seu binário, é possível usar o docker para executar o exporter e expor a métricas da sua máquina Linux. Veja mais nesse link.
Ao usar o docker, se atente ao arquivo de configuração prometheus.yaml
, pois deverá ajustar o target para que acesse o endpoint do container docker.
Espero que tenha ajudado até aqui.
Se você encontrar algum erro, sugestões de melhorias ou se tiver alguma dúvida, deixe seu comentário abaixo.
Até a próxima.