Guia Avançado de Logs e Monitoramento Linux
No cenário da infraestrutura moderna, visibilidade é tudo. Quer você esteja gerenciando um único VPS ou uma frota de microsserviços em múltiplas regiões, a capacidade de coletar, analisar e agir sobre logs e métricas é o que separa um sistema estável de um caótico. O Linux, sendo a espinha dorsal da nuvem, oferece um rico ecossistema de ferramentas para observabilidade.
Este guia explora a transição do log tradicional baseado em syslog para sistemas de monitoramento distribuídos modernos. Cobriremos tudo, desde o gerenciamento de logs locais até a visualização avançada com Grafana e Elasticsearch.
1. Gerenciamento de Logs Locais: Syslog e Journald
Cada sistema Linux gera uma quantidade massiva de dados. Historicamente, isso era tratado pelo syslogd e, posteriormente, por versões mais avançadas como rsyslog e syslog-ng.
Gerador de Configuração Rsyslog
O rsyslog continua sendo uma ferramenta poderosa devido à sua modularidade e capacidade de rotear logs para vários destinos, incluindo servidores remotos via TCP/UDP. Um gerador de configuração rsyslog típico ajudaria você a definir:
- Entradas (Inputs): De onde vêm os logs (ex: arquivos locais, portas de rede).
- Filtros (Filters): Quais logs processar (ex: apenas
auth.logou erros de uma aplicação específica). - Ações (Actions): Para onde enviá-los (ex: um arquivo local, um servidor Graylog remoto ou um tópico Kafka).
Exemplo de uma regra básica do rsyslog:
if $programname == 'my-app' then /var/log/my-app.log
& stop
Construtor de Filtros Journalctl
Com o advento do systemd, o journald tornou-se o principal coletor de logs. Ao contrário do syslog, que armazena logs em texto simples, o journald usa um formato binário que permite consultas muito mais rápidas e enriquecimento de metadados.
Um construtor de filtros journalctl é essencial para navegar por esses logs. Em vez de usar o pipe do journalctl para o grep, você deve usar flags nativas para performance:
journalctl -u nginx.service --since "1 hour ago": Filtrar por unidade e tempo.journalctl -p err..emerg: Filtrar por níveis de prioridade.journalctl _PID=1234: Filtrar por um ID de processo específico.
2. Automatizando Tarefas: Gerador de Timer do Systemd
O monitoramento não é apenas sobre logs; é também sobre verificações proativas. Antes de termos o Prometheus, tínhamos o Cron. Hoje, temos os timers do systemd.
Por que Timers do Systemd?
Embora o Cron seja simples, os timers do systemd oferecem:
- Dependências: Garante que um job só seja executado se a rede estiver ativa.
- Limites de Recursos: Use cgroups para limitar a CPU/RAM de uma tarefa em segundo plano.
- Log: Toda a saída é capturada automaticamente pelo journald.
Um gerador de timer do systemd ajuda você a criar os arquivos .service e .timer. Por exemplo, para executar um script de backup todos os dias às 3h da manhã:
# backup.timer
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
3. Métricas e Séries Temporais: Prometheus e Grafana
Enquanto os logs dizem o que aconteceu, as métricas dizem por que está acontecendo ao longo do tempo. O Prometheus tornou-se o padrão de fato para monitoramento nativo da nuvem.
Construtor de Consultas Prometheus (PromQL)
O Prometheus usa o PromQL, uma linguagem de consulta funcional. Um construtor de consultas Prometheus é inestimável para construir agregações complexas.
- Taxa de requisições:
rate(http_requests_total[5m]) - Latência de 99º Percentil:
histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[10m])))
Template de Dashboard Grafana
Métricas só são úteis se puderem ser visualizadas. O Grafana é o líder da indústria para criar dashboards bonitos em tempo real. Um template de dashboard Grafana permite que você implante rapidamente visualizações padrão para:
- Node Exporter (Saúde do sistema: CPU, RAM, Disco).
- Tráfego Nginx/Apache.
- Saúde do cluster Kubernetes.
Visualizador de Árvore de Roteamento do Alertmanager
O alerta é a parte de "ação" do monitoramento. O Prometheus envia alertas para o Alertmanager, que cuida da desduplicação, agrupamento e roteamento para Slack, Email ou PagerDuty. Um visualizador de árvore de roteamento ajuda você a entender como os alertas são direcionados com base em labels. Por exemplo, alertas críticos vão para o PagerDuty, enquanto avisos vão para um canal do Slack.
4. Log Centralizado: A Stack ELK
Para ambientes de grande escala, logs locais não são suficientes. Você precisa agregar logs de centenas de servidores em um único índice pesquisável. É aqui que entra a Stack ELK (Elasticsearch, Logstash, Kibana).
Construtor de Consultas Elasticsearch (DSL)
O Elasticsearch usa uma Linguagem Específica de Domínio (DSL) baseada em JSON para pesquisas. Um construtor de consultas Elasticsearch simplifica a criação desses objetos JSON aninhados.
{
"query": {
"bool": {
"must": [
{ "match": { "status": "error" } },
{ "range": { "@timestamp": { "gte": "now-1d" } } }
]
}
}
}
Sintaxe de Consulta do Kibana
O Kibana fornece uma interface de usuário para o Elasticsearch. Ele suporta o KQL (Kibana Query Language), que é muito mais conciso que o DSL completo.
status: 500 AND host: "prod-web-*"response: [400 TO 499]
5. Resumo: Construindo um Pipeline de Observabilidade
Uma estratégia moderna de logs e monitoramento Linux deve seguir estes princípios:
- Padronizar no Journald: Deixe o systemd cuidar da coleta inicial.
- Exportar para o Prometheus: Use exporters para transformar o estado do sistema e da aplicação em métricas.
- Centralizar com ELK ou Loki: Mova os logs dos servidores individuais para retenção e análise de longo prazo.
- Visualizar e Alertar: Use o Grafana para dashboards e o Alertmanager para notificações.
Ao dominar essas ferramentas — de geradores rsyslog a construtores de consultas Prometheus — você garante que sua infraestrutura permaneça transparente, previsível e resiliente.