Linux – rejestrowanie logów systemowych

W związku z często zadawanymi pytaniami przez klientów, omówię proces rejestracji logów w systemie Linux.

Instalując lub też tworząc aplikacje musimy w łatwy sposób utrzymać nad nimi kontrolę. Powinny one zapisywać przebieg swojego działania tak, by szybko można było odczytać kiedy i dlaczego coś źle się wykonało. Dodatkowo powinniśmy mieć możliwość odczytania kto i kiedy próbował się logować do systemu itp. Za to wszystko może odpowiadać narzędzie o nazwie rsyslog. Oprócz rsyslog potrzebujemy mechanizmu rotującego logi – w przeciwnym wypadku szybko skończyło by się miejsce na dysku. Takim narzędziem będzie również dzisiaj omawiany logrotate.


RSYSLOG

Status usługi

W pierwszej kolejności sprawdzamy status usługi poprzez wpisanie w linii komend:

# systemctl status rsyslog.service

Powinien być zainstalowany i uruchomiony. Jeśli okazałoby się inaczej należy go zainstalować / uruchomić.

W celu instalacji zależnie od systemu wpisujemy odpowiednio dla:

Ubuntu / Debian

# apt install rsyslog

CentOS, RHEL, Fedora

# yum install rsyslog

Uruchamiamy poprzez komendę:

# systemctl enable rsyslog.service

Po wprowadzeniu zmian w konfiguracji należy rsyslog’a zrestartować poprzez:

# systemctl restart rsyslog.service

Konfiguracja

W pliku rsyslog.conf zapisujemy reguły na podstawie których zbierane będą zdarzenia systemowe. Definiujemy tutaj co chcemy logować oraz priorytet zdarzeń. Poniższa tabelka przedstawia najczęściej logowane zdarzenia.

KategoriaOpis
securityLogi związane z bezpieczeństwem
userAplikacje używane przez użytkowników serwera
mailLogi pocztowe
auth, authprivAutoryzacje użytkowników
kernLogi zdarzeń dotyczące jądra systemowego
cronLogi dotyczące deamon’a cron
ftpLogi związane z serwerem ftp

Kolejna tabela przedstawia priorytety, które możemy przypisać do interesujących nas kategorii logów. Są one usystematyzowane od najwyższego (emerg) do najniższego priorytetu.

PriorytetOpis
emergWysoki priorytet. Poważne awarie uniemożliwiające korzystanie z usługi
alertAwarie wymagające podjęcia szybkiej reakcji – w przeciwnym wypadku usługa stanie się niezdatna do użycia
critZdarzenia krytyczne
errBłędnie działające usługi
warningInformacja ostrzegająca – coś działa nieprawidłowo
noticeWażniejsze zdarzenia
infoPodstawowe informacje
debugInformacje szczegółowe: kiedy aplikacja się uruchomiła, z jakich plików korzysta itp.

Tworząc konfigurację rsyslog należy brać pod uwagę, że w logach będą zapisywane wszystkie informacje z priorytetami od wybranego w górę. Wybierając zatem zapis logów z priorytetem notice zapisane zostaną również informacje z priorytetem (warning, err, crit, alert oraz emerg). Możemy też zawęzić zapis priorytetów, o sposobie wykonania takiej konfiguracji będzie w jednym z poniższych przykładów.

Plik konfiguracyjny rsyslog.conf znajduje się w katalogu etc/ – w systemach Ubuntu i podobnych podstawowa znajdują się w katalogu etc, natomiast wstępna konfiguracja selektorów znajduje się w katalogu /etc/rsyslog.d/

Składnia pliku rsyslog.conf jest prosta. Po lewej stronie wpisujemy selektor składający się z dwóch części:

  • kategoria logów
  • jakie priorytety mają być logowane

Po prawej stronie natomiast podajemy lokalizację, gdzie mają być zapisane logi. Przy czym możemy podać różną lokalizację od katalogu lokalnego, lokalizacji zdalnej czy też serwera FTP.
Przykładowy zapis może wyglądać w następujący sposób:

» ftp.*		/var/log/ftp

Powyższy zapis mówi, że kategoria logowania to ftp. Priorytety logowania wybrane są wszystkie poprzez zapis z gwiazdką, która jest w tym przypadku równoznaczna z priorytetem debug.

