Wysyłanie logów z syslog-ng do bazy MySQL

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 |