Syslog-ng

From PostgreSQL_wiki
Revision as of 15:26, 6 February 2010 by 10.68.71.4 (talk) (syslog)
Jump to: navigation, search

Syslog Next Generation

Syslog-ng heeft uitgebreide mogelijkheden om systemen te beheren op basis van een centrale logging. Het is mogelijk om op basis van events signaleringen te doen. php-syslog-ng biedt een webinterface voor de syslog-ng server. De configuratie is gecompliceerd en luistert nauw, het duurt even voordat de zaak loopt.

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 "error".

syslog-ng.conf

De syslog configuratie van de server bestaat uit:

  • options
  • 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 "error"
  • 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 {
#        unix-dgram("/var/run/log");
#        unix-dgram("/var/run/logpriv" perm(0600));
        internal();
        unix-stream("/dev/log");
        udp( ip(10.20.31.34) port(514));
#                ip(127.0.0.1)
#                port(514)
#        );
        tcp( ip(10.20.31.34) port(5140) keep-alive(yes));
#                ip(127.0.0.1)
#                port(5140) keep-alive(yes));
};

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

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.

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
# /etc/init.d/sysklogd restart

Terug naar: Uwork Support Infrastructuur