はじめに
タイトル通りです。
前回Fluentdのインストールをしましたが、次はプラグインをインストールしてS3にアップロードを行っていきます。
今回はApatcheログをS3にインポートしていきます。
参考にした手順は公式の以下の手順です。
docs.fluentd.org
Fluentdが実施する流れは以下の通り
- アクセスログファイルを継続的にTailする
- 着信ログエントリを意味あるフィールド(IP,Path等)とそれらをバッファリング
- バッファされたデータをS3に定期的に書き込む
実施手順
事前準備
これからの手順は以下のインストール及び準備ができていることが前提となります。
また設定されていないものがあれば設定しておきます。
※今回はその設定については割愛します。
- Fluentd
- Amazon S3 Output Plugin
- Your Amazon Web Services Account
- Apache (with the Combined Log Format)
S3プラグインのインストール
まずはtd-agentのプロンプトを立ち上げて、前回の記事の最後に載せたプラグインインストールコマンドを参考に以下のコマンドを作成し、実行します。
fluent-gem install fluent-plugin-s3
成功すると 1 gem installed と出力されます。
td-agent.confの設定
以下のパスにあるconfファイルを設定していきます。
C:\opt\td-agent\etc\td-agent
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をどちらも記載すると以下のようになります。
Test
ここまで設定できたら実際に実行していきます。
実行前のS3の状態は以下です。
まずは前回同様にTd-agentプロンプトを立ち上げてて、プロセスを起動します。
ab -n 100 -c 10 http://127.0.0.1/
※abコマンドについてはこちらを参照
[Apache][Test] Apache Benchを使った負荷テスト - Qiita
ping実行結果
結果
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.
警告:デフォルトでは、ファイルは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にアップされていることが確認できました。
所感
Td-agentのプロンプト上は何も変化がないのでわかりづらかったですが、問題なくS3にアップロードすることができました。
次はアクセスログ以外のファイルで検証する予定です。