Capítulo 11.2 - Gerenciamento de Logs
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender o sistema de logs do Linux
- Utilizar o journalctl (systemd)
- Analisar o /var/log
- Configurar o logrotate
- Pesquisar em logs
- Centralizar logs
Sistema de Logs
journalctl (systemd)
Logs de sistema modernos:
# Todos os logs
sudo journalctl
# Logs recentes
sudo journalctl -n 50
# Acompanhar em tempo real
sudo journalctl -f
# Por unidade (serviço)
sudo journalctl -u sshd
sudo journalctl -u apache2
# Por prioridade
sudo journalctl -p err
sudo journalctl -p warning
# Por data
sudo journalctl --since "2024-01-01"
sudo journalctl --since "1 hour ago"
sudo journalctl --since yesterday
# Por usuário
sudo journalctl _UID=1000
/var/log
Logs tradicionais:
# Logs do sistema
/var/log/syslog # Ubuntu/Debian
/var/log/messages # Red Hat/CentOS
# Autenticação
/var/log/auth.log # Ubuntu/Debian
/var/log/secure # Red Hat/CentOS
# Aplicações
/var/log/apache2/ # Apache
/var/log/nginx/ # Nginx
/var/log/mysql/ # MySQL
# Cron
/var/log/cron # Red Hat/CentOS
# Ubuntu: dentro do syslog
Análise de Logs
Pesquisa Básica
# Grep simples
grep "ERROR" /var/log/syslog
# Ignorar maiúsculas/minúsculas
grep -i "error" /var/log/syslog
# Contexto
grep -C 5 "ERROR" /var/log/syslog # 5 linhas antes/depois
# Vários arquivos
grep "ERROR" /var/log/*.log
# Recursivo
grep -r "ERROR" /var/log/
Ferramentas Avançadas
# Contar ocorrências
grep -c "ERROR" /var/log/syslog
# Linhas únicas
grep "ERROR" /var/log/syslog | sort -u
# Estatísticas
grep "ERROR" /var/log/syslog | awk '{print $1}' | sort | uniq -c
# Últimos erros
grep "ERROR" /var/log/syslog | tail -20
Pesquisa com journalctl
# Pesquisa por texto
sudo journalctl -g "ERROR"
# Por binário
sudo journalctl /usr/bin/sshd
# Combinação
sudo journalctl -u sshd -p err --since "1 hour ago"
Rotação de Logs
logrotate
Configuração automática:
# Configuração
/etc/logrotate.conf
/etc/logrotate.d/
# Testar configuração
sudo logrotate -d /etc/logrotate.conf
# Forçar rotação
sudo logrotate -f /etc/logrotate.conf
Exemplo de Configuração
# /etc/logrotate.d/minha-app
/var/log/mon-app/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload mon-app > /dev/null 2>&1 || true
endscript
}
Opções:
- daily/weekly/monthly: Frequência
- rotate N: Manter N rotações
- compress: Comprimir logs antigos
- missingok: Não erro se arquivo ausente
- notifempty: Não rotacionar se vazio
- create: Criar novo arquivo com permissões
Logs do Cron
Visualizar Logs do Cron
# Ubuntu/Debian (dentro do syslog)
sudo grep CRON /var/log/syslog
# Red Hat/CentOS
sudo tail -f /var/log/cron
# journalctl
sudo journalctl -u cron
sudo journalctl _COMM=cron
Logs das Tarefas
# Se redirecionado no crontab
# 0 2 * * * /script.sh > /var/log/script.log 2>&1
# Ver logs
tail -f /var/log/script.log
# Pesquisar erros
grep -i error /var/log/script.log
Monitoramento do Cron
#!/bin/bash
# Verificar execução do cron
# Verificar última execução
LAST_RUN=$(grep "script.sh" /var/log/syslog | tail -1 | awk '{print $1, $2, $3}')
if [ -z "$LAST_RUN" ]; then
echo "ALERTA: Script do cron nunca foi executado"
else
echo "Última execução: $LAST_RUN"
fi
# Verificar erros
ERRORS=$(grep "script.sh" /var/log/syslog | grep -i error | wc -l)
if [ "$ERRORS" -gt 0 ]; then
echo "ALERTA: $ERRORS erros detectados"
fi
Centralização de Logs
rsyslog
Configuração do servidor:
# /etc/rsyslog.conf
# Ativar UDP/TCP
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
# Armazenar por host
$template RemoteHost,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteHost
Configuração do cliente:
# /etc/rsyslog.conf
# Enviar para o servidor
*.* @192.168.1.100:514
Logstash/Filebeat
Stack ELK:
- Elasticsearch: Armazenamento
- Logstash: Processamento
- Kibana: Visualização
- Filebeat: Coleta
Scripts Úteis
Análise Diária
#!/bin/bash
# Análise diária de logs
DATE=$(date +%Y%m%d)
REPORT="/var/log/analysis-$DATE.txt"
{
echo "=== Análise de Logs $(date) ==="
echo
echo "=== Erros ==="
grep -i error /var/log/syslog | tail -20
echo
echo "=== Avisos ==="
grep -i warning /var/log/syslog | tail -20
echo
echo "=== Tentativas de falha SSH ==="
grep "Failed password" /var/log/auth.log | wc -l
echo
echo "=== Top processos ==="
ps aux --sort=-%cpu | head -10
} > "$REPORT"
Limpeza de Logs
#!/bin/bash
# Limpar logs antigos
# Remover logs > 30 dias
find /var/log -name "*.log" -mtime +30 -delete
find /var/log -name "*.gz" -mtime +90 -delete
# Limpar journal do systemd
sudo journalctl --vacuum-time=30d
sudo journalctl --vacuum-size=500M
Resumo
Neste capítulo, você aprendeu:
journalctl: Logs do systemd, pesquisa, filtros
/var/log: Logs tradicionais, aplicações
Pesquisa: grep, journalctl -g, ferramentas avançadas
logrotate: Rotação automática, configuração
Logs do cron: Monitoramento de execuções, detecção de erros
Centralização: rsyslog, ELK stack
Prática: Análise, limpeza, monitoramento
Próximos Passos
Capítulo 11.3: Monitoramento de Crons e Alertas
Módulo 12: Administração Avançada
Capítulo criado em: Dezembro 2024