Druga odpowiedź wyjaśnia, jak mówi jej autor, „klasyczne logowanie” w systemie Linux. W dzisiejszych czasach nie działa to w wielu systemach.
Jądro
Mechanizmy jądra uległy zmianie.
Jądro generuje dane wyjściowe do bufora w pamięci. Oprogramowanie aplikacji może uzyskać do tego dostęp na dwa sposoby. Podsystem rejestrowania zwykle uzyskuje do niego dostęp jako pseudo-FIFO o nazwie /proc/kmsg
. Tego źródła informacji dziennika nie można z powodzeniem udostępniać między czytnikami dziennika, ponieważ jest on czytany jeden raz. Jeśli współużytkuje je wiele procesów, każdy z nich otrzymuje tylko część strumienia danych dziennika jądra. Jest także przeznaczony tylko do odczytu.
Innym sposobem uzyskania dostępu jest nowsze /dev/kmsg
urządzenie postaci. Jest to interfejs do odczytu i zapisu, który można udostępniać wielu procesom klienckim. Jeśli współużytkuje je wiele procesów, wszystkie odczytują ten sam pełny strumień danych, na które nie mają wpływu. Jeśli otworzą go w celu dostępu do zapisu, mogą również wstrzykiwać wiadomości do strumienia dziennika jądra, tak jakby zostały wygenerowane przez jądro.
/proc/kmsg
i /dev/kmsg
podać dane dziennika w formie innej niż RFC-5424.
Aplikacje
Aplikacje uległy zmianie.
Funkcja biblioteki GNU C syslog()
w głównych próbach połączenia się z AF_LOCAL
nazwanym gniazdem datagramu /dev/log
i zapisania w nim wpisów dziennika. (Funkcja biblioteki BSD C syslog()
używa obecnie /var/run/log
jako nazwy gniazda i próbuje /var/run/logpriv
najpierw.) Aplikacje mogą oczywiście mieć własny kod, aby to zrobić bezpośrednio. Funkcja biblioteki to po prostu kod (do otwierania, łączenia, zapisywania i zamykania gniazda), wykonujący w końcu we własnym kontekście procesu aplikacji.
Aplikacje mogą również wysyłać wiadomości RFC 5424 za pośrednictwem UDP na lokalny serwer RFC 5426, jeśli nasłuchuje na gnieździe AF_INET
/ AF_INET6
datagramie na komputerze.
Dzięki presji ze strony świata Daemontools w ciągu ostatnich dwóch dziesięcioleci wiele dæmons obsługuje działanie w trybie, w którym nie używają syslog()
funkcji biblioteki GNU C ani gniazd UDP, a jedynie wypluwają swoje dane dziennika do standardowego błędu w zwykła moda na Uniksa.
zarządzanie logami za pomocą nosh i ogólnie rodziny daemontools
Dzięki rodzinie zestawów narzędzi daemontools rejestrowanie jest bardzo elastyczne. Ale ogólnie rzecz biorąc, w całej rodzinie chodzi o to, że każdy „główny” demon ma powiązany „rejestr”. „główne” dæmons działają podobnie jak procesy inne niż demon i zapisują swoje komunikaty w dzienniku do standardowego błędu (lub standardowego wyjścia), który podsystem zarządzania usługami łączy za pośrednictwem potoku (który utrzymuje otwarte, aby dane dziennika nie zostały utracone restart usługi) na standardowe wejście dæmon „logowania”.
Wszystkie dæmons „logujące” uruchamiają program, który gdzieś loguje . Ogólnie ten program jest coś multilog
lub cyclog
że czyta ze standardowego wejścia i zapisuje (nanosekundy o czasie,) plików w ściśle size-ograniczona, obracane automatycznie, wyłączny zapisu, katalog zalogować. Ogólnie rzecz biorąc, wszystkie te demony działają pod egidą indywidualnych dedykowanych nieuprzywilejowanych kont użytkowników.
Tak więc powstaje w dużej mierze rozproszony system rejestrowania, w którym dane dziennika każdej usługi są przetwarzane osobno.
Jedno można uruchomić coś podobnego klogd
lub syslogd
czy rsyslogd
pod zarządzania usługami daemontools mieszkaniami. Jednak świat Daemontools zdał sobie sprawę wiele lat temu, że struktura zarządzania usługami z „logowaniem” dæmons nadaje się do robienia rzeczy w prostszy sposób. Nie ma potrzeby łączenia wszystkich strumieni dziennika w jeden gigantyczny mish-mash, analizowania danych dziennika, a następnie przekierowywania strumieni z powrotem do osobnych plików dziennika; a następnie (w niektórych przypadkach) przykręcić z boku niewiarygodny mechanizm zewnętrznego obracania kłody. Struktura rodziny daemontools jako część standardowego zarządzania logami już wykonuje rotację logów, zapis plików logów i separację strumienia.
Ponadto: model ładowania łańcuchowego upuszczania uprawnień z narzędziami wspólnymi dla wszystkich usług oznacza, że programy rejestrujące nie potrzebują uprawnień administratora; a model UCSPI oznacza, że muszą tylko dbać o różnice, takie jak transport strumieniowy w porównaniu z transportem datagramów.
Zestaw narzędzi nosh jest tego przykładem. Podczas gdy można uruchomić rsyslogd
pod nim, po wyjęciu z pudełka, i po prostu zarządzać jądrem /run/log
i danymi wejściowymi dziennika UDP w stary sposób; to również zapewnia bardziej „daemontools rodzime” sposoby zalogowaniu te rzeczy:
klogd
usługa, która czyta z /proc/kmsg
i po prostu pisze, że strumień dziennika do standardowego błędu. Odbywa się to za pomocą prostego programu o nazwie klog-read
. Powiązany dziennik dæmon przekazuje strumień dziennika ze standardowym wejściem do /var/log/sv/klogd
katalogu dziennika.
local-syslog-read
usługa, która czyta z datagramy /dev/log
( /run/log
na BSD) i po prostu pisze, że strumień dziennika do standardowego błędu. Odbywa się to przez program o nazwie syslog-read
. Powiązany dziennik dæmon przekazuje strumień dziennika ze standardowym wejściem do /var/log/sv/local-syslog-read
katalogu dziennika.
udp-syslog-read
usługa nasłuchuje na porcie UDP Syslog, czyta co jest wysyłane do niego i po prostu pisze, że strumień dziennika do standardowego błędu. Ponownie program jest syslog-read
. Powiązany dziennik dæmon przekazuje strumień dziennika ze standardowym wejściem do /var/log/sv/udp-syslog-read
katalogu dziennika.
- (w BSD)
local-priv-syslog-read
usługa, która odczytuje datagramy /run/logpriv
i po prostu zapisuje strumień dziennika do standardowego błędu. Ponownie program jest syslog-read
. Powiązany dziennik dæmon przekazuje strumień dziennika ze standardowym wejściem do /var/log/sv/local-priv-syslog-read
katalogu dziennika.
Zestaw narzędzi zawiera również export-to-rsyslog
narzędzie, które może monitorować jeden lub kilka katalogów dziennika (za pomocą systemu nieinwazyjnych kursorów dziennika ) i wysyłać nowe wpisy w formie RFC 5424 przez sieć do wyznaczonego serwera RFC 5426.
zarządzanie logami z systemd
Systemd ma jeden monolityczny program zarządzania dziennika systemd-journald
. Działa to jako usługa zarządzana przez systemd.
- Czyta
/dev/kmsg
dane dziennika jądra.
- Odczytuje
/dev/log
(symboliczny link /run/systemd/journal/dev-log
) do danych dziennika aplikacji z GNU C Library za syslog()
funkcją.
- Nasłuchuje na
AF_LOCAL
gnieździe w strumieniu /run/systemd/journal/stdout
danych dziennika pochodzących z usług Systemd zarządzane.
- Nasłuchuje na
AF_LOCAL
gnieździe datagramowym na /run/systemd/journal/socket
danych pochodzących z dziennika programów, które mówią protokół czasopism Systemd specyficzne (tj sd_journal_sendv()
et al.).
- Miesza je wszystkie razem.
- Zapisuje do zestawu systemowych plików dzienników dla poszczególnych użytkowników w
/run/log/journal/
lub /var/log/journal/
.
- Jeśli może się połączyć (jako klient) z
AF_LOCAL
gniazdem datagramu /run/systemd/journal/syslog
, zapisuje tam dane dziennika, jeśli skonfigurowano przekazywanie do syslog.
- Jeśli skonfigurowano, zapisuje dane dziennika do bufora jądra za pomocą
/dev/kmsg
mechanizmu zapisu .
- Jeśli skonfigurowano, zapisuje dane dziennika również na terminalach i urządzeniu konsoli.
Złe rzeczy zdarzają się w całym systemie, jeśli ten program ulegnie awarii lub usługa zostanie zatrzymana.
systemd sam organizuje standardowe wyjścia i błędy (niektórych) usług do przyłączenia do /run/systemd/journal/stdout
gniazda. Więc dæmons, którzy logują się do standardowego błędu w normalny sposób, wysyłają swoje dane wyjściowe do dziennika.
To całkowicie zastępuje klogd, syslogd, syslog-ng i rsyslogd.
Wymagane są teraz specyficzne dla systemu. W systemie systemowym nie stają się końcem serwera /dev/log
. Zamiast tego przyjmują jedno z dwóch podejść:
- Stają się końcem serwera
/run/systemd/journal/syslog
, który (jeśli pamiętasz) systemd-journald
próbuje połączyć się i zapisać dane dziennika. Kilka lat temu skonfigurowano by w tym imuxsock
celu metodę wprowadzania rsyslogd .
- Czytają bezpośrednio z dziennika systemowego, używając biblioteki systemowej, która rozumie format dziennika binarnego i która może monitorować pliki dziennika i katalog pod kątem dodawania nowych pozycji. Obecnie konfiguruje się w tym
imjournal
celu metodę wprowadzania danych rsyslogd .