12月262013
0
既存のwindows用のsyslogクライアントはオープンソースじゃなかったり、有料だったり、windowsのEventLogを全部転送してくれるんだけどEventLogへの書き込みに管理者権限が必要だったりで手軽に使えるものが無かったので作った。
syslogにちょっと書き込みたいだけなのに色んなツール組み合わせないとならないのがおかしい。
Syslog Client for Windows
https://github.com/shokai/syslog-client-for-windows
不具合などは@shokaiかgithubの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するとmyapp.exeができる。ファイルサイズはだいたい2MBぐらいになる。
% ocra myapp.rb
WinXPでビルドして、Windows7と8でも動いた。よく出来てる。
Rubyで書いたので、exeに固める前のライブラリ部分をTravis CIでテストできるのも精神的衛生上良かった。
windows8ってsystem32に置けないの?
C:¥windows¥system32¥に置くとFatal error: Failed to open executable ~~というようなエラーがでて起動しないんだけど、どこに置くのが作法なのかよくわからない。他の場所に置いてフルパスで実行すればちゃんと動く。