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 |