gemini generated image hzha0xhzha0xhzha

Configurando Grafana e Prometheus no Docker para Monitorar sua VPS

Neste artigo prático, vamos abordar duas etapas críticas de infraestrutura: a criação e ativação manual de uma área de memória virtual SWAP para proteger a VPS contra falhas por falta de memória (OOM – Out of Memory) e a implantação de uma stack profissional de monitoramento composta por Prometheus, Grafana e Node Exporter rodando inteiramente em Docker.

1. O Truque de Mestre: Ativando a Memória SWAP (Recomendado)

Para mitigar o risco de o servidor derrubar aplicações essenciais quando a memória RAM física atingir 100%, a criação de um arquivo de SWAP no disco funciona como um “colchão de segurança” ou respiro para o sistema operacional. Considerando um storage padrão de 40GB de disco, reservar 4GB para a SWAP é uma estratégia altamente eficiente.

Antes de inicializar os serviços de telemetria, execute a sequência de comandos abaixo no terminal para estruturar e injetar a SWAP no kernel:

# 1. Aloca o espaço de 4GB para o arquivo de paginação no disco
sudo fallocate -l 4G /swapfile

# 2. Restringe as permissões de leitura e escrita apenas para o root (Segurança)
sudo chmod 600 /swapfile

# 3. Formata o arquivo para o formato de área de troca do Linux
sudo mkswap /swapfile

# 4. Ativa a SWAP no sistema de forma imediata
sudo swapon /swapfile

# 5. Garante a persistência da SWAP após reinicializações modificando o arquivo fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Para homologar a ativação e inspecionar o status da memória alocada, execute:

free -h

O output do terminal deve exibir a nova linha Swap: parametrizada com 4.0GiB totalmente disponíveis.

2. Implementando a Stack de Monitoramento

Com a retaguarda do sistema devidamente protegida contra gargalos de memória, passamos para a estruturação do ecossistema de métricas.

Passo 1: Criação da Estrutura de Diretórios

Crie de forma cirúrgica as pastas que vão isolar os arquivos de configuração da monitoração:

mkdir -p ~/monitoring/prometheus
cd ~/monitoring

Passo 2: Configurando o Alvo do Prometheus

O Prometheus precisa saber onde coletar as métricas extraídas do hardware. Vamos instanciar o arquivo de mapeamento do daemon criando o prometheus.yml:

nano prometheus/prometheus.yml

Insira exatamente o seguinte bloco de configuração:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'vps-hardware'
    static_configs:
      - targets: ['node-exporter:9100']

Salve e feche o arquivo pressionando Ctrl + O, Enter e Ctrl + X.

Passo 3: Orquestração com Docker Compose

Agora, vamos criar o arquivo centralizado que gerencia o ciclo de vida do Prometheus, do Grafana (versão OSS) e do Node Exporter (agente responsável por expor as métricas de CPU, disco e rede do host):

nano docker-compose.yml

Cole o bloco de configuração abaixo:

version: '3.8'

services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
    networks:
      - monitoring-network

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus-app
    restart: unless-stopped
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=7d' # Evita o acúmulo de lixo no armazenamento interno
    networks:
      - monitoring-network
    depends_on:
      - node-exporter

  grafana:
    image: grafana/grafana-oss:latest
    container_name: grafana-app
    restart: unless-stopped
    volumes:
      - grafana-data:/var/lib/grafana
    networks:
      - monitoring-network
      - proxy-network # Integração direta com o container Nginx Proxy Manager central

volumes:
  prometheus-data:
  grafana-data:

networks:
  monitoring-network:
  proxy-network:
    external: true

Salve e feche o editor (Ctrl + O, Enter, Ctrl + X).

Passo 4: Inicializando os Serviços

Dispare o comando para realizar o download das imagens oficiais no repositório do Docker Hub e levantar toda a stack em segundo plano:

docker compose up -d

3. Expondo o Grafana Web via Nginx Proxy Manager (NPM)

Com os containers em execução, o próximo passo é aplicar uma camada de criptografia de ponta a ponta (SSL) e publicar o painel do Grafana em um subdomínio próprio.

Configuração de DNS e Proxy

  1. Acesse o painel do seu provedor de DNS 🔥Hostinger Desconto Exclusivo e crie um **Apontamento do tipo A** apontando o subdomínio grafana para o IP público da sua VPS (217.97.247.241).
  2. Acesse a interface administrativa do seu Nginx Proxy Manager (http://217.97.247.241:81).
  3. Navegue até Proxy Hosts > Add Proxy Host e parametrize a aba Details:
    • Domain Names: grafana.raem.me
    • Scheme: http
    • Forward Hostname / IP: grafana-app *(Aproveitando o DNS interno do Docker)*
    • Forward Port: 3000
    • Marque a flag Block Common Exploits.
  4. Na aba SSL, selecione Request a new SSL Certificate, marque as opções Force SSL, HTTP/2 Support, aceite os termos do Let’s Encrypt e clique em Save.

4. Primeiro Acesso e Vinculação ao Banco Prometheus

  1. Abra uma nova aba no seu navegador e navegue até a URL segura: https://grafana.seu-dominio.com.
  2. Insira as credenciais padrão de provisionamento do Grafana:
    • Username: admin
    • Password: admin
  3. Redefina a senha de administrador conforme solicitado pelo assistente inicial.
  4. No painel interno, navegue no menu esquerdo até AdministrationData sources.
  5. Clique em Add data source e selecione o Prometheus.
  6. No campo de conexão HTTP URL, injete o endereço de rede interna do container: http://prometheus-app:9090
  7. Role até o final da página e acione o botão Save & test.

Se o banner verde com a mensagem “Data source is working” for exibido, a sua stack de telemetria está completamente integrada e operacional!


Deixe sua estrutura montada e valide o Data Source. Nos próximos posts, abordaremos a importação de Dashboards customizados e o desenvolvimento de alertas direto no n8n!

Deixe um comentário

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