AWS
fluentd
S3
LTSV
td-agent

td-agent3(Fluentd v1.0)でS3に「LTSV形式のログ」を保存する。2018-03-16

内容

td-agent3(Fluentd v1.0)でS3にログを保存する では td-agent3Fluentd v1.0)で Apache のログを、 S3 に保存しました
今回は、「LTSV形式ログ」を保存する設定について記します

準備

td-agent3(Fluentd v1.0)でS3にログを保存する を一通り設定した状態にする

設定の例

LTSV形式のログについて

(例ということでかなりてきとーなものです)

  • /tmp/ltsv.log に出力される
  • ログのフォーマットは datetime:%Y-%m-%d %H:%M:%S<TAB>id:数値のID
    • 例: datetime:2018-03-05 07:48:33<TAB>id:697
    • $ printf "datetime:$(date "+%Y-%m-%d %H:%M:%S")\tid:$RANDOM\n" >> /tmp/ltsv.log で出力します

設定ファイル

参考: LTSV Parser Plugin

/etc/td-agent/td-agent.conf
# <source> の内容が本題
<source>
  @type tail
  path /tmp/ltsv.log
  tag ltsv.log
  pos_file /var/log/td-agent/ltsv-log.pos

  <parse>
    @type ltsv
  </parse>
</source>

# <match> についての詳細は割愛
<match ltsv.log>
  @type s3

  aws_key_id YOUR_AWS_KEY_ID
  aws_sec_key YOUR_AWS_SECRET_KEY
  s3_bucket YOUR_S3_BUCKET_NAME
  s3_region us-east-1
  path logs/${tag}/%Y-%m-%d/
  s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}

  # if you want to use ${tag} or %Y/%m/%d/ like syntax in path / s3_object_key_format,
  # need to specify tag for ${tag} and time for %Y/%m/%d in <buffer> argument.

  <buffer tag,time>
    @type file
    path /var/log/td-agent/s3
    timekey 60
    timekey_wait 60
    chunk_limit_size 256m
  </buffer>
</match>

動作確認

以上の設定例で td-agent を起動してログ(/var/log/td-agent/td-agent.log)を確認します。
特に問題がなさそうであれば

$ while true ; do printf "datetime:$(date "+%Y-%m-%d %H:%M:%S")\tid:$RANDOM\n" >> /tmp/ltsv.log && sleep 10; done

などで「LTSV形式のログ」を出力して、S3にログがたまっていくか確認します。

ログデータの確認

S3に以下のようなテキストのログがたまっていきました

YOUR_S3_BUCKET_NAME/ltsv.log/2018-03-16/201803160439_0.gz
2018-03-16T04:39:32+00:00   ltsv.log    {"datetime":"2018-03-16 04:39:32","id":"8204"}
2018-03-16T04:39:42+00:00   ltsv.log    {"datetime":"2018-03-16 04:39:42","id":"13831"}
2018-03-16T04:39:52+00:00   ltsv.log    {"datetime":"2018-03-16 04:39:52","id":"14953"}

まとめ

  • 「LTSV形式のログ」を parse できました
  • td-agent3Fluentd v1.0)で S3 に「LTSV形式のログ」を保存できました