これずっとうまく動かなかったんだけど、やっとわかったよ。
ログホストに全部送る
source src { unix-stream("/dev/log"); internal(); }; destination loghost { udp("loghost" port(514)); }; log { source(src); destination(loghost); };
ログ受け取るほうはこれだけでいいよ。
source net { udp(ip("0.0.0.0") port(514)); }; destination hosts { file("/var/log/HOSTS/$HOST/$YEAR/$MONTH/$DAY/$FACILITY$YEAR$MONTH$DAY" owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)); }; log { source(net); destination(hosts); };
なるほどねぇ。
でもさ、仕方ないのかな、ホスト名がFQDNじゃないから、同じホスト名だとかなり厳しいものがある。
俺の管理してるマシンはドメインが違って、全部ホスト名nsだったりして…
$FULLHOSTっていうマクロもドキュメントにあったけど、実装されてないぽい。
空になるもの…
ちなみにsyslog-ngはホストごとに振り分けられるだけじゃなくて、
- プログラムの名称(正規表現match)
- ログの内容の正規表現match
- UDPじゃなくてTCP接続の使用
- 当然ポート指定可能なのでstunnelとか通せる
- pipeやプログラムにもログ渡せるよ
って感じぽいです。
動いてみれば、かなり素敵。