EC2 Windowsインスタンスにfluentdを導入してログファイルをS3に保存する

Windowsにfluentdを導入するという記事があまりに少ない・ヒットしないのでメモ書き。そもそもAWSWindows使ってる人・案件少ないのかな?

インストー

基本的に以下のリンクの内容でインストールできる。キャプチャも貼ってあるので丁寧だ。

sqlazure.jp

手順詳細

インストールがうまくいかなかったり、導入してもうまく動作しなかったり、いろいろうまくいかないことは世の常(というよりWindows + Ruby環境は昔から魔窟である印象)なので手順の詳細を以下に書きました。 概ね以下のような手順となる。

  1. rubyをインストー
  2. DevKit-mingwをインストー
  3. gitをインストー
  4. fluentdをインストー
  5. fluentdのプラグインをインストー
  6. fluentdをサービス登録
  7. fluentdの設定ファイルを設定
  8. fluentdを起動

gemからfluentdをインストールすることになるのですがうまくいきませんでした。gemを最新版にアップデートしてfluentdをインストールすればよいのですが、今度はgemをアップデートするのに躓きます。このあたりはrubyあるあるのようです。以下の手順で解決しました。

@rem gem install でエラーとなるのでgemを最新に更新
cd C:\
C:\>gem -v
2.5.1
@rem Rubygemsを最新バージョンにする。
@rem アップデートはgemで取れるが、上で示した通りhttpsは通らないので、httpを指定して取る。
@rem セキュアな方法ではないのであまりオススメしません。どうしても気になるor組織の都合上許されない人はgemの手動ダウンロードからのインストールを試みてください
C:\>gem install rubygems-update --source http://rubygems.org/
@rem 出力省略
C:\>update_rubygems
@rem 出力省略
C:\>gem -v
2.6.7

またWindowsに対応したfluentdのバージョンは0.14以上となります。gemでなにも指定しないと0.12が入ったりするようなのでバージョンを指定してインストールします。

@rem fluentdインストール
C:\>git clone https://github.com/fluent/fluentd.git
C:\>cd fluentd
C:\fluentd>gem install bundler
C:\fluentd>bundle
C:\fluentd>bundle exec rake build
@rem fluentd 0.14.13 built to pkg/fluentd-0.14.13.gem.
@rem pkg配下にgemが作られるのでそれを指定してインストール
C:\fluentd>gem install pkg\fluentd-0.14.13.gem --no-ri --no-rdoc

プラグインについてもfluentd 0.14に対応したものをインストールします。「fluent-plugin-ec2-metadata」は名前の通りEC2のメタデータインスタンスIDとかタグとか)を取得するプラグインで「v0.1.0」以上がそれに当たるようです。「fluent-plugin-s3」はこちらも名前の通りS3を操作(アップロード)するプラグインで「1.0.0」以上をインストールする必要があります。

@rem pluginインストール
C:\fluentd>gem install fluent-plugin-ec2-metadata -v 0.1.0 --no-document
C:\fluentd>gem install fluent-plugin-s3 -v 1.0.0.rc2 --no-document

そして起動、と行きたいところですがこのまま起動するとS3へアップロードの段でSSLエラーが発生するので以下より証明書をダウンロードし任意の場所に設置、環境変数SSL_CERT_FILE」へパス設定する。

@rem https://github.com/bagder/ca-bundle より「ca-bundle.crt」をダウンロード
C:\>mkdir C:\ruby\certs
@rem ca-bundle.crt を設置
C:\ruby\certs\ca-bundle.crt
@rem システム環境変数に設定
@rem 変数名: SSL_CERT_FILE
@rem 変数値: C:\ruby\certs\ca-bundle.crt

fluentd をWindowsのサービスとして登録、またオプションも指定します。それぞれのパスは環境に応じて適宜変更してください。

@rem fluentdをWindowsのサービスとして登録
C:\>fluentd --reg-winsvc i
@rem fluentdを設定
C:\>fluentd --reg-winsvc-fluentdopt '-c C:/fluent/fluent.conf -o C:/fluent/log/fluent.log'

fluentd の設定ファイルを設定する(C:/fluent/fluent.conf)

(S3に保存するログファイルを指定、AutoScalingを設定する場合はS3のオブジェクトキー[パス]にインスタンスIDを加えるなど工夫が必要になります。後追いで記述。)

Windowsのサービスからfluentdを起動します。AutoScalingなインスタンスの場合は自動起動設定もお忘れなく。

総評

動作はひととおり確認してちゃんとS3に保存されていました。ただはじめにも書きましたが記事などがあまりないのと、fluentd0.14がまだあまり浸透していないせいなのかプラグインの状況や設定ファイルの記述方法についても情報が乏しく少し苦労しました。公式ドキュメントを熟読した上で設定触りながら動作確認したり、時にはソースコードを覗いたりするのがいいかもしれません。(意外と?中身はシンプルな作りでした)

参考

fluentd 0.14

Fluentd v0.14.0 has been released | Fluentd

Updating plugin for v0.14 from v0.12 | Fluentd

Fluentd Meetup 2016 Summer レポート 〜 v0.14 の新機能からプラグイン開発者向け API まで - 無印吉澤

Windows + fluentd, rubyとか

Fluentd が Windows を正式サポートしたので動かした - 蒼の王座・裏口

EC2のログをfluentdを使ってタグ情報を利用したフォルダ構成でS3にアップロードする - Qiita

windowsにfluentdをインストールする手順 - Qiita

fluentd Windows版をWindowsサービスとして動かす - Qiita

Windows環境でgemがSSLエラー 2016 - Qiita