tr0nix
der-mit-dem-tux-tanzt
Hallo zusammen
Das hier ist keine Anfrage sondern ein HowTo. Ich habe ein HowTo fuer dieses Thema gefunden, es funktionierte jedoch mit einem Fifo-File und hatte viele Nachteile und war fuer mich zu instabil.
Vorraussetzungen:
Software:
mysql Client und einen Server
syslog-ng
Sonstiges:
syslog Datenbank-User (inkl. INSERT Permissions auf das gewuenschte Table)
mysqllog System-User (von Hand erstellen, Shell kann /bin/false sein)
/var/log/mysqllog (Gehoert mysqllog-User, Permissions des Directories 700)
/var/log/mysqllog/todo (Gehoert mysqllog-User, Permissions des Files 600)
mysqllog Cronjob (kommt weiter unten)
Ich gehe davon aus, ihr habt eine DB namens "syslog". Hier die Struktur des Tables "logs":
Hier die syslog-ng Konfiguration (einfach an bestehende attachen):
Anschliessend die Datei /usr/local/sbin/mysqllog.sh erstellen:
Optional koennt ihr noch den syslog-User Passwort schuetzen und das Script damit ergaenzen.
Nun den Cronjob fuer den User mysqllog erstellen:
Das Script laeuft schoen sauber unter einem technischen User und wer's ganz sicher will, schuetzt den syslog-DB User noch durch ein Passwort. So kann ein verteilter Serverpark an eine Zentrale Stelle loggen.
Wer mag, kann das ganze noch ein wenig tunen, indem er statt
echo "" > /var/log/mysqllog/todo
dies macht:
echo "use syslog;" > /var/log/mysqllog/todo
und bei der syslog-ng.conf - Datei bei den Templates das "use syslog" rausnimmt.
Ich bin dabei, noch Ueberpruefungen einzubauen, ob die DB da ist etc. aber so laeuft das ganze schonmal recht sauber!
gruss
Joel
Das hier ist keine Anfrage sondern ein HowTo. Ich habe ein HowTo fuer dieses Thema gefunden, es funktionierte jedoch mit einem Fifo-File und hatte viele Nachteile und war fuer mich zu instabil.
Vorraussetzungen:
Software:
mysql Client und einen Server
syslog-ng
Sonstiges:
syslog Datenbank-User (inkl. INSERT Permissions auf das gewuenschte Table)
mysqllog System-User (von Hand erstellen, Shell kann /bin/false sein)
/var/log/mysqllog (Gehoert mysqllog-User, Permissions des Directories 700)
/var/log/mysqllog/todo (Gehoert mysqllog-User, Permissions des Files 600)
mysqllog Cronjob (kommt weiter unten)
Ich gehe davon aus, ihr habt eine DB namens "syslog". Hier die Struktur des Tables "logs":
Code:
CREATE TABLE logs (
host varchar(32) default NULL,
facility varchar(10) default NULL,
priority varchar(10) default NULL,
level varchar(10) default NULL,
tag varchar(10) default NULL,
date date default NULL,
time time default NULL,
program varchar(15) default NULL,
msg text,
seq int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (seq),
KEY host (host),
KEY seq (seq),
KEY program (program),
KEY time (time),
KEY date (date),
KEY priority (priority),
KEY facility (facility)
) TYPE=MyISAM;
Hier die syslog-ng Konfiguration (einfach an bestehende attachen):
Code:
## Log syslog-ng to mysql database
destination d_mysql {
file("/var/log/mysqllog/todo" owner("mysqllog") group("adm") perm(0600)
template("[b]USE syslog[/b]; INSERT INTO logs (host, facility, priority, level, tag, date, time, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY', '$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") template-escape(yes));
};
log { source(src); destination(d_mysql); };
Anschliessend die Datei /usr/local/sbin/mysqllog.sh erstellen:
Code:
#!/bin/bash
# Write log into database
# 13.9.2004 - JW
/usr/bin/mysql -h localhost -u syslog < /var/log/mysqllog/todo
echo "" > /var/log/mysqllog/todo
Optional koennt ihr noch den syslog-User Passwort schuetzen und das Script damit ergaenzen.
Nun den Cronjob fuer den User mysqllog erstellen:
Code:
cronjob -u mysqllog -e
Code:
#Put logs into DB
* * * * * /usr/local/sbin/mysqllog.sh
Das Script laeuft schoen sauber unter einem technischen User und wer's ganz sicher will, schuetzt den syslog-DB User noch durch ein Passwort. So kann ein verteilter Serverpark an eine Zentrale Stelle loggen.
Wer mag, kann das ganze noch ein wenig tunen, indem er statt
echo "" > /var/log/mysqllog/todo
dies macht:
echo "use syslog;" > /var/log/mysqllog/todo
und bei der syslog-ng.conf - Datei bei den Templates das "use syslog" rausnimmt.
Ich bin dabei, noch Ueberpruefungen einzubauen, ob die DB da ist etc. aber so laeuft das ganze schonmal recht sauber!
gruss
Joel
Zuletzt bearbeitet: