O Prometheus é um sistema de monitoramento de código aberto que coleta métricas de seus serviços e as armazena em um time-series database. Ele oferece um modelo de dados multidimensional, uma linguagem de consulta flexível e diversas possibilidades de visualização por meio de ferramentas como o Grafana.
Por padrão, o Prometheus utiliza exporters para definir parâmetros utilizando o node_exporter que monitora o sistema operacional em si, porém ele é bastante customizável .
https://prometheus.io/docs/instrumenting/exporters/
Neste primeiro post será apresentado como configurar um o servidor e um simples exporter e ir evoluindo com os posts .
1) Laboratório
Para este laboratório será utilizado :
- Centos7 , 2Gbs Ram e 1 vcpu
- Server1 -> Prometheus server
- Server2 e Server3 -> Node Exporter
Vagrantfile para provisionar o ambiente com o VirtualBox:
# -*- mode: ruby -*-
# vi: set ft=ruby :
network = '192.168.0'
nodes = [
{ :hostname => 'server1', :ip => "#{network}.101", :ram => 2048 },
{ :hostname => 'server2', :ip => "#{network}.102", :ram => 2048 },
{ :hostname => 'server3', :ip => "#{network}.103", :ram => 2048 }]
Vagrant.configure("2") do |config|
nodes.each do |node|
config.vm.define node[:hostname] do |nodeconfig|
nodeconfig.vm.box = "centos/7"
nodeconfig.vm.box_version = "1803.01"
nodeconfig.vm.hostname = node[:hostname]
nodeconfig.vm.network :private_network, ip: node[:ip]
memory = node[:ram] ? node[:ram] : 512;
cpu = node[:cpu] ? node[:cpu] : 1;
nodeconfig.vm.network "forwarded_port", guest: 9090, host: 9090 if node[:hostname] == "server1"
nodeconfig.vm.network "forwarded_port", guest: 3000, host: 3000 if node[:hostname] == "server1"
nodeconfig.vm.provider :virtualbox do |vb|
vb.customize [ "modifyvm", :id, "--memory", memory.to_s,]
end
end
end
end
Após criar o Vagrantfile execute o comando abaixo para subir o ambiente no Virtualbox
# vagrant up
Durante o processo de instalação foi desabilitado o firewalld e colocado como permissive o SELINUX de todas os servidores .
[root@guest ~]# vagrant ssh serverX
[vagrant@serverX ~]# sudo su -
[root@serverX ~]# systemctl stop firewalld
[root@serverX ~]# systemctl disable firewalld
[root@serverX ~]# sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
[root@serverX ~]# setenforce 0
2) Instalação do Prometheus
Do site do prometheus vamos baixar o pacote :
[root@server1 ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-amd64.tar.gz
Criar o usuário do Prometheus
[root@server1 ~]# useradd --no-create-home --shell /bin/false prometheus
Criar a estrutura de diretório e mudando a permissão do diretório
[root@server1 ~]# mkdir /etc/prometheus
[root@server1 ~]# mkdir /var/lib/prometheus
[root@server1 ~]# chown prometheus:prometheus /etc/prometheus
[root@server1 ~]# chown prometheus:prometheus /var/lib/prometheus
Descompactar o tar baixado do site do Prometheus e renomeando o diretório para um nome mais amigável
[root@server1 ~]# tar -xvf prometheus-2.10.0.linux-amd64.tar.gz
[root@server1 ~]# mv prometheus-2.10.0.linux-amd64 prometheus210
Copiar os binários mudando a permissão de cada um
[root@server1 ~]# cp prometheus210/prometheus /usr/local/bin/
[root@server1 ~]# cp prometheus210/promtool /usr/local/bin/
[root@server1 ~]# chown prometheus:prometheus /usr/local/bin/prometheus
[root@server1 ~]# chown prometheus:prometheus /usr/local/bin/promtool
Copie os arquivos baixo para a estrutura de diretório do Prometheus ajustante a permissão .
[root@server1 ~]# cp -Rv prometheus210/consoles /etc/prometheus
[root@server1 ~]# cp -Rv prometheus210/console_libraries /etc/prometheus
[root@server1 ~]# chown -R prometheus:prometheus /etc/prometheus/consoles
[root@server1 ~]# chown -R prometheus:prometheus /etc/prometheus/console_libraries
Vamos criar o prometheus.yml
[root@server1 ~]# vi /etc/prometheus/prometheus.yml
Conteúdo do arquivo prometheus.yml
global:
scrape_interval: 10s
scrape_configs:
- job_name: 'prometheus_master'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
Altere a permissão
[root@server1 ~]# chown prometheus:prometheus /etc/prometheus/prometheus.yml
Crie o arquivo do systemd /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
Execute reload no systemd
[root@server1 ~]# systemctl daemon-reload
Inicie e habilite o serviço no boot
[root@server1 ~]# systemctl start prometheus
[root@server1 ~]# systemctl enable prometheus
Após o start podemos ver o serviço no ar com a url http://PROMETHEUS-SERVER:9090

3) Instalação do Node exporter
Vamos instalar o node exporter nos servidores server2 e server3 para monitorarmos o SO .
No site do prometheus vamos baixar o Node Exporter.
[root@server2 ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
Extrair o tar
[root@server2 ~]# tar -xvzf node_exporter-0.18.1.linux-amd64.tar.gz
Adicione o usuário prometheus
[root@server2 ~]# useradd -rs /bin/false prometheus
Move o binário do node exporter para o diretório bin
[root@server2 ~]# mv node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin
Crie o arquivo de serviço do systemd /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Dê reload no Systemd
[root@server2 ~]# systemctl daemon-reload
Inicie e habilite no boot no node exporter
[root@server2 ~]# systemctl start node_exporter
[root@server2 ~]# systemctl enable node_exporter
4) Adicionando Targets no Prometheus
Após configurar o servidor e o node exporter do Prometheus vamos configurar o target no servidor para que ele monitore esses servidores.
No servidor do prometheus vamos editar o arquivo /etc/prometheus/prometheus.yml com as entradas abaixo
- job_name: 'node_exporter_server2'
scrape_interval: 5s
static_configs:
- targets: ['192.168.0.102:9100']
Verifique se o yaml está ok com o comando abaixo
[root@server1 ~]# promtool check config /etc/prometheus/prometheus.yml
...
Checking /etc/prometheus/prometheus.yml
SUCCESS: 0 rule files found
Restarte o serviço do Prometheus
[root@server1 ~]# systemctl restart prometheus
Na url http://PROMETHEUS-SERVER:9090/targets podemos ver que o servidor server2 está aparecendo na lista .

Navegando na ferramenta podemos utilizar o campo de busca para pegar os parêmetros que estão sendo coletados

No exemplo abaixo estamos verificando a memória livre do servidor

Quando clicamos no botão Graph podemos obversar o histórico em gráfico .

Nos próximos posts continuarei com o laboratório seguindo com outros serviços e componentes do Prometheus.