Prometheus : Instalação

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 .

promstarttarget1

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.