カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

FluentdでS3にアップロードしてみた

はじめに

タイトル通りです。
前回Fluentdのインストールをしましたが、次はプラグインをインストールしてS3にアップロードを行っていきます。
今回はApatcheログをS3にインポートしていきます。

参考にした手順は公式の以下の手順です。
docs.fluentd.org

Fluentdが実施する流れは以下の通り

  • アクセスログファイルを継続的にTailする
  • 着信ログエントリを意味あるフィールド(IP,Path等)とそれらをバッファリング
  • バッファされたデータをS3に定期的に書き込む



実施内容

  • 事前準備
  • S3プラグインのインストール
  • td-agent.confの設定
  • Test
  • 結果


実施手順

事前準備

これからの手順は以下のインストール及び準備ができていることが前提となります。
また設定されていないものがあれば設定しておきます。
※今回はその設定については割愛します。


S3プラグインのインストール

まずはtd-agentのプロンプトを立ち上げて、前回の記事の最後に載せたプラグインインストールコマンドを参考に以下のコマンドを作成し、実行します。

fluent-gem install fluent-plugin-s3


成功すると 1 gem installed と出力されます。
f:id:live-your-life-dd18:20200128114058p:plain

td-agent.confの設定

以下のパスにあるconfファイルを設定していきます。
C:\opt\td-agent\etc\td-agent

f:id:live-your-life-dd18:20200128114347p:plain

Tail Input

Inputの設定をしていきます。
公式に記載されている以下のソースを参考に修正します。

<source>
  @type tail
  path /var/log/apache2/access_log
  pos_file /var/log/td-agent/apache2.access_log.pos
  <parse>
    @type apache2
  </parse>
  tag s3.apache.access
</source>


修正後の記述は以下の通り

<source>
  @type tail
  path C:\Apache24\logs\access.log
  pos_file C:\var\log\td-agent\apache24.access_log.pos
  <parse>
    @type apache2
  </parse>
  tag s3.apache.access
</source>


※ソースの説明※

  • type tail

tail inputプラグインはログファイルを継続的に追跡する。Fluentdのコアに含まれるプラグイン

  • @type apache2 in parse

Fluentdの組み込みApacheログを使用するパーサー

  • path

Apacheログの場所。ソースファイルによって異なる。

  • pos_file

ポジションファイル。ソースファイルのどこまで読み込んだかを記録するためのファイル

s3.apache.accessがFluentd内でタグとして使用される。このタグによって処理内容を制御することが可能。

Amazon S3 Output

Outputの設定をしていきます。
公式に記載されている以下のソースを参考に修正します。

<match s3.*.*>
  @type s3

  aws_key_id YOUR_AWS_KEY_ID
  aws_sec_key YOUR_AWS_SECRET/KEY
  s3_bucket YOUR_S3_BUCKET_NAME
  path logs/

  <buffer>
    @type file
    path /var/log/td-agent/s3
    timekey 3600  # 1 hour
    timekey_wait 10m
    chunk_limit_size 256m
  </buffer>

  time_slice_format %Y%m%d%H
</match>


修正後の記述は以下の通り

<match s3.*.*>
  @type s3

  <assume_role_credentials>
    role_arn          arn:aws:iam::************:role/test-bation
    role_session_name test-bation
  </assume_role_credentials>
  
  s3_bucket test-tmp-20200128
  s3_region ap-northeast-1
  path logs/

  <buffer>
    @type file
    path C:\var\log\td-agent\s3
    timekey 3600  # 1 hour
    timekey_wait 10m
    chunk_limit_size 256m
  </buffer>

  time_slice_format %Y%m%d%H
</match>

サンプルだとS3へのアクセス認証をアクセスキーでやるように設定されていましたが、今回はEC2にアタッチしているロールを使用するように設定します。
設定の仕方は以下に記載されています。
github.com


matchプラグインはInputで指定したタグに対してマッチしているかどうか判定します。
今回の match s3.*.* だと、タグの先頭がs3でそのあとドット区切りで2つ設定されているタグがヒットします。
ワイルドカードで指定するときは * で設定します。


bufferプラグインについてはわかりやすくまとめている方がいたので、そちらをご確認ください。
qiita.com

InputとOutputをどちらも記載すると以下のようになります。
f:id:live-your-life-dd18:20200128132721p:plain

Test

ここまで設定できたら実際に実行していきます。
実行前のS3の状態は以下です。
f:id:live-your-life-dd18:20200128122206p:plain


まずは前回同様にTd-agentプロンプトを立ち上げてて、プロセスを起動します。
f:id:live-your-life-dd18:20200128123510p:plain


そのあとapacheに対してpingを実行します。

ab -n 100 -c 10 http://127.0.0.1/


※abコマンドについてはこちらを参照
[Apache][Test] Apache Benchを使った負荷テスト - Qiita

f:id:live-your-life-dd18:20200128125110p:plain


ping実行結果
f:id:live-your-life-dd18:20200128125512p:plain

結果

ping実行後S3を確認したところ、何故かファイルがアップされていない。。

公式ページを調べたら以下の記載がありました。

WARNING: By default, files are created on an hourly basis (around xx:10). This means that when you first import records using the plugin, no file is created immediately. The file will be created when the timekey condition has been met. To change the output frequency, please modify the timekey value. To write objects every minute, please use timekey 60 with smaller timekey_wait like timekey_wait 10s.


Google翻訳

警告:デフォルトでは、ファイルは1時間ごとに作成されます(xx:10前後)。つまり、プラグインを使用して最初にレコードをインポートするとき、ファイルはすぐには作成されません。タイムキー条件が満たされると、ファイルが作成されます。出力周波数を変更するには、timekey値を変更してください。 1分ごとにオブジェクトを書き込むには、timekey_wait 10sのような小さいtimekey_waitでtimekey 60を使用してください。


confファイルを確認したところ、timekeyが1時間になっていたので、それを3分に変えて再度実行します。

  <buffer>
    @type file
    path C:\var\log\td-agent\s3
    timekey 3m  #3600->3m
    timekey_wait 10m
    chunk_limit_size 256m
  </buffer>

S3にアップされていることが確認できました。
f:id:live-your-life-dd18:20200128131828p:plain

所感

Td-agentのプロンプト上は何も変化がないのでわかりづらかったですが、問題なくS3にアップロードすることができました。
次はアクセスログ以外のファイルで検証する予定です。