Monitoramento Linux com Zabbix, Prometheus e Grafana
Monitoramento Linux com Zabbix, Prometheus e Grafana
Introdução
Monitorar servidores Linux não é mais opcional – é essencial para garantir disponibilidade, desempenho e capacidade planejada. A observabilidade moderna combina métricas, logs e traces, mas, para a maioria dos ambientes on‑premise, as métricas são o ponto de partida. Este artigo mostra como montar uma solução completa usando três ferramentas consolidadas:
- Zabbix – agente tradicional, suporte a checks ativos e passivos, alertas nativos.
- Prometheus – modelo pull de métricas via exporters, linguagem de consulta poderosa (PromQL).
- Grafana – camada de visualização única (single pane of glass) e alertas avançados.
Ao final, você será capaz de:
– Entender os pilares do monitoramento (disponibilidade, performance, capacidade).
– Instalar e configurar Zabbix Server + Agent.
– Instalar Prometheus, habilitar o node_exporter e consultar métricas.
– Conectar Grafana a ambas as fontes de dados e criar dashboards.
– Aplicar boas práticas de segurança, troubleshooting e manutenção.
O que você vai aprender
- Conceitos de observabilidade e métricas.
- Diferenças de modelo (push vs pull) entre Zabbix e Prometheus.
- Instalação passo‑a‑passo de cada componente.
- Criação de dashboards básicos e avançados.
- Integração de alerts entre Zabbix, Alertmanager e Grafana.
Pré‑requisitos
- Ubuntu 22.04 LTS (ou Debian‑based) com acesso root.
- Docker + Docker‑compose instalado (usaremos para Grafana).
- Conexão à internet para baixar pacotes.
- Um host adicional opcional para testar coletores (pode ser a mesma máquina).
Conceitos fundamentais
| Conceito | Definição |
|---|---|
| Métrica | Valor numérico coletado ao longo do tempo (ex.: CPU usage). |
| Agente | Software que coleta dados localmente e envia para o servidor (Zabbix Agent). |
| Exporter | Programa que expõe métricas no formato Prometheus (ex.: node_exporter). |
| Polling | Servidor consulta periodicamente o agente/exporter. |
| Alerting | Gatilho que dispara quando uma expressão (ex.: CPU > 80%) se torna verdadeira. |
| Dashboard | Visualização gráfica de métricas em tempo real. |
Preparação do ambiente
- Atualizar o sistema – garante pacotes recentes e evita incompatibilidades.
- Instalar Docker – usado para Grafana (isolamento e versão controlada).
- Reservar portas – Zabbix (10051/10050), Prometheus (9090), Grafana (3000).
- Criar usuário dedicado – segurança mínima para cada serviço.
Tutorial passo a passo
1. Instalar Zabbix Server e Frontend
Objetivo: Ter um servidor central de monitoramento.
# Adicionar repositório oficial do Zabbix 7.0 LTS
autocmd=$(curl -s https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1%2Bubuntu22.04_all.deb)
sudo dpkg -i $autocmd
sudo apt update
# Instalar servidor, frontend (Apache) e banco PostgreSQL
sudo apt install -y zabbix-server-pgsql zabbix-frontend-php zabbix-apache-conf zabbix-agent2 postgresql
echo "Criando banco zabbix..."
sudo -u postgres psql -c "CREATE DATABASE zabbix; CREATE USER zabbix WITH ENCRYPTED PASSWORD 'ZabbixPass'; GRANT ALL PRIVILEGES ON DATABASE zabbix TO zabbix;"
# Importar esquema inicial
autocmd=$(find /usr/share/doc -name 'schema.sql.gz' | head -n1)
sudo -u zabbix psql -d zabbix -f $autocmd
# Ajustar /etc/zabbix/zabbix_server.conf para apontar ao DB
sudo sed -i "s/# DBHost=localhost/DBHost=localhost/" /etc/zabbix/zabbix_server.conf
sudo sed -i "s/DBPassword=/DBPassword=ZabbixPass/" /etc/zabbix/zabbix_server.conf
# Reiniciar serviços
sudo systemctl restart zabbix-server zabbix-agent2 apache2
Explicação: O repositório oficial garante pacotes atualizados. O PostgreSQL é o backend preferido para escala. O zabbix_server.conf recebe credenciais.
Resultado esperado: O serviço zabbix-server escuta na porta 10051 e a UI está acessível em http://localhost/zabbix.
2. Configurar agente Zabbix no host monitorado
Objetivo: Coletar métricas básicas (CPU, RAM, disco, rede).
sudo apt install -y zabbix-agent2
sudo sed -i "s/Server=127.0.0.1/Server=$(hostname -I | awk '{print $1}')/" /etc/zabbix/zabbix_agent2.conf
sudo sed -i "s/ServerActive=127.0.0.1/ServerActive=$(hostname -I | awk '{print $1}')/" /etc/zabbix/zabbix_agent2.conf
sudo systemctl enable --now zabbix-agent2
Explicação: O agente aponta para o servidor Zabbix recém‑instalado. ServerActive habilita checks ativos.
Resultado esperado: No painel do Zabbix aparece o host com status “Disponível”.
3. Instalar Prometheus e node_exporter
Objetivo: Iniciar o coletor pull de métricas.
# Criar usuário prometheus
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus
# Diretórios
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus
# Baixar binários (versão 2.53.0)
cd /tmp && curl -LO https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
sudo tar -xzf prometheus-2.53.0.linux-amd64.tar.gz -C /usr/local --strip-components=1 prometheus-2.53.0.linux-amd64/prometheus prometheus-2.53.0.linux-amd64/promtool
# Copiar arquivos de exemplo
sudo cp /usr/local/prometheus.yml /etc/prometheus/prometheus.yml
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
# Criar serviço systemd
cat <<'EOF' | sudo tee /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/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
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
# Instalar node_exporter (versão 1.8.0)
cd /tmp && curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
sudo tar -xzf node_exporter-1.8.0.linux-amd64.tar.gz -C /usr/local --strip-components=1 node_exporter-1.8.0.linux-amd64/node_exporter
sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
# Serviço systemd
cat <<'EOF' | sudo tee /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=default.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
Explicação: O Prometheus puxa métricas HTTP de http://<host>:9100/metrics expostas pelo node_exporter.
Resultado esperado: Acesse http://localhost:9090/targets – o node_exporter aparece como “UP”.
4. Configurar Prometheus para coletar o node_exporter
Objetivo: Definir scrape_configs.
# /etc/prometheus/prometheus.yml (adicionar)
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
Depois, recarregue:
sudo systemctl reload prometheus
Resultado esperado: O target aparece como “UP” no UI.
5. Instalar Grafana (Docker) e conectar fontes de dados
Objetivo: Visualizar métricas de Zabbix e Prometheus.
docker run -d \
--name=grafana \
-p 3000:3000 \
-e "GF_SECURITY_ADMIN_PASSWORD=GrafanaPass" \
grafana/grafana:11.2.2
Acesse http://localhost:3000 (admin/GrafanaPass). No menu Data Sources:
– Prometheus → URL http://host.docker.internal:9090.
– Zabbix → Instalar plugin alexanderzobnin-zabbix-app via Grafana UI → configurar host, usuário e senha.
Resultado esperado: Dashboards podem ser criados a partir de ambas as fontes.
6. Criar Dashboard “Visão Geral do Servidor” (Grafana)
Objetivo: Exibir CPU, memória, disco e rede.
1. Novo painel → Prometheus → Query node_cpu_seconds_total{mode="user"} → usar rate(...[1m]).
2. Painel de memória → node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100.
3. Painel de disco → node_filesystem_avail_bytes{mountpoint="/"}.
4. Painel de rede → rate(node_network_receive_bytes_total[1m]).
5. Salvar como Visão Geral do Servidor.
Laboratório
Cenário: Monitorar a própria máquina usando Prometheus + node_exporter + Grafana via Docker‑Compose.
# docker-compose.yml (colocar em ~/monitoramento-lab)
version: "3.8"
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- "--config.file=/etc/prometheus/prometheus.yml"
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=GrafanaPass
depends_on:
- prometheus
node_exporter:
image: prom/node-exporter:latest
ports:
- "9100:9100"
Passos:
1. Crie o arquivo acima e prometheus.yml com o job node apontando para node_exporter:9100.
2. Execute docker compose up -d.
3. Abra Grafana, adicione a fonte Prometheus http://prometheus:9090.
4. Importe o dashboard Node Exporter Full (ID 1860).
Resultado esperado: As métricas da máquina host são exibidas em tempo real.
# Troubleshooting: problemas comuns e como resolver
Sintoma 1 – Target “node_exporter” está DOWN no UI do Prometheus.
- Possível causa: firewall bloqueando a porta 9100 ou o serviço não está rodando.
- Diagnóstico:
sudo systemctl status node_exporter;curl http://localhost:9100/metrics. - Solução: Abra a porta (
ufw allow 9100) ou reinicie o serviço (sudo systemctl restart node_exporter). - Prevenção: Verifique o status do serviço após cada atualização do SO.
Sintoma 2 – Alertas do Zabbix não disparam.
- Possível causa: trigger mal configurada ou macro de tempo incorreta.
- Diagnóstico: No UI, teste a trigger com “Test” → “Execute now”.
- Solução: Ajuste a expressão (ex.:
last(/Host/cpu_load,5m)>80). - Prevenção: Use templates oficiais e valide com “Test” antes de aplicar.
Sintoma 3 – Grafana não carrega painéis depois de atualizar.
- Possível causa: plugin Zabbix desatualizado ou datasource com credenciais expiradas.
- Diagnóstico: Verifique logs do container Grafana (
docker logs grafana). - Solução: Atualize o plugin (
grafana-cli plugins update alexanderzobnin-zabbix-app) e re‑insira senha. - Prevenção: Automatize a atualização de plugins via Dockerfile.
# Segurança
- Segmente redes: Zabbix Server e Prometheus devem ficar em VLAN/segmento interno, nunca expostos diretamente à internet.
- Autenticação: Use TLS mutua no Zabbix (HTTPS) e habilite basic auth no Prometheus (
--web.enable-admin-apicom senha). - Grafana: Ative login via LDAP ou OAuth, desabilite anonymous.
- Firewall: Bloqueie portas 10051, 9090 e 3000 inbound, permita apenas IPs de administração.
- Hardening de agentes: Rode Zabbix Agent e node_exporter como usuários sem privilégios, com
ReadOnlyRootFilesystemeNoNewPrivilegesse usar containers.
# Boas práticas
- Versionamento: Mantenha arquivos de configuração em Git; use ansible ou terraform para provisionar.
- Separação de responsabilidades: Use Zabbix para alertas críticos e Prometheus para métricas de alta resolução.
- Retention: Configure
retention: 30dno Prometheus para evitar uso excessivo de disco. - Alertas de teste: Periodicamente teste canais (email, Slack) com script de geração de alertas.
- Documentação: Cada host deve ter um template Zabbix e um label Prometheus unificado (
instance="host01").
Comparação de ferramentas
| Recurso | Zabbix | Prometheus | Grafana |
|---|---|---|---|
| Modelo de coleta | Push/Pull (agent) | Pull (exporter) | N/A |
| Linguagem de consulta | Zabbix expression | PromQL | N/A |
| Alertas nativos | Sim (mediações) | Via Alertmanager | Sim (via datasource) |
| Escalabilidade horizontal | Médio (cluster via proxy) | Alto (federation) | Alto (multi‑datasource) |
| UI / Dashboards | Básica | Não possui (solo) | Avançada, plugins |
| Facilidade de instalação | Pacotes .deb | Binário + exporter | Docker/ Helm |
Conclusão
Combinando Zabbix, Prometheus e Grafana você tem um stack robusto: Zabbix cuida de alertas críticos e monitora dispositivos heterogêneos; Prometheus fornece métricas de alta frequência e consultas flexíveis; Grafana unifica tudo em dashboards ricos. Ao seguir as etapas detalhadas, você obtém visibilidade total do seu ambiente Linux, reduzindo tempo de resposta a incidentes e facilitando planejamento de capacidade.
Perguntas frequentes
Q: Preciso usar os três componentes ao mesmo tempo?
A: Não. Você pode começar apenas com Prometheus+Grafana ou Zabbix+Grafana. O mix traz o melhor de ambos, mas aumenta complexidade.
Q: Posso rodar o Zabbix Server em Docker?
A: Sim, há imagens oficiais. Ajuste volumes para /etc/zabbix e banco de dados externo.
Q: Como armazenar long‑term dados?
A: Use Thanos ou Cortex como camada de armazenamento remoto para Prometheus; no Zabbix, habilite history storage em PostgreSQL com partição.
Próximo passo
Agora que você domina Monitoramento Linux Zabbix Prometheus Grafana, o próximo passo lógico da nossa trilha de aprendizado é continuar desenvolvendo suas habilidades.
→ Continue: Kubernetes para Quem Já Trabalha com Docker
Artigos relacionados
Estes artigos complementam o conteúdo apresentado:
