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).
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ę:
| Filtr | Co robi |
|---|---|
| –since / –until | Okno czasowe; akceptuje „2026-10-19 14:00”, wczoraj lub „2 godziny temu” |
| -b, -b -1 | Bieżący rozruch, poprzedni rozruch |
| -u nginx -u ssh | Jedna lub więcej jednostek systemd |
| -p warning | Ten priorytet i wszystko co surowsze |
| -k | Tylko wiadomości jądra |
| _COMM=sudo, _UID=0 | Precyzyjnie 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
- Prześlij. Otwórz logtotal.com i wrzuć plik .jsonl. [DOWÓD: ekran przesyłania, limit rozmiaru]
- Oczyść. [PROOF: what gets masked in journal JSON: hostnames, usernames, IPs, machine and boot IDs]. Look it over before you continue.
- 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
| Symptom | Prawdopodobna przyczyna | Fix |
|---|---|---|
| Wskazówka o nie widzeniu wiadomości od innych użytkowników | Nie root i nie w grupach dziennika | sudo lub dodaj konto do systemd-journal |
| — Brak wpisów — | Okno czasowe lub nazwa jednostki nie pasują; lokalny vs. UTC | Poszerz okno; spróbuj –utc; sprawdź systemctl list-units |
| Istnieje tylko bieżący rozruch | Lotny dziennik | Starsze logi są usunięte; sprawdź swoje narzędzie forwardujące lub SIEM |
| Wyjście wygląda jak binarne lub zniekształcone | Użyto -o export | Użyj -o json |
| Plik ma gigabajty | Brak filtrów | Dodaj 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.