Portál AbcLinuxu, 30. dubna 2025 23:32
Syslog-NG je nástroj na centralizovanú správu logov. Logy môžu pochádzať z rôznych zdrojov(source) - zariadenie, súbor, vzdialený stroj vysielajúci UDP packety na určitom porte … Podľa konfigurácie sa správy zo zdrojov posielajú do zvolených cieľov(destination).
Vzťahy medzi zdrojmi a cieľmi majú kardinalitu M:N tj. jeden cieľ môže mať viacej zdrojov a zároveň jeden zdroj môže byť priradený viacerým cieľom. Vzťah sa vyjadruje v konfiguračnom súbore Syslog-NG príkazom log. Voliteľne môže byť pri definícii vzťahu použité filtre (príkaz filter).
Konfiguračný súbor Syslog-NG sa obyčajne nachádza na adrese /etc/syslog-ng/syslog-ng.conf
. Obvykle obsahuje direktívu options
ovplyvňujúcu správanie Syslog-NG. Štandardné nastavenia sú pre väčšinu prípadov postačujúce. Ja používam nasledujúce nastavenia:
options { # jednoduchý formát hostname chain_hostnames(no); # vypnutie logovania STATS, štandardne je čas nastavený na 10 minút stats_freq(0); # vypnutie logovania MARK mark_freq(0); };
Zdroje logov sa v konfiguračnom súbore zapisujú direktívou source
. Nasledujúci kód nastavuje ako interný (lokálny) zdroj unixový socket /dev/log
. Spravovať logy je samozrejme možné aj z viacerých zdrojov súčasne napr. z UDP portu pre spracovanie logov z routra.
source src { unix-stream("/dev/log" max-connections(256)); internal(); file("/proc/kmsg"); }; # Sieťový zdroj logov napr. router # source src_router { udp(); };
Ciele sú nastavené direktívou destination
. Cieľom môže byť súbor, zariadenie, port … Nasledujúce nastavenia sú ukážkou cieľov pre logovanie:
destination d_cron { file("/var/log/crond.log"); }; destination d_kernel { file("/var/log/kernel.log"); }; destination d_messages { file("/var/log/messages.log"); }; destination d_errors { file("/var/log/errors.log"); };
Aby sme mohli logy roztriediť do rôznych cieľov musíme definovať pravidlá, na základe ktorých budú správy triedené. Tie sa zapisujú kľúčovým slovom filter
. V nasledujúcom príklade je použitých niekoľko spôsobov definície filtrov a ich kombinácie.
# Filtrovanie správ obsahujúcich IN= a OUT= filter f_iptables { match("IN=" value("MESSAGE")) and match("OUT=" value("MESSAGE")); }; # Správy pochádzajúce od cronu filter f_cron { facility(cron); }; # Správy pochádzajúce od kernelu, ale nepochádzajú od iptables filter f_kernel { facility(kern) and not filter(f_iptables); }; # Správy úrovne info - varovanie nepochádzajúce od cronu ani od iptables filter f_messages { level(info..warn) and not facility(cron) and not program(/usr/sbin/cron) and not filter(f_iptables); }; # Varovania až kritické správy filter f_warn { level(warn); }; filter f_crit { level(crit); }; filter f_err { level(err); }; filter f_emergency { level(emerg); };
Po nastavení zdrojov a filtrov môžme konečne prejsť k prepojeniu zdrojov s cieľmi. To dosiahneme použitím direktívy log
.
log { source(src); filter(f_cron); destination(d_cron); }; log { source(src); filter(f_kernel); destination(d_kernel); }; log { source(src); filter(f_messages); destination(d_messages); }; log { source(src); filter(f_warn); destination(d_errors); }; log { source(src); filter(f_crit); destination(d_errors); }; log { source(src); filter(f_err); destination(d_errors); }; log { source(src); filter(f_emergency); destination(d_errors); };
Po úspešnej konfigurácii logovania do súborov môžme nakonfigurovať zobrazovanie logov na samostatnej konzole. Táto funkcia príde vhod v prípade, že často pracujete v konzole, alebo máte KMS, takže prepínanie z X do konzoly je veľmi rýchle. Konfiguráciu začneme deklaráciou cieľa.
destination console_all { file("/dev/tty12"); };
Voliteľne môžme definovať filter pre odstránenie správ, ktoré nie sú zaujímavé. Napríklad pre odstránenie cronu je možné použiť nasledujúci príkaz:
# Správy určené pre konzolu (všetko okrem cron-u) filter f_console_all { not facility(cron) and not program(/usr/sbin/cron); };
Následne stačí už len prepojiť zdroj a cieľ a to nasledujúcim kódom:
# s použitím filtra log { source(src); filter(f_console_all); destination(console_all); }; # bez použitia filtra # log { source(src); destination(console_all); };
Po reštarte Syslog-NG by sa mali na 12. konzole (CTRL + ALT + F12) začať objavovať logy.
Program grcat sa obvykle nachádza v balíku grc
. Tento program pochádza zo Slovenska, čo je mimochodom patrné aj z jeho názvu . Jeho úlohou je čítať štandardný vstup a na štandardný výstup vypisovať pôvodný vstup ofarbený ANSII sekvenciami. Jediným parametrom programu je konfiguračný súbor (konfiguračné súbory sa vyhľadávajú obyčajne v adresári /usr/share/grc).
Pre použitie grcat na ofarbenie logov na tty12 stačí vymeniť nastavenie destination pre console_all za nasledujúci kód a po reštarte Syslog-NG sa môžme kochať farebnými výpismi
destination console_all { program("grcat conf.log gt; /dev/tty12"); };
Supercat a grc sú veľmi podobné projekty. Hlavný rozdiel medzi týmito nástrojmi je v použitom programovacom jazyku - grc je v pythone zatiaľ čo supercat v C. Pre mnohých ľudí môže byť práve výber jazyka prekážkou v nasadení.
Konfiguračné súbory grc a supercat sú medzi sebou navzájom nekompatibilné. Zatiaľ čo grc sa dodáva s konfiguračným súborom pre logy u supercat-u si musíme tento súbor vytvoriť. Ja som napísal jednoduchú konfiguráciu podobnú tej, ktorú používa grc:
HTML COLOR NAME COL A N T STRING or REGULAR EXPRESSION #################### ### # # # ################################################################ Magenta mag b ([0-9]{1,3}(\.[0-9]{1,3}){3}) Yellow yel b (`[^'`]*') Yellow yel b s WARNING Green grn b [[:space:]](/[^[:space:]&|;(){}]*) Green grn 1 (\([^)]*\)) Green grn (^...[ ]*[0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} ) Brown yel ^...[ ]*[0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} (\w*) Red red b ^...[ ]*[0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} \w* ([^ ]*): Blue blu b ^...[ ]*[0-9]{1,2} [0-9]{2}:[0-9]{2}:[0-9]{2} \w* [^ \[]*(\[\w*\])
Tento súbor je možné uložiť napr. ako /etc/supercat/syslog
. Zodpovedajúci príkaz destination v syslog-ng.conf
bude vyzerať nasledovne:
destination console_all { program("spc -c /etc/supercat/syslog > /dev/tty12"); };
Po dokončení konfigurácie by sme mali mať na 12. konzole pekne ofarbené výpisy ako v prípade použitia grc.
Nástroje ako supercat a grc nám samozrejme nič nebráni používať aj pri parsovaní logovacích súborov. Na zobrazovanie výpisov v reálnom čase sa dajú kombinovať s príkazom tailf napr.
tailf /var/log/messages|spc -c /etc/supercat/syslog
Tiskni
Sdílej:
sys-apps/udevil
), automount mi funguje i bez *kitu a jinych sracek :)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.