LoginSignup
2
2

More than 3 years have passed since last update.

FluentDをMacでセットアップして、CloudWatchLogsへログ転送するまで

Last updated at Posted at 2020-02-13

はじめに

実務で、ローカルで稼働しているMac miniが複数台あるので、それをCloudWatchLogsへ集約したいという要望があったので、勉強がてらFluentDを使った時の備忘録的なアレです

色々、試行錯誤しながら試したので、同じくハマっている人の助けになればと思います

失敗パターン

td-agentを使って、CloudWatchLogsに転送させる設定をしようとしたが、ripperが足りない?せいか、以下のエラーが発生して、td-agent内包のRubyを使っているため、これ以上は自力解決が難しいと思い、断念


`require': cannot load such file -- ripper (LoadError)

やったこと

  1. FluentD公式から、MacOS向けのtd-agent.dmgをDLして、セットアップ
    https://docs.fluentd.org/installation/install-by-dmg

  2. 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    
  1. 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での挙動が違ったりする場合があるので、調査の時には注意が必要かなと思いました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2