Jeźeli mieliście kiedyś do czynienia z jakimkolwiek serwerem, to wiecie do czego służą logi. Jest kilka narzędzi przydatnych do ich obserwowania i alarmowania o niebezpiecznych sytuacjach (logcheck, logwatch), które działają samodzielnie i wysyłają co jakiś czas maile z ważnymi (lub nie) informacjami).
Często jednak trzeba samemu zapuścić się w czeluścia /var/log/ i poszukać interesującej nas informacji. Zwykle dzieje się tak, kiedy komuś zagubi się bardzo ważna przesyłka pocztowa, lub nie może połączyć się z siecią lokalną. W takim przypadku pozostaje żmudne grepowanie poszczególnych plików w poszukiwaniu interesującego nas zdarzenia. Do tego w paradę wchodzi często logrotate, nie tylko kompresując logi, ale sprawiając, że grep przeszukuje je w odwrotnej kolejności niż chronologiczna, co czasem nie jest zbyt miłe.
Kiedy już znudziła mi się zabawa w ręczne grepowanie, postanowiłem ułatwić to sobie kilkoma skryptami. Tak powstał logspy - zestaw skryptów shella do interaktywnego przeglądania i przeszukiwania logów. Jest on łatwy do instalacji i pozwala na szybkie modyfikacje i przystosowanie do aktualnych potrzeb. Kilka przykładów użycia:
- Pokazanie zawartości wybranego pliku z logami:
logspy /var/log/syslog
- Wyświetlenie wybranych logów w $PAGER:
logpager mail syslog messages
- Wyszukanie frazy w wybranych logach:
loggrep "ala ma kota" syslog auth dhcp
- Wyszukanie adresu e-mail w ostatnim logu SMTP:
loggrep user@domena mail
- To samo kilka logów wstecz (mail jest przeszukiwany standardowo, logi są przeszukiwane w kolejności chronologicznej):
logg user@domena 5
- To samo z 3-linijkowym kontekstem z góry oraz dołu wyszukanej frazy:
logg user@domena 5 3 mail
- Grepowanie kilku logów naraz w czasie rzeczywistym:
logfeed mail syslog dhcp | grep user
Nazwy komend można pisać skrótowo: logspy = logs, logfeed = logf, itd. Również nazwy logów mogą być pisane skrótowo, ich lista znajduje się w katalogu ‘lib/logspy/resolvers/‘. Dokładna składnia pojawia się po uruchomieniu logspy bez argumentów.
Skrypt jest napisany w zsh i wykorzystuje do pracy sudo, więc przy odpowiedniej konfiguracji uprawnień można korzystać z niego bez potrzeby logowania na konto root. Jeśli macie w systemie zainstalowany ccze, logi będą automatycznie kolorowane.
Przy pomocy jednego symlinka można łatwo wybrać, które logi są uważane za “standardowe” (przydane, jeżeli macie różne usługi na różnych maszynach), będą one używane w przypadku nie podania konkretnych nazw logów. W zestawie załączam obsługę większości popularnych logów (systemy pocztowe, DHCP, DNS, FTP, logowanie do systemu, uwierzytelnianie su oraz sudo), oczywiście łatwo można dodać własne. Zapraszam do testowania. :-)
