Pular para o conteúdo principal

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