Come Esportare i Log di sistema di systemd con journalctl

Come Esportare i Log di sistema di systemd con journalctl

SOC Prime Team
SOC Prime Team linkedin icon Segui

Esegui journalctl con una finestra temporale e -o json, e ottieni un oggetto JSON per riga con ogni campo memorizzato nel journal:

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

Per un file di testo in stile syslog, invece, usa -o short-iso. Senza sudo, o appartenenza a systemd-journal, adm o wheel, vedi solo il tuo journal utente, non quello del sistema.

Nella maggior parte delle distro moderne, il journal è dove tutto finisce per primo: servizi, il kernel, sudo, cron, accessi. Su Debian 12 e successive, Fedora e Arch, è spesso l’ unico posto, perché rsyslog non è installato. Prime Core ha {N} regole di rilevamento per i log di sistema Linux, mappate a {M} tecniche MITRE ATT&CK, tra cui persistenza cron (T1053.003), servizi systemd malevoli (T1543.002) e abuso di sudo (T1548.003).

Inizia gratis

Prima di iniziare

Permessi. Stesse regole di qualsiasi log di sistema: root, o i gruppi sopra. La nostra [guida ai permessi dei log Linux] contiene i dettagli.

Il journal sopravvive ai riavvii? Se /var/log/journal non esiste, i log risiedono in memoria sotto /run/log/journal e scompaiono al riavvio. journalctl –list-boots mostra quanti avvii hai effettivamente. Se elenca solo quello attuale, la cronologia più vecchia è scomparsa.

Quanto ce n’è? journalctl –disk-usage te lo dice prima che lo scarichi tutto in un file. Per impostazione predefinita, un journal persistente può crescere fino al 10% del suo filesystem, limitato a 4 GB. È molto più di quanto tu voglia caricare in un solo pezzo.

Fusi orari. Il journal memorizza i timestamp in UTC, ma journalctl stampa l’ora locale a meno che tu non aggiunga –utc. L’output JSON contiene il timestamp con microsecondi UTC grezzi (__REALTIME_TIMESTAMP) in entrambi i modi.

Passo 1: Restringi il campo

Scegli i filtri che corrispondono alla tua domanda. Si combinano:

FiltroCosa fa
–since / –untilFinestra temporale; accetta “2026-10-19 14:00”, ieri o “2 ore fa”
-b, -b -1Avvio corrente, avvio precedente
-u nginx -u sshUna o più unità systemd
-p warningQuella priorità e tutto ciò che è più grave
-kSolo messaggi del kernel
_COMM=sudo,_UID=0Confronta esattamente qualsiasi campo del journal

Passo 2: Scegli il formato di output

  • -o json: un oggetto JSON per riga, con ogni campo. Questa è la scelta predefinita per LogTotal, perché nulla va perso.
  • -o json –output-fields=MESSAGE,_HOSTNAME,_COMM,_PID,SYSLOG_IDENTIFIER,PRIORITY: lo stesso, ridotto. Alcuni campi, come i timestamp e l’ID di avvio, sono sempre inclusi. Questo riduce notevolmente la dimensione del file.
  • -o short-iso: testo in stile syslog con timestamp ISO completi. Più piccolo e facile da leggere ad occhio. [PROVA: conferma che LogTotal analizza short-iso]

Non usare -o export. Nonostante il nome, è un formato di serializzazione per inviare journal tra macchine systemd, non qualcosa da analizzare.

Ti raccomandiamo una tipica esportazione con ambito:

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

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

Passo 3 (opzionale): Leggi i file di journal da un’altra macchina

Nel lavoro di incidente, hai spesso un’immagine del disco o una cartella /var/log/journal copiata piuttosto che un sistema vivo. journalctl li legge direttamente:

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

Usa –file per puntare a file .journal individuali. Un journal da un sistema crashato o spento in modo non pulito può stampare avvisi di corruzione. La maggior parte delle voci di solito esce comunque.

Carica, sanitizza e revisa in LogTotal

  1. Carica. Apri logtotal.com e trascina il file .jsonl. [PROVA: schermata di caricamento, limite di dimensione]
  2. Sanifica. [PROOF: what gets masked in journal JSON: hostnames, usernames, IPs, machine and boot IDs]. Look it over before you continue.
  3. Revisa. [PROOF: what the results screen shows]

Come appare sui dati reali. Abbiamo esportato un giorno di journal da [PROVA: fonte campione, ad esempio una VM di test usa e getta dopo aver aggiunto un job cron, un nuovo utente e un servizio systemd sospetto]. LogTotal ha segnalato [PROVA: riscontri effettivi]. [PROVA: link al file campione]

Quando qualcosa va storto

SintomoCausa probabileFix
Suggerimento su come non vedere i messaggi di altri utentiNon root, e non nei gruppi journalsudo, o aggiungi l’account a systemd-journal
— Nessuna voce —La finestra temporale o il nome dell’unità non corrispondono; confusione tra locale e UTCAmplia la finestra; prova –utc; verifica systemctl list-units
Esiste solo l’avvio correnteJournal volatileI log più vecchi sono scomparsi; verifica il tuo forwarder di log o SIEM
L’output sembra binario o confuso-o export è stato usatoUsa -o json
Il file è di gigabyteNessun filtroAggiungi unità, priorità, –output-fields

FAQ

JSON o testo?

JSON per l’analisi, perché mantiene PID, unità, ID di avvio e timestamp esatti come campi separati. Testo quando una persona lo leggerà, o quando le dimensioni contano.

Il journal è lo stesso di /var/log/syslog?

No. Quando rsyslog è installato, copia i messaggi dal journal nei file di testo, quindi potresti avere entrambi. Quando non lo è, il journal è tutto ciò che c’è.

Unisciti alla piattaforma Detection as Code di SOC Prime per migliorare la visibilità sulle minacce più rilevanti per il tuo business. Per aiutarti a iniziare e aumentare immediatamente il valore, prenota ora un incontro con gli esperti di SOC Prime.