ログ集約・収集について【syslog-ng - 収集】

これは、連載のような記事です。

syslog - 集約

syslog-ng - 集約

syslog-ng - 収集 <= いまココ

と見ると一番分かりやすいです。収集・集約の言葉の定義も分かります。


ログの収集についておさらい

サーバ/インフラを支える技術に定義されている収集とは

各サーバ上に出力されたログを定期的に集め、保存すること。

つまり、「普段は【各サーバ上】にある」というところがポイントです。集約・収集の言葉の定義についてはこちらで確認してください。


前回(syslog-ng - 集約)は、lighttpdのログをログサーバに転送して、ローカルには残さない設定をしていました。
それを、ローカルにもログを残すように設定します。


転送元(192.168.0.50)のsyslog-ngの設定

syslog-ngの設定(/opt/syslog-ng/etc/syslog-ng.conf)

@version: 3.0

source s_local { file ("/proc/kmsg" program_override("kernel: ")); unix-stream("/dev/log"); internal(); };

#destination d_console  { pipe("/dev/console"); };
destination d_messages { file("/var/log/messages"); };
destination d_authlog  { file("/var/log/secure"); };
destination d_maillog  { file("/var/log/maillog");};
destination d_cron     { file("/var/cron/log"); };
destination d_alluser  { usertty("*"); };
destination d_spooler  { file("/var/log/spooler"); };
destination d_local7   { file("/var/log/boot.log");};
destination d_loghost  { udp("loghost");};
destination d_lighttpd_local { file("/var/log/siteA.lighttpd.access.${YEAR}${MONTH}${DAY}.log"); };

#filter f_console  { facility(kern) and level(debug..emerg)};
filter f_messages { level(info) and
                    not facility(mail) and
                    not facility(authpriv) and
                    not facility(cron) and
                    not facility(local6) and level(info);
                  };
filter f_authlog  { facility(authpriv) and level(debug..emerg); };
filter f_maillog  { facility(mail) and level(debug..emerg); };
filter f_cron     { facility(cron) and level(debug..emerg); };
filter f_alluser  { level(emerg); };
filter f_spooler  { facility(uucp) and level(crit) or
                    facility(news) and level(crit);
                  };
filter f_local7   { facility(local7) and level(debug..emerg); };
filter f_lighttpd_log  { facility(local6) and level(info); };

#log { source(s_local); filter(f_console);  destination(d_console); };
log { source(s_local); filter(f_messages); destination(d_messages); };
log { source(s_local); filter(f_authlog);  destination(d_authlog); };
log { source(s_local); filter(f_maillog);     destination(d_maillog); };
log { source(s_local); filter(f_cron);     destination(d_cron); };
log { source(s_local); filter(f_alluser);  destination(d_alluser); };
log { source(s_local); filter(f_spooler);  destination(d_spooler); };
log { source(s_local); filter(f_local7);  destination(d_local7); };
log { source(s_local); filter(f_lighttpd_log);  destination(d_loghost); };
log { source(s_local); filter(f_lighttpd_log);  destination(d_lighttpd_local); };

ポイントは、
ログの保存場所を2つ指定します。ログサーバとローカルです。

destination d_loghost  { udp("loghost");};
destination d_lighttpd_local { file("/var/log/siteA.lighttpd.access.${YEAR}${MONTH}${DAY}.log"); };

filterは、local6.info を使います。

filter f_lighttpd_log  { facility(local6) and level(info); };

そして、ログを吐く設定で

log { source(s_local); filter(f_lighttpd_log);  destination(d_loghost); };
log { source(s_local); filter(f_lighttpd_log);  destination(d_lighttpd_local); };

とすれば、lighttpdが logger -p local6.info へ吐くログは、ログサーバとローカルへ保存されます。
ログサーバの設定変更はありません。


これで、各サーバにたまったログを定期的に収集すればOKです。