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
- Acesse o painel do seu provedor de DNS 🔥Hostinger Desconto Exclusivo e crie um **Apontamento do tipo A** apontando o subdomínio
grafanapara o IP público da sua VPS (217.97.247.241). - Acesse a interface administrativa do seu Nginx Proxy Manager (
http://).217.97.247.241:81 - 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.
- Domain Names:
- 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
- Abra uma nova aba no seu navegador e navegue até a URL segura:
https://grafana.seu-dominio.com. - Insira as credenciais padrão de provisionamento do Grafana:
- Username:
admin - Password:
admin
- Username:
- Redefina a senha de administrador conforme solicitado pelo assistente inicial.
- No painel interno, navegue no menu esquerdo até Administration → Data sources.
- Clique em Add data source e selecione o Prometheus.
- No campo de conexão HTTP URL, injete o endereço de rede interna do container:
http://prometheus-app:9090 - 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!

