FluentdでS3にログを収集してみる

2018.04.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、坂巻です。

今回は、ログ収集に関するエントリです。

AWSでログ収集といえば、CloudWatch Logsが挙げられますが、 今回はオープンソースのログ収集管理ツールFluentdを使用してみたいと思います。

最終的には他サービスを使用して、収集したログの可視化や分析してみたいと思いますが、 本エントリではS3にログが出力されるまでをゴールとします。

目次

  • 構成
  • 構築
  • AWS環境
  • Fluentdインストール
  • Fluentd設定
  • ログ確認
  • さいごに

構成

以下のシンプルな構成です。

aws

構築

AWS

AWS環境の構築はCloudFormationのテンプレートを用意したので割愛します。

上記テンプレートを利用してAWS環境を構築する際は、 スタックのパラメータに以下を設定してください。

  • KeyPairName…EC2インスタンスにログインするキーペアを指定します。
  • S3BucketName…作成するバケット名を指定します。
  • SecurityGroupCidrIp…EC2にSSHでアクセスするCIDRを指定します。

なお、CloudFormationの利用方法がわからない方は、こちらのページを確認ください。

CloudFormation入門-AWSの構築を自動化しよう-

Fluentdインストール

インストールはワンライナーで行えます。 起動したEC2で以下のコマンドを実行します。

curl -L https://toolbelt.treasuredata.com/sh/install-amazon1-td-agent3.sh | sh

Installing Fluentd Using rpm Package

Fluentd設定

入力、出力の設定は/etc/td-agent/td-agent.confに記述していきます。

fluentdが何を受け取るか入力元の指定は``````ディレクティブで行います。 今回はsyslogを監視したいため、以下のように設定しました。

<source>
  @type tail
  path /var/log/messages
  tag td.messages.access
  pos_file /var/log/td-agent/messages.pos
  format syslog
</source>
  • type…入力プラグインを指定します。ここではtailを指定しています。
  • path…入力対象のファイルを指定します。
  • tag…ログにつけるタグを指定します。
  • pos_file…最後に読み込んだファイルの位置をこのファイルに記録します。
  • format…パーサプラグインを指定します。ここではsyslogを指定しています。

Configuration File Syntax

Input Plugin Overview

ディレクティブの情報に対する出力処理はディレクティブで行います。 今回はS3へ出力したいので、以下のように設定しました。

<match td.messages.access>
  @type s3
  s3_bucket fluentd-test-20180421
  s3_region ap-northeast-1
  time_slice_format %Y%m%d%H%M
</match>

``````ディレクティブ内のtagで指定と一致させます。

  • type…出力プラグインを指定します。ここではs3を指定しています。
  • s3_bucket…S3のバケット名を指定します。
  • s3_region…S3のバケットのリージョン名を指定します。
  • time_slice_format…出力ファイルに追加される時間のフォーマット形式を指定します。ファイルに書き出すタイミングの指定と考えてもよさそうです。

なお、今回はEC2にIAMロールを付与しているので、アクセスキーは使用しません。

Amazon S3 Output Plugin

収集ログに対する権限エラーにならないように、 /etc/init.d/td-agentファイルの下記箇所をtd-agentからrootに変更します。

TD_AGENT_DEFAULT=/etc/sysconfig/td-agent
TD_AGENT_USER=root
TD_AGENT_GROUP=root
TD_AGENT_RUBY=/opt/td-agent/embedded/bin/ruby

設定を終えたらプロセスを再起動します。

$ sudo /etc/init.d/td-agent restart
td-agentng td-agent:                                       [  OK  ]

ログがS3に出力されない等、想定した動作と異なる場合は、 /var/log/td-agent/td-agent.logを確認しましょう。

ログ確認

``````ディレクティブで指定した、バケットにログが出力されていることが確認できました。

S3

ログの中身も確認してみます。

2018-04-22T04:08:56+00:00	td.messages.access	{"host":"ip-10-0-1-49","ident":"dhclient","pid":"2158","message":"XMT: Solicit on eth0, interval 125070ms."}

さいごに

次回は他のサービスを使い、収集したログを可視化や分析してみたいと思います。