はじめに
実務で、ローカルで稼働しているMac miniが複数台あるので、それをCloudWatchLogsへ集約したいという要望があったので、勉強がてらFluentDを使った時の備忘録的なアレです
色々、試行錯誤しながら試したので、同じくハマっている人の助けになればと思います
失敗パターン
td-agentを使って、CloudWatchLogsに転送させる設定をしようとしたが、ripperが足りない?せいか、以下のエラーが発生して、td-agent内包のRubyを使っているため、これ以上は自力解決が難しいと思い、断念
`require': cannot load such file -- ripper (LoadError)
やったこと
-
FluentD公式から、MacOS向けのtd-agent.dmgをDLして、セットアップ
https://docs.fluentd.org/installation/install-by-dmg -
CloudWatchLogsに飛ばすためのPluginは、ここからDL
https://github.com/fluent-plugins-nursery/fluent-plugin-cloudwatch-logs
README.md通りに、gem install fluent-plugin-cloudwatch-logs
を実行しても、td-agent自体が、そのものに内包されているRuby(2.4)を使用してるっぽいので、エラーになる
Starting td-agent: 2018-05-31 01:27:51 +0000 [error]: fluent/supervisor.rb:373:rescue in main_process: config error file="/etc/td-agent/td-agent.conf" error="Unknown output plugin 'cloudwatch_logs'. Run 'gem search -rd fluent-plugin' to find plugins"
td-agent
- td-agentを使っている場合は、td-agent-gemを使用して、インストールする
インストールコマンド
/opt/td-agent/usr/sbin/td-agent-gem install <プラグイン>
インストール済みリストを取得
/opt/td-agent/usr/sbin/td-agent-gem list
参考にしたリンク
成功パターン
td-agentだと、内包されているRubyを使う方法だったので、すでにインストールされてるRubyを使う方法を採用しました
下記を実行すると、CloudWatchLogsへ、自動的にログストリームが作成され、ログが出力されるようになりました
やったこと
- gem版のFluentDをインストール→セットアップ
# FluentDのインストール
$gem install fluentd -N
# セットアップ
$ fluentd --setup ./fluent`
- gemを使って、CloudWatchLogs-Pluginをインストール
# fluentd-cloudwatch-logs-pluginをインストール
gem install fluent-plugin-cloudwatch-logs
- fluentd.confファイルを編集
<source>
@type tail
path ./logs/logger.log
tag sample
<parse>
@type multiline
format_firstline /\[(\d{4}-\d{2}-\d{2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{1,3})\]/
format1 /^\[(?<logtime>\d{4}-\d{2}-\d{2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{1,3})\] \[(?<lebel>.*)\] (?<hoge>.*) - \[(?<title>.*)\] (?<message>.*)/
</parse>
</source>
<match sample>
@type cloudwatch_logs
log_group_name test
auto_create_stream true
use_tag_as_stream true
</match>
- IAM User Policyの設定
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:*",
"s3:GetObject"
],
"Resource": [
"arn:aws:logs:us-east-1:*:*",
"arn:aws:s3:::*"
]
}
]
}
- AWSのアクセスキーとシークレットキーを環境変数に登録
export AWS_REGION=us-east-1
export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY"
export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"
-
fluentdを起動&停止
-
起動
fluentd -c ./fluent/fluent.conf -o ~/Desktop/tmp/fluentd.log -vv &
-
停止
pkill -f fluentd
-
まとめ
初めてFluentDを使って、ログの収集を行いましたが、ドキュメントがかなり充実していたので、ハマりはしたものの設定ファイルを作る等は、そこまで苦労しませんでした。
いろんなPluginがあるので、まだまだ色々できそうな気がしています。
また、FluentDとtd-agentでの挙動が違ったりする場合があるので、調査の時には注意が必要かなと思いました。