Help us understand the problem. What is going on with this article?

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を書くだけなので集計もできるでしょう!

abetomo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away