Logs do Sistema: syslog, journald e logger
O Que Voce Vai Conquistar
- Escrever regras de roteamento rsyslog no formato "facility.priority"
- Distinguir as listas de facilities e priorities
- Usar as opcoes-chave do
journalctl(-u/-b/-f/-p/--since) - Alternar o systemd-journald de armazenamento volatil para persistente
- Registrar mensagens arbitrarias no syslog com
logger - Explicar como o
logrotateimpede que logs cresacm sem limite
Este e o nucleo do objetivo 108.2 do LPIC-1 "Gerenciar os logs do sistema". Abrange os dois sistemas, rsyslog e systemd-journald, mais journalctl / logger / logrotate que operam sobre eles.
Qual Sistema de Logging Usar?
Na maioria das distribuicoes modernas, o systemd-journald recebe os logs primeiro e, quando necessario, os encaminha ao rsyslog para que tambem sejam escritos em logs de texto tradicionais como /var/log/messages. Essa configuracao em duas etapas e comum.
| Sistema | Formato de armazenamento | Comando principal | Arquivo de configuracao |
|---|---|---|---|
| systemd-journald | Binario (journal) | journalctl |
/etc/systemd/journald.conf |
| rsyslog | Texto | cat / grep |
/etc/rsyslog.conf |
O journald mantem metadados estruturados (nome da unidade, PID, boot ID etc.) e permite filtragem flexivel com journalctl. O rsyslog e texto puro e e forte para encaminhamento a hosts remotos e retencao de longo prazo. O exame pergunta sobre ambos.
Como Escrever Regras de Roteamento rsyslog?
O roteamento rsyslog e escrito como um par de "seletor (facility.priority) mais acao (destino)". Voce coloca em /etc/rsyslog.conf ou em arquivos sob /etc/rsyslog.d/.
O formato e assim:
mail.info /var/log/mail.log authpriv.* /var/log/secure *.emerg :omusrmsg:* cron.* /var/log/cron
O lado esquerdo e o seletor e o lado direito e o destino. mail.info significa "a facility mail com priority info e acima". Especificar uma unica priority como info corresponde a aquela severidade e tudo mais severo, o que e um ponto frequente no exame. O * em authpriv.* significa todas as priorities, e *.emerg significa emerg de todas as facilities.
Facilities e Priorities
Um seletor combina uma facility (a categoria que produziu a mensagem) e uma priority (severidade).
Principais valores de facility:
| Facility | Significado |
|---|---|
auth / authpriv |
Autenticacao e seguranca |
cron |
Jobs cron / at |
daemon |
Diversos daemons (servicos do sistema) |
kern |
Mensagens do kernel |
mail |
Subsistema de correio |
user |
Processos de usuario (padrao) |
local0-local7 |
Slots reservados para uso personalizado |
Priorities (severidade, da mais baixa):
| Priority | Numero | Significado |
|---|---|---|
debug |
7 | Informacao de depuracao |
info |
6 | Informacao normal |
notice |
5 | Normal mas digno de nota |
warning |
4 | Aviso |
err |
3 | Erro |
crit |
2 | Condicao critica |
alert |
1 | Acao deve ser tomada imediatamente |
emerg |
0 | Sistema inutilizavel |
*.info corresponde a info e acima (info / notice / warning / err / crit / alert / emerg). Para limitar a uma unica priority, adicione =, como em mail.=info.
Junte uma facility e uma priority com um "." (ponto). local0-local7 sao slots reservados para aplicacoes enviarem seus proprios logs ao syslog, frequentemente usados para separar scripts personalizados ou aplicacoes de negocio.
Encaminhamento de Logs para Host Remoto
O rsyslog pode encaminhar logs para outro host. No lado do remetente, escreva o seletor e o destino de encaminhamento no arquivo de configuracao.
*.* @192.168.1.10:514 *.* @@192.168.1.10:514
Um unico @ encaminha via UDP, e um duplo @@ encaminha via TCP. Isso e usado para agregar logs em um servidor de log central. O lado receptor deve habilitar a recepcao na porta relevante.
Quais Sao as Opcoes-Chave do journalctl?
journalctl e o comando que busca e exibe os logs coletados pelo systemd-journald. Executado sem argumentos, mostra todos os logs do mais antigo ao mais recente.
Opcoes de filtragem representativas:
journalctl -u sshd.service journalctl -b journalctl -f journalctl -p err journalctl --since "2026-05-30 09:00:00" --until "2026-05-30 12:00:00"
| Opcao | Funcao |
|---|---|
-u UNIT |
Mostrar logs apenas da unidade de servico informada |
-b [ID] |
Filtrar por boot (-b e o atual, -b -1 o anterior) |
-f |
Acompanhar em tempo real (como tail -f) |
-p PRIORITY |
Filtrar por priority (-p err e err e acima) |
--since / --until |
Filtrar por intervalo de tempo (formas relativas como --since today) |
-k |
Apenas mensagens do kernel (como dmesg) |
-r |
Mostrar mais recente primeiro |
-n N |
Mostrar as ultimas N linhas |
Exemplo de execucao:
journalctl -u sshd --since today -p warning
May 30 09:14:22 host sshd[1421]: Failed password for invalid user test from 203.0.113.5 port 55012 ssh2 May 30 10:02:51 host sshd[1588]: error: maximum authentication attempts exceeded for root
A priority -p aceita as mesmas palavras que o rsyslog (emerg ate debug) ou numeros (0 ate 7). -p err coleta err e acima juntos.
Como Tornar os Logs do journald Persistentes?
A localizacao de armazenamento do systemd-journald e controlada por Storage= em /etc/systemd/journald.conf. Por padrao (auto), armazena persistentemente em /var/log/journal/ se esse diretorio existir, e armazena de forma volatil em /run/log/journal/ (um tmpfs em memoria) caso contrario.
[Journal] Storage=persistent
Valor de Storage= |
Comportamento |
|---|---|
volatile |
Sempre apenas em memoria (/run/log/journal/). Perdido no reboot |
persistent |
Sempre em disco (/var/log/journal/). Cria o diretorio tambem |
auto |
Persistente se /var/log/journal/ existir, senao volatil (padrao) |
none |
Nao armazena (apenas encaminha) |
Passos para tornar os logs persistentes:
sudo mkdir -p /var/log/journal sudo systemctl restart systemd-journald journalctl --disk-usage
Archived and active journals take up 112.4M in the file system.
Configurar Storage=persistent, ou criar /var/log/journal/ e reiniciar o journald, mantem os logs entre reboots. Voce pode verificar o uso com journalctl --disk-usage.
Em muitas distribuicoes, o journald usa auto por padrao e /var/log/journal/ nao e criado, entao os logs sao volateis (armazenados em memoria). Nesse estado, logs passados sao perdidos no reboot. Se journalctl -b -1 nao mostra nada ao tentar ver o "boot anterior", suspeite que a persistencia nao esta habilitada.
Como Usar o Comando logger
logger e uma ferramenta que envia mensagens ao syslog a partir da linha de comando ou de um script. E amplamente usado para registrar o log de execucao de shell scripts.
logger "backup script started" logger -p local0.info -t backup "nightly backup finished"
| Opcao | Funcao |
|---|---|
-p |
Especificar facility.priority (padrao user.notice) |
-t TAG |
Adicionar uma tag (identificador) a mensagem |
-s |
Tambem escrever na saida de erro padrao |
Confirmando o resultado registrado:
logger -p local0.info -t backup "nightly backup finished" journalctl -t backup -n 1
May 30 02:00:03 host backup[2840]: nightly backup finished
A tag definida com -t backup pode ser filtrada com journalctl -t backup. Incorporar logger em um script permite rastrear posteriormente, via journal, se o trabalho lancado pelo cron e similares teve sucesso.
Como o logrotate Impede o Crescimento dos Logs?
logrotate e o mecanismo que periodicamente rotaciona arquivos de log para que nao cresacm sem limite. A configuracao principal e /etc/logrotate.conf, e configuracoes por servico ficam sob /etc/logrotate.d/.
Exemplo de /etc/logrotate.conf:
weekly rotate 4 create compress include /etc/logrotate.d
weekly rotaciona semanalmente, rotate 4 mantem 4 geracoes, create cria um log vazio apos a rotacao e compress comprime logs antigos com gzip. include /etc/logrotate.d carrega as configuracoes por servico.
Uma configuracao por servico (exemplo /etc/logrotate.d/nginx):
/var/log/nginx/*.log {
daily
rotate 14
missingok
notifempty
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}daily rotaciona diariamente e rotate 14 mantem 14 geracoes. missingok nao gera erro se o arquivo estiver ausente, e notifempty pula a rotacao se estiver vazio. postrotate ate endscript notifica o processo para recarregar apos a rotacao.
Verificando o comportamento (apenas avaliando, sem rotacionar de fato):
logrotate -d /etc/logrotate.conf
rotating pattern: /var/log/nginx/*.log after 1 days (14 rotations) considering log /var/log/nginx/access.log log does not need rotating (log has been already rotated)
-d (debug) e um dry run: nao rotaciona e apenas imprime as decisoes. Apos alterar a configuracao, a pratica padrao e confirmar com -d antes de aplicar em producao. Adicionar -f (force) rotaciona mesmo quando as condicoes nao sao atendidas.
O logrotate normalmente e invocado uma vez por dia pelo cron.daily ou um timer do systemd. Mesmo que voce configure daily, a execucao depende do momento da invocacao, entao note que nao rotaciona "no momento em que voce configura".
Onde Estao os Arquivos de Log Principais?
A localizacao dos logs de texto que o rsyslog escreve difere por distribuicao. O exame pergunta sobre a diferenca entre sistemas baseados em Red Hat e Debian.
| Conteudo | Baseados em Red Hat | Baseados em Debian |
|---|---|---|
| Log geral do sistema | /var/log/messages |
/var/log/syslog |
| Autenticacao | /var/log/secure |
/var/log/auth.log |
| Log do cron | /var/log/cron |
/var/log/syslog (mesclado no syslog) |
| Mensagens do kernel | /var/log/dmesg |
/var/log/kern.log |
Para investigar falhas de autenticacao, olhe /var/log/secure em sistemas baseados em Red Hat e /var/log/auth.log em sistemas baseados em Debian. Em um ambiente com apenas systemd-journald, esses arquivos de texto podem nao existir; nesse caso, obtenha a informacao equivalente com journalctl.
Erros Comuns
Padroes tipicos onde iniciantes tropeacam no gerenciamento de logs.
Erro 1: Logs passados desapareceram apos um reboot
Se o journald permanecer no armazenamento volatil padrao (/run/log/journal/), os logs sao perdidos no reboot. Torne o armazenamento persistente criando /var/log/journal/ ou configurando Storage=persistent.
- Erro 2: Interpretar mal
mail.infocomo "apenas info" - Uma unica priority em um seletor inclui "aquela severidade e tudo mais severo". Para limitar apenas a info, use=como emmail.=info. - Erro 3: Confundir facilities e priorities -
auth/cron/maile similares sao a origem (facility);err/warning/debuge similares sao a severidade (priority). Confundi-los impede que as regras de roteamento funcionem como pretendido. - Erro 4: Acreditar que o logrotate executa no momento em que voce configura - O logrotate avalia condicoes quando invocado pelo cron / timer. Para confirmar imediatamente, use
logrotate -d(apenas avaliacao) ou-f(forcar). - Erro 5: Olhar apenas os logs de texto e ignorar o journal - Em um ambiente systemd, muitos logs de servico existem apenas no journal. Mesmo que nao haja arquivo sob
/var/log/, verifique comjournalctl -u <service>.
Solucao de Problemas
Sintoma: journalctl -b -1 nao mostra logs do boot anterior
Causa: O journald esta volatil, entao os logs foram perdidos no reboot
Verificacao:
cat /etc/systemd/journald.conf | grep Storage ls /var/log/journal 2>/dev/null
Correcao: Crie /var/log/journal/ e torne o armazenamento persistente com sudo systemctl restart systemd-journald. Ou configure Storage=persistent.
Sintoma: Voce escreveu uma regra rsyslog mas nenhum log e produzido
Causa: Um facility/priority com erro de digitacao no seletor, ou um reload de configuracao ausente
Verificacao:
sudo rsyslogd -N1 systemctl status rsyslog
Correcao: Valide a sintaxe com rsyslogd -N1 e recarregue com sudo systemctl restart rsyslog. Confirme tambem a existencia e permissoes do diretorio de destino.
Sintoma: Logs estao enchendo o disco
Causa: Muitas geracoes retidas no logrotate, ou um limite grande do journald
Verificacao:
journalctl --disk-usage du -sh /var/log/*
Correcao: Revise a contagem de geracoes rotate e compress no logrotate. O journald pode reduzir dados passados com journalctl --vacuum-size=200M.
Lista de Verificacao
- [ ] Consegue ler e escrever o formato de seletor rsyslog (facility.priority)
- [ ] Consegue distinguir as listas de facilities e priorities
- [ ] Consegue usar
journalctl -u/-b/-f/-p/--since - [ ] Consegue executar os passos para tornar o journald persistente
- [ ] Consegue registrar uma mensagem com tag usando
logger - [ ] Consegue confirmar decisoes de rotacao com
logrotate -d
Resumo
| Objetivo | Comando / Configuracao |
|---|---|
| Regra de roteamento | /etc/rsyslog.conf (mail.info /path) |
| Ver log da unidade | journalctl -u UNIT |
| Ver log por boot | journalctl -b / -b -1 |
| Acompanhar em tempo real | journalctl -f |
| Tornar persistente | Storage=persistent (journald.conf) |
| Registrar mensagem | logger -p local0.info -t TAG "msg" |
| Verificar rotacao | logrotate -d /etc/logrotate.conf |
O logging do sistema e a base para investigacao de incidentes e auditoria de seguranca. Domine facilities e priorities do rsyslog, persistencia do journald e gerenciamento de capacidade com logrotate, e voce ira pontuar com seguranca no 108.2.
Proximas Leituras
- Agendamento de Tarefas: cron e systemd timers
- O Processo de Boot e systemd
- Conceitos Basicos de Linha de Comando