Ve Fedoře je již nějaký čas místo původního syslogu používán rsyslog. Původní syslog se mi nikdy nepodařilo nakonfigurovat podle svých představ, proto jsem to jako nedůležité odkládal "do budoucna". A ta budoucnost přišla právě s rsyslogem. V CentOSu je stále používán původní syslog, ale naštěstí je možné rsyslog doinstalovat. Dnes používám rsyslog jak na Fedoře, tak i v CentOSu.
Část mého rsyslog.conf:
#### MODULES ####
$ModLoad imuxsock.so<--># provides support for local system logging (e.g. via logger command)
$ModLoad imklog.so<----># provides kernel logging support (previously done by rklogd)
$ModLoad immark.so<----># provides --MARK-- message capability
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp.so..
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#### RULES ####
$template mt_info, "/var/log/mikrotik/%HOSTNAME%/info.log"
$template mt_warning, "/var/log/mikrotik/%HOSTNAME%/warning.log"
$template mt_error, "/var/log/mikrotik/%HOSTNAME%/error.log"
$template mt_firewall, "/var/log/mikrotik/%HOSTNAME%/firewall.log"
#if $programname == 'flow-capture' then /var/log/flow-capture.log
if $programname == 'flow-capture' then ~
if $programname == 'snmpd' then /var/log/snmpd.log
if $programname == 'snmpd' then ~
if $fromhost-ip == '172.30.100.12' then /var/log/servery/storage.primary.log
if $fromhost-ip == '172.30.100.12' then ~
if $fromhost-ip == '172.30.100.18' then /var/log/servery/mysql.master.log
if $fromhost-ip == '172.30.100.18' then ~
if $fromhost-ip == '213.180.44.10' and $rawmsg contains 'dovecot' then /var/log/servery/mailserver.dovecot.log
if $fromhost-ip == '213.180.44.10' and $rawmsg contains 'dovecot' then ~
if $fromhost-ip == '213.180.44.10' and $rawmsg contains 'postfix' then /var/log/servery/mailserver.postfix.log
if $fromhost-ip == '213.180.44.10' and $rawmsg contains 'postfix' then ~
if $fromhost-ip == '213.180.44.10' then /var/log/servery/mailserver.log
if $fromhost-ip == '213.180.44.10' then ~
if $syslogfacility == '3' and $rawmsg contains ' error: ' then /var/log/mikrotik/error.log
if $syslogfacility == '3' and $rawmsg contains ' info: ' then ?mt_info
if $syslogfacility == '3' and $rawmsg contains ' warning: ' then ?mt_warning
if $syslogfacility == '3' and $rawmsg contains ' error: ' then ?mt_error
if $syslogfacility == '3' and $rawmsg contains ' firewall: ' then ?mt_firewall
if $syslogfacility == '3' then ~
Na začátku je seznam povolených modulů, já používám i "markování", takže je povolen modul immark.so. Vzdálené logování provádím jen přes UDP, proto je sekce "TCP" zakomentovaná.
Zajímavé to začne být až v sekci "rules". Nejprve jsou nadefinovány čtyři šablony, ve kterých je určeno jméno výsledného logu, kde každý vzdálený zdroj si vytvoří svůj vlastní adresář dle hostname (zde použito pro routery Mikrotik).
Následuje sekce vlastních podmínek. Seznam výrazů, které je možné použít v podmínkách jsem nikde nenalezl, ale domnívám se, že by měl odpovídat seznamu "properties", pouze s přidáním znaku $ - alespoň u mnou použitých podmínek to tak odpovídalo. Zápis podmínek v tomto tvaru je mi velice sympatický a lehce pochopitelný a myslím, že nepotřebuje moc komentářů. Pouze v poslední části, kde se volají nadefinované šablony, je vyhodnocována facility na hodnotu 3, pod kterou jsou odesílány logy z Mikrotiků. Nejprve je založen "celkový" error-log s přehledem chybových hlášení od všech routerů, teprve potom se logy třídí dle prefixů "info, warning, error, firewall".
Nastavení vzdáleného logování a i zvolených prefixů se v Mikrotiku buď "nakliká" ve winboxu (system - logging, záložky "Action" a "Rules"):
nebo jednodušeji a rychleji přes příkazový řádek (cut & paste):
/system logging action
set remote bsd-syslog=yes name=remote remote=172.30.100.30:514 syslog-facility=daemon syslog-severity=auto target=remote
/system logging
add action=remote disabled=no prefix=info topics=info,!ppp,!firewall
add action=remote disabled=no prefix=warning topics=warning
add action=remote disabled=no prefix=firewall topics=firewall
add action=remote disabled=no prefix=error topics=error
(jako prefixy jsem použil stejné výrazy, které Mikrotik používá v "topics", ale samozřejmě, že je možné zvolit vlastní).
Pro vzdálené logování z linuxových serverů je postup stejný, jako u původního syslogu - do /etc/rsyslog.conf se na konec souboru přídá řádek
*.*;mail.none @172.30.100.30
nebo
*.* @172.30.100.30