この記事は2016年2月ぐらいに書いて、ずっと下書きのまま放置されてたものです。
確かあとでログとかキャプチャとかを貼ろうとしてて・・・。
現時点で Windows + fluentd → CloudWatch Logs が快適に使えるかどうかは分かりませんが、誰かがコメントくれたりする僅かな可能性もあるかと思い公開します。
AWSのEC2のWindowsにはEC2ConfigというServiceがあり、それを使うとEventLogやIISのログ、任意のアプリケーションログなどをCloudWatch Logsに送ることができます。
しかし現時点では、送信時の形式など柔軟性がいまひとつといった印象です。
Linuxではデータコレクタのfluentd(td-agent)を使ってCloudWatch Logsに送るということもよくやられてるようです。
2015年10月8日にfluentdがWindowsに正式対応したとのことなので、WindowsでもLinuxと同じようにできるか試してみました。
ちなみに僕はfluentdに初めて触りました。
Windowsへfluentdインストール
使用したのはAWSのWindows Server 2012 R2(EC2, Amazon AMI, 英語版)です。
基本的にはこのサイトに書かれている手順で行いました。
【参考】Fluentd が Windows を正式サポートしたので動かした
検証時のRubyバージョンは2.2.4でした。
起動して標準出力にログがポロポロ出てくるのが確認できました。
「お、なんかいい感じじゃん」
fluentdプラグインインストール
fluent-plugin-winevtlog
EventLogの収集もしたかったのでfluent-plugin-winevtlogも試しました。
gem install fluent-plugin-winevtlog
でインストール。configにEventLogを収集するsourceディレクティブを書いて実行してみるとエラーになりました。
うーむ。なんだかエラー文の中のファイルパスがLinuxっぽい。
どうやらプラグインのインストールと同時にfluentdの別バージョンを参照するようになってしまったらしい。
【参考】人生楽しまなきゃもったいない!: fluentdをWindowsで使う
こちらの記事を参考にfluentdをアンインストールして再度実行すると無事EventLogを収集することができました。
「まぁ、うん。いいだろ」
fluent-plugin-cloudwatch-logs
CloudWatch Logsにデータを送るのが最終的な目的です。
fluent-plugin-cloudwatch-logsをインストールしました。
案の定、別バーションがインストールされてしまうのでアンインストール。
configにCloudWatch Logsへ送るmatchディレクティブを書いて実行!
エラーです。
僕はRubyはよくわかりません。
Fluent::SetTimeKeyMixin
が初期化できないっぽいです。
僕はRubyはよくわかりません。
モジュールが足りてないっぽいです。
僕はRubyは(ry
いろいろ調べたりして最終的にはfluent-plugin-cloudwatch-logs-0.2.0\lib\fluent\plugin\out_cloudwatch_logs.rb
の1行目に以下を追記すると起動することができました。
require 'fluent/mixin'
「ここまで手を加えないといけないもんか!?」
さらなるエラー、そして諦念
起動はできるようになったものの、肝心のCloudWatch Logsへの送信がうまくいってないようでエラーです。
fluentdもRubyも経験値が足りなすぎてここまで来るのに結構時間かかってしまったこともあり、もう調べる気力がなくなりました。
「もうEC2Configでいいかなー」
まとめ
サクッと「Windows + fluentd → CloudWatch Logs」をやるにはいろいろ時期尚早なのかも。