Edited at

FluentdでS3に送ったログをAmazon Athenaで集計する。2018-03-26

More than 1 year has passed since last update.


内容

FluentdS3 に送ったログを Amazon Athena で集計する方法を記します。

td-agent3(Fluentd v1.0)でS3に「LTSV形式のログ」を保存する の続きですが 一部設定を変えます


一部変える設定の内容



  • <match> に以下3点を追加


    • output_tag false

    • output_time false

    • S3のkeyにhostname追加




  • <filter> でhostnameを付与する設定を追加


/etc/td-agent/td-agent.conf一部抜粋

# hostname追加

<filter ltsv.log>
@type record_transformer
<record>
hostname ${hostname}
</record>
</filter>

<match ltsv.log>
@type s3
...
# S3のkeyにもhostnameを追加
s3_object_key_format %{path}%{hostname}/%{time_slice}_%{index}.%{file_extension}

# 以下の2つの設定を入れることで、S3に保存されるログがJSONのみになる
output_tag false
output_time false
...
</match>


追記:



  • %{hostname} は deprecated


  • #{Socket.gethostname} を使う


    • 旧: s3_object_key_format %{path}%{time_slice}_%{hostname}%{index}.%{file_extension}

    • これから: s3_object_key_format "%{path}%{time_slice}_#{Socket.gethostname}%{index}.%{file_extension}"



この設定を入れるとhostnameの情報が付与された、JSONのみのログがS3に保存されます


YOUR_S3_BUCKET_NAME/logs/ltsv.log/2018-03-26/{HOSTNAME}/201803260820_0.gz

{"datetime":"2018-03-26 08:20:12","id":"16509","hostname":"ubuntu-xenial"}

{"datetime":"2018-03-26 08:20:32","id":"6217","hostname":"ubuntu-xenial"}


Amazon Athena でselectするまでの流れ


Get Started

AWS マネジメントコンソールで設定していきます。

https://console.aws.amazon.com/athena/home

スクリーンショット 2018-03-26 16.46.53.png

「Get Started」で開始します。


AWS Glue Data Catalogへ遷移

今回selectするためのDBとテーブルを作っていきます。

上部のメニュー「AWS Glue Data Catalog」から設定していきます。

スクリーンショット 2018-03-26 16.47.29.png


Add tables

(この後の作業は AWS Glue での作業です)


「Add tables」から作成します。

スクリーンショット 2018-03-26 16.48.08.png

「Add information about your crawler」で設定していきます

スクリーンショット 2018-03-26 17.33.45.png


メニュに沿って設定していきます

crawler nameを入れる

スクリーンショット 2018-03-26 17.34.53.png

data storeの設定

スクリーンショット 2018-03-26 17.35.31.png

Include path にはS3のkeyの途中まで(prefix)を入れておけば良いです

「Add another data store」は「No」

スクリーンショット 2018-03-26 17.37.40.png

今回はIAM roleを新規作成してみました

(role名を入力しました)

スクリーンショット 2018-03-26 17.38.23.png

「Create a schedule for this crawler」はとりあえず「Hourly」に

スクリーンショット 2018-03-26 17.40.15.png

新しいDBを追加しました

スクリーンショット 2018-03-26 17.41.20.png

次は確認画面でした。「Finish」して完了です。


Crawlerをrunする

Glueの「Crawlers」メニューに今追加したCrawlerが表示されると思います。

選択して、「Run Crawler」を押すと手動でCrawlerが動きます。

Cralerが動くと、Glueの「Databases > Tables」にtableが追加されます。

JSONだけを送るように設定したので、Schemaもよしなに設定されています。

スクリーンショット 2018-03-26 17.45.34.png


Amazon Athena に戻ってselect

Glueでここまで作業が終わればAthenaでselectできます。


すこぶるシンプルなselect

スクリーンショット 2018-03-26 17.47.43.png

スクリーンショット 2018-03-26 17.47.58.png


すこぶるシンプルなwhere

スクリーンショット 2018-03-26 17.48.39.png

スクリーンショット 2018-03-26 17.48.49.png


まとめ

簡単にではありますが、FluentdでS3に送ったログをAmazon Athenaで集計 select する方法について書きました。

ここまでくればあとは普通にSQLを書くだけなので集計もできるでしょう!