Pages

2011/04/05

syslog-ngを使ってフリーダムなsyslogを:json編

syslog-ngでは、syslog,rsyslog※に比べてログの出力を比較的容易にカスタマイズできる。

※基本的にRFC3164に準拠

確かにSyslogはパースしにくい、ならたとえばjsonで出してしまうというのはどうか。

 

こんなテンプレートになるかな。
template t_json {
template("\{\"unixtime\":\"$UNIXTIME\", \"facility\":\"$FACILITY\", \"priority\":\"$PRIORITY\", \"host\":\"$HOST\", \"msg\":\"$MSG\"\}\n");
template_escape(yes);
};


修正:この場合template_escapeはYesのほうがいい。


使ってみよう。destinationにtemplateを適用して、logを定義するだけだ。
filter f_all {level(debug..emerg);};
template t_json {
template("\{\"unixtime\":\"$UNIXTIME\", \"facility\":\"$FACILITY\", \"priority\":\"$PRIORITY\", \"host\":\"$HOST\", \"msg\":\"$MSG\"\}\n");
template_escape(yes);
};

destination d_json_file {
file("/var/log/sysjson.log" template(t_json));
};

log {
source(s_src);
filter(f_all);
destination(d_json_file);
};

※s_srcはubuntuパッケージ版のデフォルトソース
 


ログファイルにはこのように出力される。
{"unixtime":"1301974448", "facility":"syslog", "priority":"notice", "host":"prox01", "msg":"syslog-ng starting up; version='3.1.2'"}


おおお・・・さすがは (syslog)-"next generation"
 

0 件のコメント:

コメントを投稿