Monitoramento Linux com Zabbix, Prometheus e Grafana

setembro 1, 2026 · 10 min de leitura · Luiz Seabra

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

  1. Atualizar o sistema – garante pacotes recentes e evita incompatibilidades.
  2. Instalar Docker – usado para Grafana (isolamento e versão controlada).
  3. Reservar portas – Zabbix (10051/10050), Prometheus (9090), Grafana (3000).
  4. 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-api com 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 ReadOnlyRootFilesystem e NoNewPrivileges se 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: 30d no 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:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima