Syslog-ng
Contents
Syslog Next Generation
Syslog-ng heeft uitgebreide mogelijkheden om systemen te beheren op basis van een centrale logging. Het is daarbij mogelijk om met swatch op basis van events signaleringen te doen. php-syslog-ng biedt een webinterface voor de syslog-ng server. De configuratie van het geheel is gecompliceerd en luistert nauw, het duurt even voordat de zaak loopt. In de Uwork opzet is centrale logging uitgewerkt voor een server en de drie verschillende types client:
- syslog-ng client, met een aanpassing van syslog-ng.conf op een vijftal plaatsen
- rsyslog, de eenvoudigste het toevoege van het bestand uwork.nl.conf is voldoende
- syslog, een aanpassing van /etc/default/syslogd en /etc/syslog.conf
De communicatie met de aangesloten servers verloopt via het udp protocol. Dit is zeer efficient, maar niet failsafe. Het doel van centrale logging is signalering en niet de uiterste perfectie. De logbestanden op de client zijn uiteindelijk altijd de beste bron.
De communicatie tussen syslog-ng en de database verloopt via een mysql.pipe. Syslog-ng verzorgt via de mysql.pipe voor een continue stroom van data richting de mysql daemon. Als de mysql stopt dan levert dat een doorlopende stroom errors op, waar niet uit te breken is en dat is lastig als er maar één console is. Stop dus altijd eerst de syslog-ng daemon en pas daarna de mysql daemon.
Overzicht van de opzet van de configuratie
Op de centrale server draaien:
- syslog-ng
- mysql
- php-syslog-ng
Algemene installatie
Installeer de syslog-ng applicatie. Het systeem verwijdert de reeds aanwezige logging daemon, syslog of rsyslog.
# apt-get update && apt-get install syslog-ng
Server configuratie
De centrale server verzamelt loggegevens over vpn van aangesloten machines. De voorlopige instelling is vanaf log-level "debug".
syslog-ng.conf
De syslog configuratie van de server bestaat uit:
- options, hierin staat nu de fqdn aan
- source, met daarin het statement voor luisteren op protocol udp poort 514
- destination, met de mysql koppeling voor de webinterface syslog-ng
- het filter voor doorlaten van logmeldingen vanaf niveau "debug"
- log, legt de relatie tussen source en destionation via filer
options { chain_hostnames(0); time_reopen(10); time_reap(360); log_fifo_size(2048); create_dirs(yes); group(adm); perm(0640); dir_perm(0755); use_fqdn(yes);. use_dns(yes);. dns_cache(yes);. keep_hostname(yes); stats_freq(0); bad_hostname("^gconfd$"); }; source s_all { internal(); unix-stream("/dev/log"); udp( ip(10.20.31.34) port(514)); }; destination d_mysql { pipe("/var/log/mysql.pipe" template("INSERT INTO logs (host, facility, priority, level, tag, datetime, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','$PROGRAM', '$MSG' ); \n") template-escape(yes) ); }; filter f_at_least_err { level(err..emerg); }; # Log-level vanaf error is voor productie interessant log { source(s_all); filter(f_at_least_err); destination(d_mysql); };.
mysql pipe
De loggegevens gaan via het pipe mechanisme naar de mysql daemon. Het script syslog2mysql.sh verzorgt het doorsturen van loggegevens via de pipe naar mysql.
#!/bin/bash /bin/rm /var/log/mysql.pipe /usr/bin/mkfifo /var/log/mysql.pipe #/usr/bin/mysql -usyslogfeeder -p5y5l09 tlog </var/log/mysql.pipe>/dev/null if [ -e /var/log/mysql.pipe ] ; then while [ -e /var/log/mysql.pipe ] do /usr/bin/mysql -usyslogfeeder -p<password> tlog </var/log/mysql.pipe>/dev/null done else /usr/bin/mkfifo /var/log/mysql.pipe fi
Met name de mysql.pipe luistert nauw. De beste debug is een mysql prompt om daarmee de loggegevens uit de database op te vragen.
php-syslog-ng
De installatie van de php-syslog-ng webinterface is een recht toe recht aan implementatie van een php website.
Zorg voor de juiste databasenaam en usergegevens in het bestand config.php. php-syslog-ng slaat alle user gegevens op in een eigen users tabel in de database.
Client configuratie
syslog-ng client
De configuratie is betrekkelijk eenvoudig. De source is /dev/log, logging met een niveau vanaf error gaat ook naar syslog-ng.uwork.nl. Met behulp van filter is het reeds aan de client zijde mogelijk om logmeldingen te filteren. De voorlopige policy is filtering in de webinterface php-syslog-ng.
source s_all { unix-stream("/dev/log"); internal(); }; destination loghost { udp("syslog-ng.uwork.nl"); }; filter f_at_least_err { level(err..emerg); }; # Het log statement knoopt de source en de destination via het filter aan elkaar. # log { source(s_all) ; filter(f_at_least_err) ; destination(loghost) ; }; log { source(s_all) ; destination(loghost) ; };
rsyslog client
Het houdt het midden tussen een eitje en een fluitje van een cent om een nieuwe host toe te voegen die logt op basis van rsyslog. Voeg op de host in de directory /etc/rsyslog.d het bestand uwork.nl.conf toe:
# Configuratie voor remote logging bij Uwork *.debug @syslog-ng.uwork.nl
En doe vervolgens een herstart van de rsyslog daemon:
# /etc/init.d/rsyslogd restart
Vanaf dit moment logt de machine naar de centrale logging machine syslog-ng. Het bestand uwork.conf is gemakkelijk bij te houden met versiebeheer en cfengine2, zodat elke gewenste manier van logging op een beheersbare manier is door te voeren.
syslog
Toevoegen nieuwe host die logt op basis van syslog:
- Pas in /etc/default/syslogd de regel met SYSLOGD aan
- Voeg de centrale logger toe in /etc/syslog.conf
- Herstart de syslog daemon
syslogd:
# # For remote UDP logging use SYSLOGD="-r" # SYSLOGD="-r"
syslog.conf:
# Remote logging naar syslog-ng.uwork.nl *.* @syslog-ng.uwork.nl
Herstart van de service:
# /etc/init.d/sysklogd restart
Terug naar: Uwork Support Infrastructuur