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

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

FluentdでCSVファイルをS3にアップロードしてみた

はじめに

前回までの記事ではFluentdのソースにApacheアクセスログを指定していましたが、今回はCSVファイルを指定してS3にアップロードしてみます。

CSVデータは適当にWebで拾ってきたデータを使用します。
https://www.kaggle.com/webirlab/iris-data/data
 

実施内容

  • conf設定
  • TEST実施

 

実施手順

conf設定

今回も前回使用したconfをベースに、それを修正する形で設定します。

<source>
  @type tail
  path C:\data\test-data.csv
  pos_file C:\var\log\td-agent\test-data.csv.pos
  read_from_head true

  <parse>
    @type csv
    keys sepal_length,sepal_width,petal_length,petal_width,class,timestamp
    types sepal_length:float,sepal_width:float,petal_length:float,petal_width:float,timestamp:time
  </parse>

  tag s3.data.csv
</source>

<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

  s3_object_key_format %{path}/%{time_slice}/${tag[1]}.json.%{file_extension}
  time_slice_format year=%Y/month=%m/day=%d
  overwrite true

  <buffer tag,time>
    @type file
    path C:\var\log\td-agent\s3
    timekey 3m  # 3 min
    timekey_wait 5m
    chunk_limit_size 5g

    compress gzip
  </buffer>
  <format>
    @type json
  </format>
</match>

CSVファイルを使用する上で特筆して記載するのは以下のパラメータについてです。

  • read_from_head

このパラメータを設定せずに実行したところ、ファイルが中々S3にアップロードされず困りました。
原因を探したところ以下の記事が見つかりました。
obel.hatenablog.jp

どうやらこれを設定していないと対象ファイルの末尾から読み始めるみたいで、設定することで対象ファイルの先頭から読み込んでくれるそうです。
ただし、posファイルを使用するように設定していないと毎回先頭から読んでしまうので、そこは注意が必要です。
 
 

TEST実施

Td-agentプロンプトを立ち上げて、プロセスを実行するコマンドを叩きます。
f:id:live-your-life-dd18:20200129102903p:plain

S3に日付のフォルダが作成され、その配下にファイルがアップロードされていることを確認しました。
f:id:live-your-life-dd18:20200129104031p:plain

S3 Selectでファイルの中身も確認できました。
f:id:live-your-life-dd18:20200129104429p:plain

所感

read_from_headのパラメータが必要なことに気付くのに時間が少しかかりました。
まだFluentdの動きについて理解しきれていないので、徐々に試しながら理解していこうと思います。