既存のwindows用のsyslogクライアントはオープンソースじゃなかったり、有料だったり、windowsのEventLogを全部転送してくれるんだけどEventLogへの書き込みに管理者権限が必要だったりで手軽に使えるものが無かったので作った。
syslogにちょっと書き込みたいだけなのに色んなツール組み合わせないとならないのがおかしい。

Syslog Client for Windows


https://github.com/shokai/syslog-client-for-windows

不具合などは@shokaigithubのissueにお願いします

使い方


syslog-client.exeをダウンロードして適当にPATHの通っている場所(C:¥windows¥system32¥とか?)に置いてから

% syslog-client -help
% syslog-client -host syslog.example.com hello world
% syslog-client -host syslog.example.com hello world -tag WARN -pid 100

このようにsyslogに書き込んでくれる。syslog-ngにちゃんと書き込めてたし、その出力をfluentd経由でMongoDBに読み込ませたりもやってる。


例:ログイン・ログアウトした時にユーザー名を送信する


こういう login.bat を作って
syslog-client -host syslog.example.com -tag INFO "%username% login at %COMPUTERNAME%"

Windowsスタートメニューの「ファイル名を指定して実行」から、「gpedit.msc」を起動。
ユーザーの構成→Windowsの設定→スクリプト(ログオン/ログオフ)に、bat追加すると実行してくれる

引数つけて実行するだけでsyslog飛ばせるので便利万歳だと思う。


実装

Rubyで書いてocraでexeに固めた。

ocraはrubyスクリプトをインタプリタごと1つのexeに固めてくれるソフトで、gemで提供されている。
% gem install ocra
% ocra myapp.rb
するとmyapp.exeができる。ファイルサイズはだいたい2MBぐらいになる。

WinXPでビルドして、Windows7と8でも動いた。よく出来てる。

Rubyで書いたので、exeに固める前のライブラリ部分をTravis CIでテストできるのも精神的衛生上良かった。


windows8ってsystem32に置けないの?

C:¥windows¥system32¥に置くと
Fatal error: Failed to open executable ~~
というようなエラーがでて起動しないんだけど、どこに置くのが作法なのかよくわからない。他の場所に置いてフルパスで実行すればちゃんと動く。