Zapisywanie danych z rsyslog do bazy danych MySQL

Chcąc logować zdarzenia z syslog-a do bazy danych, potrzebujemy zainstalować serwer syslog, w omawianym przypadku jest to rsyslog oraz rsyslog-mysql, zawierający bibliotekę umożliwiającą rsyslogowi komunikację z serwerem MySQL.

W systemach RHEL/CentOS/Fedora wykonujemy to poleceniem

yum install rsyslog rsyslog-mysql

Po instalacji, polecam sprawdzić, czy mamy w systemie jakiś inny silnik sysloga, na przykład syslog, syslog-ng.

chkconfig --list | grep syslog

Jeżeli nic nie występuje, przechodzimy do konfiguracji.
Tabele i samą bazę utworzy nam plik createDB.sql, trzeba go znaleźć

find /usr/share/doc/ -name createDB.sql

Ponieważ serwer bazy danych mam na osobnym serwerze, kopiuję plik createDB.sql z loghost-a na serwer bazodanowy

scp /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql Uzytkownik@10.0.20.20:/home/Uzytkownik/

Teraz przestępuję do tworzenia kont użytkowników

Dla konfiguracji, gdy serwer bazodanowy jest osobną maszyną

mysql -u root
grant all privileges on  Syslog.* TO 'syslog'@'10.0.20.20' identified by 'rsyslogpassword'; flush privileges; commit; quit;

Gdy jest tą samą maszyną

mysql -u root
grant all on Syslog.* TO 'syslog'@'localhost' identified by 'rsyslogpassword' ; flush privileges; commit; quit;

do pliku ogólnego konfiguracyjnego rsysloga /etc/rsyslog.conf dopisujemy linię ładującą moduł, który doinstalowaliśmy ommysql

$ModLoad ommysql

Łatwo też sprawdzić, czy na pewno ten moduł był w tej paczce

yum provides */ommysql.so

Tworzymy jeszcze konfigurację, aby serwer rsyslog korzystał z bazy danych i wysyłał tam wszystkie dane

echo '*.* :ommysql:10.0.20.20,Syslog,syslog,rsyslogpassword' > /etc/rsyslog.d/Database.conf

i restartujemy usługę

service rsyslog restart

dla testu zrestartuję też usługę ntpd

service ntpd restart

Logujemy się do serwera mysql i weryfikujemy, czy pojawiły się jakieś wpisy

mysql -u root 
use Syslog
select ID,ReceivedAt,DeviceReportedTime,FromHost,Message from SystemEvents LIMIT 2;

Działa.

Jeszcze sprawdzam czy inne serwery logują do serwera. Jak skonfigurować loghost i serwery logujące do niego, opisałem poprzednio, link dostępny jest tutaj.

select ID,ReceivedAt,DeviceReportedTime,FromHost,Message from SystemEvents  WHERE FromHost='PRD-1G-FW' LIMIT 2;

Również działa.

| 53 | 2014-09-13 18:52:07 | 2014-09-13 18:52:07 | PRD-1G-FW | password check failed for user (Uzytkownik)   |
| 54 | 2014-09-13 18:52:07 | 2014-09-13 18:52:07 | PRD-1G-FW | pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=89.72.135.243 user=Uzytkownik |