W poprzednim wpisie opisałem prostą konfigurację zbierania logów przez syslog-ng z innych hostów, teraz czas na wrzucenie tych logów do bazy danych.
Nasz serwer wymaga kilku dodatkowych bibliotek, aby syslog-ng mógł wykorzystywać moc SQL-a. Ponieważ używa libdbi, można bez przeszkód korzystać z MySQL, PostgreSQL oraz SQLite-a.
yum -y install libdbi-drivers syslog-ng-libdbi libdbi-dbd-mysql
Po doinstalowaniu wymaganych paczek, czas na utworzenie konfiguracji syslog-ng, aby potrafił poradzić sobie z MySQL-em.
destination d_mysql { sql( type(mysql) username("syslogng") password("syslogngpass") host("10.1.71.24") database("syslogng") table("syslogng") columns("server","date","time","program","msg") values("$HOST","$YEAR-$MONTH-$DAY","$HOUR:$MIN:$SEC","$PROGRAM","$MSG") indexes("date","time","server","$message") ); }; log { source(net); destination(d_mysql); };
Powyżej ustawiliśmy pewne dane do logowania, teraz trzeba utworzyć bazę danych, tabele i użytkownika, który z tych danych skorzysta.
CREATE DATABASE `syslogng`; USE syslogng; CREATE TABLE `syslogng`( `id` bigint(24) UNSIGNED NOT NULL AUTO_INCREMENT, `server` varchar(48) DEFAULT NULL, `date` date DEFAULT NULL, `time` time DEFAULT NULL, `program` varchar(30) DEFAULT NULL, `msg` text, PRIMARY KEY (`id`), KEY `date` (`date`), KEY `time` (`time`), KEY `server` (`server`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; grant all privileges on syslogng.* TO 'syslogng'@'10.1.71.46' identified by 'syslogngpass'; commit; FLUSH PRIVILEGES;
Po utworzeniu bazy i dostępów, restartujemy syslog-ng, jeżeli wszystko jest ustawione poprawnie, powinien się bez problemu uruchomić ponownie
service syslog-ng restart
Ponieważ u mnie się zrestartował, loguję się do serwera bazy danych i wykonuję zapytanie, żeby zweryfikować, czy pojawiają się tam już jakieś zdarzenia
mysql -u root -p use syslogng select * from syslogng LIMIT 1;
U mnie wszystko działa
| 1 | TEST001| 2014-09-17 | 19:24:00 | sshd | Failed password for invalid user root from 61.xxx.51.206 port 43773 ssh2 |