Przejdź do treści

Journald - system logowania

Wprowadzenie

Journald to centralny system zbierania i zarządzania logami, stanowiący integralną część ekosystemu systemd - dominującego obecnie init systemu w większości dystrybucji Linuxa.

Integracja z systemd

Jedną z zalet journald jest jego integracja z systemd. Jako natywny komponent tego ekosystemu, journald:

  • Startuje niemal równocześnie z systemem init, co oznacza, że praktycznie wszystkie komunikaty generowane podczas startu systemu (nawet te bardzo wczesne) są przechwytywane i zapisywane
  • Ma dostęp do metadanych systemd o jednostkach (unitach), które generują logi
  • Automatycznie taguje komunikaty dodatkowymi informacjami, takimi jak identyfikator usługi, użytkownika, czy grupy
  • Pozwala na filtrowanie logów według metadanych specyficznych dla systemd

Dzięki temu powiązaniu journald oferuje bardziej spójny i kompletny obraz działania systemu niż tradycyjne rozwiązania.

Format binarny - wydajność i struktura

W przeciwieństwie do tradycyjnych systemów logowania, które zapisują logi jako zwykłe pliki tekstowe, journald używa binarnego formatu do przechowywania danych. Takie podejście przynosi szereg korzyści:

Zalety formatu binarnego

  • Wyższa wydajność - operacje zapisu i odczytu są znacznie szybsze niż w przypadku plików tekstowych
  • Mniejsze zużycie miejsca - binarny format pozwala na efektywną kompresję danych
  • Indeksowanie - wbudowane indeksy przyspieszają wyszukiwanie i filtrowanie logów
  • Strukturyzacja - każdy wpis zawiera zestaw pól z metadanymi, co ułatwia późniejszą analizę

Struktura wpisu w journald

Każdy wpis w journald składa się z:

  • Znacznika czasu charakteryzującego się wysoką precyzją (co do mikrosekundy)
  • Priorytetu wiadomości (zgodnie z tradycyjną klasyfikacją syslog)
  • Identyfikatora źródła (np. nazwa usługi, procesu)
  • Identyfikatora UID/GID użytkownika i grupy
  • Identyfikatora PID procesu
  • Właściwego komunikatu
  • Wielu dodatkowych metadanych (hostname, jednostka systemd, etc.)

Wszystkie te informacje są dostępne dla każdego wpisu, co pozwala na bardzo precyzyjne filtrowanie i analizę.

Łatwe parsowanie i eksport danych

Mimo binarnego formatu, journald oferuje wygodne narzędzia do pracy z logami:

Narzędzia do parsowania

Podstawowym narzędziem jest polecenie journalctl, które oferuje rozbudowane opcje:

Wyświetlenie wszystkich logów

journalctl

Z ostatnich 10 minut

journalctl --since "10 minutes ago"

Tylko dla konkretnej usługi

journalctl -u nginx.service

Z określonego przedziału czasowego

journalctl --since "2025-01-01" --until "2025-01-02"

Logi związane z konkretnym procesem

journalctl _PID=1234

Eksport do JSON

Journald umożliwia łatwy eksport danych do formatu JSON, co jest szczególnie przydatne przy automatyzacji i integracji z innymi narzędziami:

Eksport wszystkich logów do formatu JSON

journalctl -o json

Eksport z dodatkowymi opcjami filtrowania

journalctl -u nginx.service -o json-pretty

Eksport do pliku

journalctl -o json > logs.json

Format JSON zachowuje wszystkie metadane, co czyni go idealnym do dalszego przetwarzania przez skrypty lub systemy analizy logów.

Relacja z tradycyjnym syslogiem (rsyslog)

Journald i tradycyjny rsyslog nie są wzajemnie wykluczającymi się systemami - w większości nowoczesnych dystrybucji współpracują ze sobą.

Współpraca journald z rsyslogiem

Typowa konfiguracja w nowoczesnych dystrybucjach wygląda następująco:

  1. Journald działa jako pierwszy odbiornik logów, przechwytując wszystkie komunikaty systemowe
  2. Rsyslog może być skonfigurowany tak, aby odczytywać logi z journald i zapisywać je dodatkowo w tradycyjnym formacie tekstowym

