Syslog

System rejestrujący - syslog


Jądro systemu, usługi systemowe i różne aplikacje zapisują informacje o swoim działaniu w dziennikach systemowych (logach). Dlatego pierwszym miejscem, do którego należy zajrzeć, kiedy jakaś usługa nie uruchamia się poprawnie, jest odpowiedni dziennik. W systemach uniksowych i linuksowych dominującym systemem rejestracji zdarzeń jest syslog. Poznamy bliżej jedną z jego nowszych wersji o nazwie rsyslog.

Pliki dzienników


Pliki dzienników znajdują się z reguły w katalogu:
/var/log
Ważniejsze pliki które możesz tam znaleźć to :
  • messages lub syslog - główny dziennik systemowy
  • dmesg - komunikaty o urządzeniach wykrytych w trakcie startu systemu i o ładowanych sterownikach do tych urządzeń, do ich obejrzenia można posłużyć się programem dmesg
  • boot.log - komunikaty skryptów startowych
  • daemon.log - komunikaty usług
  • kern.log - wszystkie komunikaty generowanie przez jądro
  • auth.log - komunikaty pochodzące z części systemu odpowiedzialnej za uwierzytelnianie użytkowników (np. informacje o poleceniach wykonanych przez sudo)
  • mail.log - komunikaty związane z obsługą poczty
  • wtmp - zapisy logowania użytkowników do systemu, do ich oglądania służy polecenie last
  • lastlog - informacja o ostatnich logowaniach, do jej oglądania służy polecenie lastlog
Wpis do dziennika jest najczęściej pojedynczym wierszem zawierającym datę i czas wystąpienia zdarzenia, a także jego rodzaj i poziom ważności.

Konfigurowanie demona (r)syslog - podstawowe reguły


Za zbieranie informacji o działaniu systemu i umieszczania ich w plikach odpowiada usługa systemowa syslogd (lub nowsza rsyslogd). Plikiem konfiguracyjnym dla syslogd jest /etc/syslog.conf a dla rsyslogd /etc/rsyslog.conf (zachowana jest zgodność wstecz). (r)syslog umożliwia sortowanie komunikatów ze względu na źródło ich pochodzenia i stopień ważności oraz na kierowanie ich w różne miejsca: do plików, na terminale użytkowników a także na inne komputery. Plik konfiguracyjny opisuje reguły systemu rejestrowania. Podstawowy format jest następujący:
usługa.poziom <co najmniej jeden znak tabulacji> 	przeznaczenie
Usługa określa z jakiej części systemu pochodzi informacja. Może przyjąć następujące wartości: auth, authpriv, cron, daemon, kern, ftp, local0-7, lpr, mail, mark, news, syslog, user, uucp. Poziom określa priorytety komunikatów. Wszystkie wiadomości o tym lub wyższym priorytecie trafiają do dziennika. Poziomy ważności są następujące (w kolejności rosnącego znaczenia): debug, info, notice, warning (warn), error (err), crit, alert, emerg (panic). Znak "=" przed nazwą poziomu wskazuje, że należy zbierać wiadomości o dokładnie takim poziomie, a "!" oznacza "oprócz tego i wyższych poziomów". Symbol "*" oznacza wszystkie usługi i poziomy a "none" - "żaden poziom". W pojedynczej regule może występować wiele usług oddzielonych przecinkami lub par usługa-poziom oddzielonych średnikami. Przeznaczenie określa gdzie trafiają zebrane komunikaty. Może to być między innymi:
  • plik - należy podać pełną ścieżkę np. /var/log/messages
  • łącze nazwane (przydatne przy debugowaniu) - nazwa łącza jest poprzedzona znakiem |
  • terminal np. tty6
  • maszyna zdalna - nazwa maszyny poprzedzona jest znakiem @, np. @192.168.0.1
  • lista użytkowników np: root,admin (stara składnia) lub :omusrmsg:root,admin (składnia rsyslog); * lub :omusrmsg:* spowoduje wyświetlenie komunikatu wszystkim zalogowanym użytkownikom
  • śmietnik: ~