» *.warning;crone.none;auth.none		/var/log/messages

Drugi bardziej rozszerzony spowoduje, że logujemy prawie wszystkie kategorie (poprzez zapis gwiazdki na pierwszej pozycji) o priorytetach od warning do emerg w pliku /var/log/messages. Dlaczego prawie wszystkie? Wykluczyliśmy z nich logi cron oraz auth zapisem none.

W przypadku gdy chcemy logować tylko konkretny priorytet tworzymy następujący wpis:

» cron.=alert			/var/log/cronalert

W tej sytuacji logi z priorytetem alert (wyższe priorytety nie będą brane pod uwagę) deamona cron zostaną zapisane w pliku cronalert.

Gdy chcemy przejrzeć istniejące logi najlepiej skorzystać z polecenia tail z parametrem f, który powoduje ich stałe odświeżanie, będziemy mieli zatem wgląd w plik z bieżącymi zdarzeniami. Poniższa komenda pozwoli przejrzeć logi cronalert

# tail -f /var/log/cronalert

Logrotate

Jest narzędziem mającym na celu uproszczenie w administrowaniu plikami dziennika w systemie. Pozwala na automatyczną kompresję, usuwanie oraz wysyłanie plików.
Można go skonfigurować w taki sposób by obsługiwał pliki codziennie, tydzień ,miesiąc lub gdy plik osiągnie określony przez użytkownika rozmiar. Konfigurację tą ustawiamy w /etc/logrotate.conf

Jest on uruchamiany codziennie przez deamon’a cron.

Status usługi

Większość OS posiada już wstępnie skonfigurowanego logrotate. Jeśli w Twoim systemie operacyjnym nie jest on zainstalowany należy wpisać następującą komendę:

– dla Ubuntu, Debian

# apt install logrotate

– dla CentOS, RHEL, Fedora

# yum install logrotate

W jaki sposób możemy sprawdzić czy jest zainstalowany? Zależnie od posiadanego systemu wpisujemy:

– CentOS i podobne

# cat /var/lib/logrotate.status

– dla Ubuntu, Debian

# cat var/lib/logrotate/status

Konfiguracja

Wchodząc w edycję pliku logrotate.conf odczytamy w jaki sposób jest ustawiona jego konfiguracja:

# vim /etc/logrotate.conf

Widzimy tutaj, że nowe pliki z logami będą tworzone raz w tygodniu,:

# rotate log files weekly
weekly

natomiast będą one przechowywane przez okres 4 tygodni (rotacja – 4):

# keep 4 weeks worth of backlogs
rotate 4

Taka konfiguracja dotyczy wszystkich selektorów jakie zapisaliśmy w rsyslog. Wszystkie pliki logów starszych niż 4 tygodnie będą usuwane automatycznie. Oczywiście zmieniając konfigurację tak by plik był tworzony raz dziennie rotacja na 4 spowoduje, że zostaną usunięte pliki starsze niż 4 dni.

Logrotate domyślnie przypisuje numer do istniejącego pliku logu. Jeśli przykładowo logujemy zdarzenie ftp do pliku ftp.log to nazwy plików zgodnie z ustaloną rotacją będą nazywane odpowiednio ftp.log.1, ftp.log.2 itd.

W jaki sposób możemy zmienić powyższą konfigurację?
Zamiast tworzenia nowych plików co tydzień możemy ustawić np. dziennie (daily) lub miesięcznie (monthly), zmienić rotację na inną lub też włączyć kompresję. Dodając compress oraz delaycompress spowodujemy, że wszystkie rotowane logi oprócz ostatniego zostaną skompresowane. Możemy również ustalić wielkość pliku np. na 5MB poprzez wpis size 5M. Taki wpis będzie powodował, że nowy plik (rotowany) zostanie utworzony dopiero po przekroczeniu wielkości 5MB.


To w sumie byłoby na tyle. Samo narzędzie posiada zdecydowanie większe możliwości, jak choćby dodawanie bloków, które umożliwią przykładowo zrestartowanie aplikacji po zrotowaniu logów). Jeśli zainteresowałem Cię tym tematem zachęcam do przestudiowania oryginalnej dokumentacji.