Inteligentní logování

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání

V téměř každé standardní linuxové distribuci je je použitý jako logovací démon syslog. Tento démon spravuje všechny logy od od programu jež posílají své logy na zařízení /dev/log. Samotná správa démona ale není nijak jednoduchá a pokud chcete rozdělit logy do různých souborů na základě zdroje (tj. třeba IP adresa) je to skoro nemožné bez externího programu. Možným řešením je použít démona syslog-ng, který všechny tyto problémy řeší.

Postup při instalaci je jednoduchý. Pro Debian a jeho deriváty naistalujen syslog-ng

apt-get install syslog-ng

Po instalaci bude zastaralý démon syslog odinstalovaný. Konfigurační soubor pro syslog-ng najdeme v /etc/syslog-ng/syslog-ng.conf Základní rozdělení a logováni lze pochopit z defaulního nastavení. Pokud ne, tak odkazuji na oficiální stránky. Celé logování je rozděleno do základních tří částí.

  • zdroj (source)
  • filtr (filter)
  • cíl (destination)


V části zdroj nás zajimá zdroj logů ať už lokální nebo síťový. Lokální je viz defaultní nastavení ale nás spíše zajímá siťový zdroj. Příklad siťového zdroje logů by vypadal nějak takhle:

source server1 {
  udp(ip(10.143.0.5) port(513) max-connections(300));
};

V části filtr je se nastavuje jaké zprávy bude server přijímat, resp. logovat. Tohle je obsáhlejší téma, takže vše najdete také na oficiálních stránkách.

Příklad filtru který přijme všechny zprávy dle priority od info až po emerg.

filter notdebug {
  level(info...emerg);
}

Poslední částí je cíl. Pokud log projde filtrem, tak se bude ukládat na místo zadané v této části. Je mnoho způsobů jak ukládat logy. Mezi nejzajímavější patří do souboru nebo do databáze.


  • do souboru

Logy se budou ukládat do souboru zadaným v cestě.

destination server1 {
  file("/var/log/server/server1.log");
};

Pro nadšence viz dokumentace.... popíšu jindy.

destination server1-smart { 
  file("/var/log/server/HOSTS/$HOST/$YEAR/$MONTH/$DAY/$FACILITY$YEAR$MONTH$DAY"
  owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)); 
};
  • do databáze

Pro ukládání do databáze je možné využít program sqlsyslog. Pravidlo pak může vypadat nějak takhle.

destination server1-database { 
  program("/usr/local/sbin/sqlsyslogd -u sqlsyslogd -t logs sqlsyslogd -p");
};

Nakonec je potřeba určit samotné logovací pravidlo.

log {
  source(server1);
  filter(notdebug);
  destination(server1);
};

Další zdroj informací: [1].


--Sevcik.roman 00:53, 25. 2. 2008 (CET)