Nazwa pliku poprzedzona "-" oznacza, że system plików nie powinien być synchronizowany po zapisaniu każdego wpisu do dziennika (włączone buforowanie). Przykład
mail.info		/var/log/mail.log
Powyższy wpis spowoduje, że komunikaty systemu pocztowego o poziomach info i wyższych będą trafiały do pliku /var/log/mail.log a następujący:
*.emerg;user.none	             *
że wszystkie komunikaty awaryjne oprócz takich, które są generowane przez procesy użytkownika, pojawią się na ekranach wszystkich zalogowanych użytkowników. Przykładowy plik rsyslog.conf znajdziesz na końcu scenariusza. Aby zmusić demona (r)syslog działającego nieprzerwanie do ponownego odczytania pliku konfiguracyjnego należy wysłać do niego sygnał HUP. Pid procesu demona jest zapisany w pliku /var/run/rsyslogd.pid, więc właściwe polecenie ma następującą postać:
% kill -HUP $(cat /var/run/(r)syslogd.pid)
Co można zrobić również w następujący sposób:
% /etc/init.d/rsyslog restart
Do sprawdzenia poprawności składniowej pliku konfiguracyjnego służy polecenie:
% rsyslogd -f /etc/rsyslog.conf -N1

Nowe możliwości rsyslog


System rejestrujący pozwala także na korzystanie z tzw. modułów - wtyczek zapewniających różnorodną funkcjonalność. Polecenia dołączenia odpowiednich modułów powinny znaleźć się na początku pliku konfiguracyjnego. Dzięki schematom (templates) można określić format logowanej wiadomości. Rsyslog umożliwia także filtrowanie wiadomości na podstawie jej zawartości. Udostępnia operacje porównywania takie jak: contains, isequal, startswith, regex. Ogólna postać polecenia jest następująca:
:własność,[!]operacja, "wzorzec"
gdzie najczęściej wykorzystywaną własnością jest :msg (treść komunikatu). Przykład
:msg,contains,"iptables"                     /var/log/iptables.log
:msg,regex,"fatal .* error"                   /var/log/fatal-error.log
Rsyslog może także zapisywać informacje do baz danych MySQL lub PostgreSQL (po instalacji pakietu rsyslog-mysql lub rsyslog-pgsql). Jako miejsce przeznaczenia można wtedy podać nazwę tabeli. Kolejną możliwością rsyslog jest wybór protokołu TCP lub RELP zamiast UDP. Nazwę maszyny przeznaczenia należy poprzedzić znakiem @@ (TCP) lub :omrelp: (RELP). Wcześniej należy załadować odpowiedni moduł. Po instalacji rsyslog domyślnie czas jest zapisywany w skróconej formie: np. 2016-10-05 14:17:42 odpowiada za to poniższa linia w pliku konfiguracyjnym (by włączyć dokładne zapisywanie czasu - trzeba zamienić ją na komentarz).
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

Logger


Polecenie logger jest interfejsem do systemu syslog z poziomu interpretera poleceń (powłoki). Warto je wykorzystać do testowania zmian w pliku konfiguracyjnym. Na przykład aby sprawdzić regułę:
local2.info		/tmp/test.log
możesz wydać polecenie:
% logger -p local2.info "test local2 info"

Logrotate


Samo zbieranie i czytanie dzienników to nie wszystko o co powinien zadbać administrator - na maszynach z setką intensywnie pracujących użytkowników mogą one przyrastać bardzo szybko powodując przepełnienie systemu plików. Należy pamiętać, że samo skasowanie pliku nie rozwiązuje problemu (i-węzeł pliku nie zostanie zwolniony, dopóki plik nie zostanie zamknięty). Aby ułatwić zadania administratorowi system udostępnia polecenie logrotate, które umożliwia rotację plików z dziennikami, ich kompresję, przesyłanie pocztą do użytkowników i usuwanie. Jest zazwyczaj uruchamiany codziennie jako zadanie regularne przez podsystem cron. Jego plik konfiguracyjny to /etc/logrotate.conf

Analiza dzienników


Istnieją również narzędzia wspomagające analizowanie dzienników, tworzące odpowiednie raporty i przesyłające je pod wskazany adres. Przykładami takich narzędzi są swatch i logcheck.

Zobacz też


man rsyslog.conf man rsyslogd man logger man logrotate http://www.rsyslog.com/doc/rsyslog_conf.html Alternatywa dla syslog: systemd

Ćwiczenia


Skonfiguruj rsyslog w taki sposób, aby:

  1. wszystkie zapisy z poziomu notice i niższych trafiały do pliku /var/log/notice.log i nie pojawiały się w żadnych innych plikach katalogu /var/log,
  2. zapisy z innych poziomów nie trafiały do pliku /var/log/notice.log,
  3. do dziennika /var/log/mail.log trafiały wszystkie informacje związane usługami pocztowymi i żadne inne,
  4. wszystkie komunikaty zawierające wzorzec "business" w godzinach 8:00-16:00 trafiały do pliku /var/log/business_banking.log.

Przy pomocy polecenia logger przetestuj powyższe reguły. Plik konfiguracyjny syslog zawierający powyższe konfiguracje prześlij do Moodle.