Como Exportar Logs do Journal do systemd com journalctl

Como Exportar Logs do Journal do systemd com journalctl

SOC Prime Team
SOC Prime Team linkedin icon Seguir

Execute journalctl com uma janela de tempo e -o json, e você obterá um objeto JSON por linha com todos os campos que o diário armazenou:

sudo journalctl --since "2026-10-19 00:00" --until "2026-10-20 00:00" -o json --no-pager > web-03_journal.jsonl

Para um arquivo de texto no estilo syslog, use -o short-iso. Sem sudo, ou pertencendo aos grupos systemd-journal, adm ou wheel, você verá apenas o diário do seu próprio usuário, não o do sistema.

Na maioria das distribuições modernas, o diário é onde tudo é registrado primeiro: serviços, o kernel, sudo, cron, logins. No Debian 12 e posteriores, Fedora e Arch, geralmente é o único local, porque rsyslog não está instalado. O Prime Core tem {N} regras de detecção para logs do sistema Linux, mapeadas para {M} técnicas do MITRE ATT&CK, entre elas persistência cron (T1053.003), serviços systemd maliciosos (T1543.002) e abuso de sudo (T1548.003).

Comece Gratuitamente

Antes de começar

Permissões. Mesmas regras de qualquer log do sistema: root, ou os grupos acima. Nosso [guia de permissões de logs do Linux] tem os detalhes.

O diário sobrevive a reinicializações? Se /var/log/journal não existir, os logs residem na memória sob /run/log/journal e desaparecem na reinicialização. journalctl –list-boots mostra quantas inicializações você realmente tem. Se listar apenas a atual, o histórico mais antigo se foi.

Quanto há? journalctl –disk-usage informa antes de despejar tudo em um arquivo. Por padrão, um diário persistente pode crescer até 10% de seu sistema de arquivos, limitado a 4 GB. Isso é muito mais do que você gostaria de enviar de uma só vez.

Fusos horários. O diário armazena carimbos de tempo em UTC, mas journalctl imprime o horário local a menos que você adicione –utc. A saída JSON carrega o carimbo de tempo bruto UTC em microssegundos (__REALTIME_TIMESTAMP) de qualquer forma.

Passo 1: Reduza o escopo

Escolha os filtros que correspondem à sua pergunta. Eles se combinam:

FiltroO que faz
–since / –untilJanela de tempo; aceita “2026-10-19 14:00”, ontem ou “2 horas atrás”
-b, -b -1Inicialização atual, inicialização anterior
-u nginx -u sshUma ou mais unidades systemd
-p warningEssa prioridade e qualquer coisa mais severa
-kApenas mensagens do kernel
_COMM=sudo, _UID=0Corresponde exatamente a qualquer campo do diário

Passo 2: Escolha o formato de saída

  • -o json: um objeto JSON por linha, com todos os campos. Esta é a escolha padrão para LogTotal, porque nada se perde.
  • -o json –output-fields=MESSAGE,_HOSTNAME,_COMM,_PID,SYSLOG_IDENTIFIER,PRIORITY: o mesmo, reduzido. Alguns campos, como os carimbos de tempo e o ID de inicialização, estão sempre incluídos. Isso reduz drasticamente o tamanho do arquivo.
  • -o short-iso: texto no estilo syslog com carimbos de tempo ISO completos. Menor e fácil de ler visualmente. [PROVA: confirme que LogTotal analisa short-iso]

Não use -o export. Apesar do nome, é um formato de serialização para transferência de diários entre máquinas systemd, não algo para análise.

Recomendamos a exportação típica com escopo:

sudo journalctl -b -1 -p info -u ssh -u cron 

  -o json --no-pager > web-03_prevboot.jsonl

Passo 3 (opcional): Leia arquivos de diário de outra máquina

No trabalho de incidentes, você frequentemente tem uma imagem de disco ou uma pasta /var/log/journal copiada em vez de um sistema ao vivo. journalctl lê diretamente esses:

journalctl -D /mnt/evidence/var/log/journal -o json --no-pager > evidence_journal.jsonl

Use –file para apontar para arquivos .journal individuais. Um diário de um sistema travado ou desligado de maneira não limpa pode imprimir avisos de corrupção. A maioria das entradas geralmente ainda aparece.

Envie, sanitize e revise no LogTotal

  1. Envie. Abra logtotal.com e insira o arquivo .jsonl. [PROVA: tela de envio, limite de tamanho]
  2. Sanitize. [PROOF: what gets masked in journal JSON: hostnames, usernames, IPs, machine and boot IDs]. Look it over before you continue.
  3. Revise. [PROOF: what the results screen shows]

Como isso se parece com dados reais. Exportamos um dia de diário de [PROVA: fonte de exemplo, e.g. uma VM de teste descartável após adicionar um cron job, um novo usuário e um serviço systemd suspeito]. LogTotal sinalizou [PROVA: achados reais]. [PROVA: link para o arquivo de exemplo]

Quando dá errado

SintomaCausa provávelFix
Dica sobre não ver mensagens de outros usuáriosNão root, e não nos grupos de diáriosudo, ou adicione a conta ao systemd-journal
— Sem entradas —Janela de tempo ou nome da unidade não correspondem; confusão entre local e UTCAmplie a janela; tente –utc; verifique systemctl list-units
Somente a inicialização atual existeDiário volátilLogs mais antigos se foram; verifique seu encaminhador de logs ou SIEM
A saída parece binária ou corrompida-o export was usedUse -o json
O arquivo tem gigabytesSem filtrosAdicione unidades, prioridade, –output-fields

FAQ

JSON ou texto?

JSON para análise, porque mantém PID, unidade, ID de inicialização e carimbos de tempo exatos como campos separados. Texto quando uma pessoa vai ler, ou quando o tamanho importa.

O diário é o mesmo que /var/log/syslog?

Não. Quando rsyslog está instalado, ele copia mensagens do diário para arquivos de texto, então você pode ter ambos. Quando não está, o diário é tudo o que há.

Junte-se à plataforma Detection as Code da SOC Prime para melhorar a visibilidade das ameaças mais relevantes para o seu negócio. Para ajudá-lo a começar e gerar valor imediato, agende uma reunião agora com os especialistas da SOC Prime.