Jak eksportować dzienniki Journal systemd za pomocą journalctl

Jak eksportować dzienniki Journal systemd za pomocą journalctl

SOC Prime Team
SOC Prime Team linkedin icon Śledź

Uruchom journalctl z zakresem czasowym i -o json, a otrzymasz jeden obiekt JSON na linię z każdym polem, które dziennik zarejestrował:

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

Aby uzyskać plik tekstowy w stylu syslog, użyj -o short-iso. Bez sudo lub członkostwa w systemd-journal, adm lub wheel, zobaczysz tylko swój własny dziennik użytkownika, nie systemowy.

Na większości nowoczesnych dystrybucji dziennik to pierwsze miejsce, gdzie wszystko trafia: usługi, jądro, sudo, cron, logowania. W Debianie 12 i później, Fedorze i Archu, jest to często jedynym miejscem, ponieważ rsyslog nie jest zainstalowany. Prime Core ma {N} zasad wykrywania dla dzienników systemowych Linux, zmapowanych na {M} technik MITRE ATT&CK, w tym trwałość cron (T1053.003), złośliwe usługi systemd (T1543.002) i nadużywanie sudo (T1548.003).

Rozpocznij za darmo

Zanim zaczniesz

Uprawnienia. Te same zasady co dla każdego dziennika systemowego: root lub powyższe grupy. Nasz [przewodnik po uprawnieniach dzienników Linux] zawiera szczegóły.

Czy dziennik przetrwa restarty? Jeśli /var/log/journal nie istnieje, logi są przechowywane w pamięci pod /run/log/journal i znikają przy restarcie. journalctl –list-boots pokazuje, ile rzeczywiście masz startów. Jeśli wyświetla tylko bieżący, starsza historia została usunięta.

Ile tego jest? journalctl –disk-usage mówi ci, zanim zrzucisz wszystko do pliku. Domyślnie trwały dziennik może urosnąć do 10% swojego systemu plików, z limitem do 4 GB. To zdecydowanie więcej niż chcesz przesłać na raz.

Strefy czasowe. Dziennik przechowuje znaczniki czasowe w UTC, ale journalctl drukuje lokalny czas, chyba że dodasz –utc. Wyjście JSON zawiera surowy znacznik czasu UTC w mikrosekundach (__REALTIME_TIMESTAMP) w obu przypadkach.

Krok 1: Zawężenie

Wybierz filtry pasujące do twojego pytania. Łączą się:

FiltrCo robi
–since / –untilOkno czasowe; akceptuje „2026-10-19 14:00”, wczoraj lub „2 godziny temu”
-b, -b -1Bieżący rozruch, poprzedni rozruch
-u nginx -u sshJedna lub więcej jednostek systemd
-p warningTen priorytet i wszystko co surowsze
-kTylko wiadomości jądra
_COMM=sudo, _UID=0Precyzyjnie dopasuj dowolne pole dziennika

Krok 2: Wybierz format wyjścia

  • -o json: jeden obiekt JSON na linię, z każdym polem. Jest to domyślny wybór dla LogTotal, ponieważ nic się nie gubi.
  • -o json –output-fields=MESSAGE,_HOSTNAME,_COMM,_PID,SYSLOG_IDENTIFIER,PRIORITY: to samo, przycięte. Kilka pól, takich jak znaczniki czasowe i identyfikator rozruchu, zawsze są uwzględniane. To znacznie zmniejsza rozmiar pliku.
  • -o short-iso: tekst w stylu syslog z pełnymi znacznikami czasu ISO. Mniejsze i łatwe do czytania wzrokowo. [DOWÓD: potwierdź, że LogTotal parsuje short-iso]

Nie używaj -o export. Mimo nazwy, jest to format serializacji do przesyłania dzienników między maszynami systemd, a nie coś do analizy.

Polecamy typowy eksport z określeniem zakresu:

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

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

Krok 3 (opcjonalny): Odczytuj pliki dzienników z innej maszyny

W pracy przy incydentach często masz obraz dysku lub skopiowany folder /var/log/journal zamiast działającego systemu. Journalctl odczytuje je bezpośrednio:

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

Użyj –file, aby wskazać na pojedyncze pliki .journal. Dziennik z systemu, który uległ awarii lub został niepoprawnie zamknięty, może pokazać ostrzeżenia o uszkodzeniu. Większość wpisów i tak zwykle wychodzi.

Prześlij, oczyść i przejrzyj w LogTotal

  1. Prześlij. Otwórz logtotal.com i wrzuć plik .jsonl. [DOWÓD: ekran przesyłania, limit rozmiaru]
  2. Oczyść. [PROOF: what gets masked in journal JSON: hostnames, usernames, IPs, machine and boot IDs]. Look it over before you continue.
  3. Przejrzyj. [PROOF: what the results screen shows]

Jak to wygląda na rzeczywistych danych. Wyeksportowaliśmy dobę dziennika z [DOWÓD: źródło próbki, np. urządzenie testowe po dodaniu zadania cron, nowego użytkownika i podejrzanej usługi systemd]. LogTotal zaznaczył [DOWÓD: rzeczywiste ustalenia]. [DOWÓD: link do pliku próbki]

Kiedy coś idzie nie tak

SymptomPrawdopodobna przyczynaFix
Wskazówka o nie widzeniu wiadomości od innych użytkownikówNie root i nie w grupach dziennikasudo lub dodaj konto do systemd-journal
— Brak wpisów —Okno czasowe lub nazwa jednostki nie pasują; lokalny vs. UTCPoszerz okno; spróbuj –utc; sprawdź systemctl list-units
Istnieje tylko bieżący rozruchLotny dziennikStarsze logi są usunięte; sprawdź swoje narzędzie forwardujące lub SIEM
Wyjście wygląda jak binarne lub zniekształconeUżyto -o exportUżyj -o json
Plik ma gigabajtyBrak filtrówDodaj jednostki, priorytety, –output-fields

FAQ

JSON czy tekst?

JSON do analizy, ponieważ zachowuje PID, jednostkę, identyfikator rozruchu i dokładne znaczniki czasowe jako oddzielne pola. Tekst, gdy człowiek będzie go czytał lub gdy liczy się rozmiar.

Czy dziennik to to samo co /var/log/syslog?

Nie. Kiedy rsyslog jest zainstalowany, kopiuje wiadomości z dziennika do plików tekstowych, więc możesz mieć oba. Gdy nie jest zainstalowany, dziennik to wszystko, co jest.

Dołącz do platformy Detection as Code firmy SOC Prime aby zwiększyć widoczność zagrożeń najbardziej istotnych dla Twojego biznesu. Aby pomóc Ci rozpocząć i natychmiast uzyskać wartość, umów się teraz na spotkanie z ekspertami SOC Prime.