Syslog-ng

From PostgreSQL_wiki
Revision as of 10:38, 24 February 2010 by 10.67.13.21 (talk) (Ophalen unieke foutmeldingen van syslog-ng)
Jump to: navigation, search

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

Door in de laatste twee regels de comment te wisselen ontstaat een logging naar syslog-ng en de database vanaf niveau "error".

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

Ophalen unieke foutmeldingen van syslog-ng

Twee scripts ondersteunen het ophalen van de unieke loginformatie van de syslog-ng server. error-script.sh lanceert het script level-error-plus.sh, bouwt het bestand overzicht.txt op en op het werkstation haal je met het script ./haalop-error-overzicht-syslog-ng.sh

Scripts error-overzicht

Het script error-script.sh

#!/bin/bash
./level-error-plus.sh > overzicht.txt

Het script level-error-plus.sh

#!/bin/bash
/usr/bin/mysql -ukarim -pk@r1m tlog <<EOFMYSQL
 select distinct level, host, msg from logs where level in ( 'err', 'crit', 'alert', 'emerg') order by level, host;
EOFMYSQL

Stappen ophalen error-overzicht

Stap 1: Op de syslog-ng server in de home directory:

ssh syslog-ng.uwork.nl
user@syslog-ng:~$ ./error-script.sh

Stap 2: Voer op het werkstation in de home directory het script haalop-error-overzicht-syslog-ng.sh uit:

user@werkstation:~$ ./haalop-error-overzicht-syslog-ng.sh

Stap 3: Het overzicht staat nu in de home directory. Kopieer overzicht.txt in het document template en druk het af.


Terug naar: Uwork Support Infrastructuur