以前 rsyslog で名前付きパイプにログを吐き出す設定の仕方を書いておいたのだけど、syslog-ng での設定の仕方も最近仕事でやったのでメモ的にエントリーしとく。
rsyslog の omsnmp モジュールでは、やりたいことには微妙に足りない感じなので、何か代替案はないかとドキュメントを漁ったりググってみた結果、名前付きパイプ経由でやればいいのでは、という結論に達したので、実際に試してみた。
[From rsyslog から名前付きパイプ経由で出力したログを snmptrap で飛ばす - Soukaku's HENA-CHOKO Blog]
インストールについては、今回の本題でないので、以下のところを参考にどうぞ。( CentOS/RHEL の場合)
CentOS 6 標準の syslogd は rsyslog なんだけど、CentOS 5 の頃に syslog-ng を使ってたので、それに切り替える手順。番号が連続してないけど気にしない。
[From CentOS 6.2 の syslog を syslog-ng にする - ..たれろぐ..]
さて設定ですが、syslog-ng の場合は /etc/syslog-ng/syslog-ng.conf
に、ログの出力先とログ出力時のフィルタを決めて上げればいいわけですが、名前付きパイプに facility の local5 のログを出力するだけの最低限の設定は以下のとおり。
#今使っている設定に、 destination と filter と log を追加でも、勿論大丈夫。
options {
flush_lines (0);
time_reopen (10);
log_fifo_size (1000);
long_hostnames (off);
use_dns (no);
use_fqdn (no);
create_dirs (no);
keep_hostname (yes);
};
source s_sys {
file ("/proc/kmsg" program_override("kernel: "));
unix-stream ("/dev/log");
internal();
# udp(ip(0.0.0.0) port(514));
};
destination d_pipe { pipe("/tmp/log2pipe.log"); };
filter f_pipe { facility(kern); };
log { source(s_sys); filter(f_pipe); destination(d_pipe); };
あとは、"mkfifo /tmp/log2pipe.log
" を実行して名前付きパイプを作成 → syslog-ng 起動( or 再起動)と。
"cat /tmp/log2pipe.log
" で想定通りのログが出力されていることが確認出来たら、あとはスクリプトで出力結果を操作するなりなんなりと、ご自由に。
コメントする