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 nastavení kdy server přijímá všechny logy ze sítě. Server Defaultně naslouchá na portu 514 protokolu UDP.

source server1 {
  udp();
};

Je ale možné nastavit server tak, aby naslouchal i na protokolu TCP. Dále možné nastavit port na kterém bude naslouchat a maximální počet aktuálních spojení. Ještě jde nastavit IP adresu na které bude sever naslouchat.


source server1-tcp {
  tcp(ip(192.168.1.1) port(514) 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);
}

Příklad filtru který přijme všechny zprávy pouze od IP adresy 10.143.0.22.

filter onlyone ip {
  host("10.143.0.22");
}


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);
};

Pokud chcete posílat logy na tento logovací server po síti z nějakého jiného serveru tak část destination na serveru server1 bude vypadat nějak takhle:

destination from-server1 {
  udp("10.143.0.1");
}; 


Další zdroj informací: [1].


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