sobota, 15 sierpnia 2009

Logi na linksowym desktopie

Tradycyjny model zarządzania logami w uniksie to połączenie trzech aplikacji:
- syslog
- logrotate
- cron

Powyższe trio dobrze się sprawdza na maszynach produkcyjnych, działających 24/7. Logrotate dostarcza cronowi zadanie do katalogu daily, które wykonywane jest codziennie, tuż po północy. Problem zaczyna się na desktopie, gdy komputer jest wyłączany przed wykonaniem zadań w daily. Logi puchną, przechowując bardzo stare i często zbędne informacje. Można kombinować z anacronem, ja jednak postanowiłem sprawdzić co do zaoferowania ma tu syslog-ng, gdyż w PLD jest to domyślny demon logów.

Założyłem, że nie potrzebuję trzymać dzienników dłużej niż tydzień, oraz nie będę potrzebował ich kompresować. W pliku /etc/syslog-ng/syslog-ng.conf odszukujemy definicje plików (file) w destination np.:

destination d_messages { file("/var/log/messages"); };

Dodajemy do nazwy pliku makro $WEEKDAY, doklejające trzyliterowy przyrostek, odpowiadający aktualnemu dniu tygodnia. Ponadto dodajemy opcję overwrite_if_older(86400), gwarantującą że demon nie nadpisze danego pliku wcześniej niż za 24 godziny (86400 sekund):

destination d_messages { file("/var/log/messages.$WEEKDAY" overwrite_if_older(86400)); };

na koniec restartujemy demona. To rozwiąże problem tylko z aplikacjami korzystającymi z sysloga, dlatego musimy przekonfigurować każdą aplikację z osobna. Przykładowo sudo w PLD pisze zarówno do sysloga, jak i do własnego pliku, załatwiamy to jedną linijką w pliku /etc/sudoers:

Defaults !logfile

Nie musimy się za to przejmować logami pliku /var/log/dmesg*, czy programów X.org, GDM, gdyż same troszczą się o swoje dzienniki.