過去にFluentdで以下のような記事を書きましたが、今回はそれをベースにS3のパスに環境変数を使用するのを試してみます。
環境変数を使用する方法は以下の記事を参考にさせていただきました。
blog.putise.com
環境
Windows Server 2019
Td-agent v3.8.0
実施作業
準備
ファイルをアップロードするS3バケットを作成します。
Fluentdから呼び出す環境変数を設定します。
Fluentdのconfファイルは以下を使用します。
「s3_object_key_format 」の「#{ENV['PATHNAME']}」の部分が環境変数を呼び出しているところです。
<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 types sepal_length:float,sepal_width:float,petal_length:float,petal_width:float </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-temp-2021 s3_region ap-northeast-1 path fluentd s3_object_key_format %{path}/%{time_slice}/#{ENV['PATHNAME']}/${tag[1]}_%{hms_slice}.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 10s # 3 min timekey_wait 1m chunk_limit_size 30m compress gzip </buffer> <format> @type json </format> </match>
アップロードするのは以下のCSVです。
※こちらの取得元は過去のFluentdの記事に書いてます。
コマンド実行
Td-agentプロンプトを立ち上げて、プロセスを実行するコマンドを実行してみます。
$ fluentd -c etc\td-agent\td-agent.conf
ファイルはアップロードされましたが、環境変数は設定されてませんでした。
原因調査
参考にした記事だとタグ名に使用していたので、もしかしたらパス名には使えないのかもしれないと思いました。
なので、Fluentdのタグに設定し、タグから取得する形で動かしてみます。
修正後のconfファイルは以下です。
このファイルでTd-agentを実行してみます。
<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 types sepal_length:float,sepal_width:float,petal_length:float,petal_width:float </parse> tag "s3.data.csv.#{ENV['PATHNAME']}" </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-temp-2021 s3_region ap-northeast-1 path fluentd s3_object_key_format %{path}/%{time_slice}/${tag[3]}/${tag[1]}_%{hms_slice}.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 10s # 3 min timekey_wait 1m chunk_limit_size 30m compress gzip </buffer> <format> @type json </format> </match>
無事に環境変数PATHNAMEに設定した値がS3上のパスに反映されていました。
環境変数を使いたい場合はそのままでは使えないようなので、注意が必要です。
感想及び所感
というわけで今回は環境変数から取得した値をS3パスに埋め込む方法について試してみました。