構成
web1、web2のtomcatのログをcollect1に送り最終的にS3へ転送する設定をメモがてら記述します。
ログ送信側(web1、web2)の設定
前提:tomcatをインストール済み
1.td-agentをインストール
curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
2.td-agentがログにアクセスできるようにtomcatログのgroupを変更
# chgrp td-agent /var/log/tomcat8/
3.書き込み権限は不要なので外しておく(※省略可)
# chmod g-w /var/log/tomcat8/
4.confに転送設定を記述する
下記の設定はjson形式で吐き出したカスタムデータ(sample.json)をmatch内のserverに
転送する設定となっています。
matchに記載されている属性とsourceのtagで関連付けしています。
match-serverに指定しているportはfluentdのデフォルトのポートを指定しています。
受信側と同じようになるように設定してください。
<source>
type tail
format json
path /var/log/tomcat8/sample.json
tag tomcat.sample
pos_file /var/log/td-agent/sample.pos
</source>
<match tomcat.**>
type forward
<server>
host collect1のIPアドレスを指定
port 24224
</server>
</match>
5.td-agentを起動します。
# /etc/init.d/td-agent start
※起動に失敗するようでしたら、下記コマンドでログを確認してください。
cat /var/log/td-agent/td-agent.log
ログ受信側(collect1)の設定
ここでは収集サーバ用に新規でEC2を立ち上げることを前提に記述しています。
EC2インスタンスの設定
・IAMロール(AmazonS3FullAccessなどs3に書き込み可能な権限付き)※後付け不可、インスタンスの作成時につけること
・セキュリティグループにlistenするポート(ここでは24224)をカスタム__UDP__で許可するように設定追加
※fluentd間がUDPでメッセージやりとりするため
1.td-agentをインストール
※out_s3プラグインは始めから含まれているようなので別途インストールは不要です。
2.confに転送されてきたログをS3にアップロードする設定を記述する
送信側でタグをtomcat.〜という形式で定義しているのでmatchでtomcatが引っかかるように設定してます。
s3_bucketにBucket名を設定してください。
なお、設定はリージョンが東京のものです。Tokyoと書いても設定できませんので正確な名称?を指定してください。
対応表はこちらを参照してください。
buffer_pathにはs3に持って行く前のログをバッファリングしておくパスを定義しておきます。
送信側からのデータを正しく受信できれば/tmp/fluent/s3****.logみたいな形でログが出力されています。
またs3への転送が成功すれば/tmp/fluentの下はクリアされます。
<source>
type forward
port 24224
</source>
<match tomcat.**>
type s3
s3_bucket sample-s3(ログをアップロードするs3の名称)
s3_region ap-northeast-1
s3_object_key_format %{path}%{time_slice}/%{index}.%{hostname}.%{file_extension}
path logs/
buffer_path /tmp/fluent/s3
time_slice_format %Y%m%d-%H
time_slice_wait 1m
<instance_profile_credentials>
retries 5
</instance_profile_credentials>
</match>
いうまでもないことですが、最低限の設定なのでIAMロールの設定や穴あけなどはきちんと設計して設定する必要があります。
3.td-agentを起動します。
# /etc/init.d/td-agent start
これで送信側のサーバにアクセスしログを更新すると1時間くらい経過するとsample-s3のlogs配下にgzで圧縮されたログがアップロードされるようになります。