Taka architektura zapewnia:

  • Kompletne przechwytywanie logów przez journald, wraz z wszystkimi metadanymi
  • Zachowanie kompatybilności wstecznej dzięki zapisowi w tradycyjnych plikach tekstowych
  • Możliwość korzystania zarówno z nowoczesnych, jak i tradycyjnych narzędzi analizy logów

Różnice i zalety journald względem rsyslog

Funkcja Journald Rsyslog
Format zapisu Binarny, strukturyzowany Tekstowy
Metadane Bogate, liczne pola Ograniczone
Indeksowanie Wbudowane Brak
Rotacja logów Automatyczna Wymaga osobnej konfiguracji
Kompresja Automatyczna Wymaga osobnej konfiguracji
Ochrona integralności Wbudowana Wymaga dodatkowych narzędzi
Startuję równocześnie z init Tak Nie

Integracja z narzędziami analizy logów

Journald dobrze integruje się z popularnymi systemami agregacji i analizy logów.

Splunk

Splunk to jedno z najpopularniejszych komercyjnych narzędzi do analizy logów. Integracja z journald może być realizowana na kilka sposobów:

  1. Przez Universal Forwarder - można skonfigurować Splunk UF do odczytu danych z journald za pomocą adaptera
  2. Za pomocą skryptów - eksport logów z journald do JSON i przesyłanie do Splunka przez HTTP Event Collector
  3. Z wykorzystaniem rsyslog jako pośrednika - rsyslog odczytuje logi z journald i przekazuje je do Splunka

Przykładowa konfiguracja Splunk Universal Forwarder do odczytu journald:

[monitor:///var/log/journal]
index = linux_logs
sourcetype = journald

Logstash (ELK Stack)

Logstash, jako część stosu Elasticsearch-Logstash-Kibana (ELK), oferuje gotowe rozwiązania do pracy z logami z journald:

  1. Plugin journald - dedykowany plugin do bezpośredniego odczytu danych z journald
  2. Filebeat - może być skonfigurowany do monitorowania eksportowanych danych

Przykładowa konfiguracja Logstash z pluginem journald:

input {
  journald {
    path => "/var/log/journal"
    seekto => "tail"
    thisboot => true
  }
}

filter {
  if [_systemd_unit] == "nginx.service" {
    mutate { add_tag => "nginx" }
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "journald-%{+YYYY.MM.dd}"
  }
}

Graylog

Graylog może pobierać dane z journald poprzez:

  1. Sidecar z konfigurowanymi kolektorami
  2. Przekazywanie przez syslog z odpowiednią konfiguracją rsyslog

Przykładowe polecenia

Debugowanie problemów ze startem systemu

Wyświetlenie logów z ostatniego startu systemu

journalctl -b

Wyświetlenie logów z konkretnego momentu startu

journalctl -b -1

Logi z falami czasowymi (dla analizy wydajności startu)

journalctl -b --output=short-monotonic

Monitorowanie konkretnych usług

Ciągłe monitorowanie usługi (jak tail -f)

journalctl -f -u nginx.service

Logi komunikatów o poziomie błędu i wyższym

journalctl -p err -u mysql.service

Analiza zdarzeń bezpieczeństwa

Logi dotyczące autoryzacji

journalctl _COMM=sshd

Logi z audytu systemowego

journalctl _AUDIT_TYPE=1107

Wyzwania i ograniczenia

Mimo wielu zalet, journald ma też pewne ograniczenia:

  • Rozmiar dziennika - domyślnie ograniczony do 10% wolnego miejsca na dysku
  • Kompatybilność - starsze narzędzia mogą nie współpracować bezpośrednio z journald
  • Złożoność - więcej czynników do uwzględnienia przy konfiguracji infrastruktury logowania

Podsumowanie

Journald stanowi nowoczesne podejście do logowania w systemach Linux, oferując:

  • Integrację z systemd
  • Wydajny, binarny format przechowywania danych
  • Bogate metadane i zaawansowane możliwości filtrowania
  • Łatwą integrację z systemami analizy logów

Dla większości wdrożeń, połączenie journald (dla efektywnego zbierania i przechowywania) z tradycyjnym rsyslogiem (dla kompatybilności) oraz narzędziami analizy logów (jak Splunk czy ELK) stanowi optymalne rozwiązanie, zapewniające zarówno wydajność, jak i elastyczność.


W kolejnej sekcji znajdziesz szczegółowe informacje na temat konfiguracji samej suługi logowania w journald i wszystkich (znanych mi) dostępnych opcji.

Enjoy!