Amazon Athena のクエリ結果を SPICE にインポートして、 QuickSight で可視化する

2017.01.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、藤本です。

先日、QuickSight のデータセットに Amazon Athena の対応が追加されました。弊社ブログでもせーのが紹介しました。

この機能を使って、昨日、ELB のアクセスログをいくつかの視点から可視化して、解析した時の知見です。

Amazon Athena と QuickSight の連携

まず、前提として、ELB のアクセスログのような非構造化データを QuickSight で可視化したい場合、一度、構造化データにした上で、QuickSight のデータセットに取り込む必要があります。そこで AWS re:Invent 2016 でリリースされた Amazon Athena を利用することで、S3 にある非構造化データを SQL っぽくクエリでき、構造化データ(CSV)として取得することができます。この 2つを組み合わせることで非構造化データを可視化することができます。

AthenaQuickSight

ただし、Amazon Athena を可視化する場合、SPICE へのインポートがサポートされていません。QuickSight の可視化を変更する都度、Amazon Athena へのクエリが発生します。

You can improve the performance of database data sets by importing the data into SPICE instead of using a direct query to the database (with the exception of Amazon Athena data sets, which currently only support direct query) Importing Data into SPICE

昨日、ELB のアクセスログを Athena → QuickSight で可視化していた際に気になったことがいくつかありました。

  • 前提
  • ELB のアクセスログ量が約5GB〜10GB/日
  • Athena はパーティション設定済み
  • クエリしたいのは一定時間内だった
  • 色々な観点で可視化したかった
  • 気になったこと
  • Amazon Athena のクエリ速度が高速とはいえ、データを変更する都度、データロードが走る QuickSight だと、若干ストレスな速度
  • それと同時に都度、Athena へクエリが発生し、コストが気になって、色々な可視化を試しづらい
  • Filter で Athena のパーティション設定を忘れると、高コスト、かなり待つ

そこで今回お伝えしたいことは S3 (非構造化) → Athena → QuickSight (可視化) よりも、S3 (非構造化) → Athena → S3 (CSVファイル) → QuickSight (SPICE) → QuickSight (可視化) が適しているケースがあるという話です。

Untitled

簡単に 2つの方式を比較してみましょう。

Athena直接 SPICE経由
メリット 設定が簡単 リアルタイムのデータを可視化 高速
デメリット グラフを更新する度にAthenaのクエリ課金が発生 SPICE のキャパシティコスト リアルタイムの可視化ができない

うーん、SPICE 経由の用途の方が少ないかな。ユースケースとしては今回のように決まった期間の可視化、パーティションを設定してもデータソースが大容量、可視化の方法が具体的に決まってなく、色々な可視化を実施したい、という障害の解析ぐらいかなー。月次のレポーティングとかも向いてそうだけど、そういう場合は決まった可視化しかしなそうなので、Athena のデータセットでも問題なさそう。

SPICE経由で可視化する

それでは S3 (非構造化) → Athena → S3 (CSVファイル) → QuickSight (SPICE) → QuickSight (可視化) の手順を試してみましょう。可視化する対象は ELB のアクセスログです。

  • Amazon Athena を設定する
  • 可視化に必要なデータをクエリにより取り出す
  • 取り出したデータを SPICE にインポートする
  • QuickSight で可視化する

ほとんどの単品が既にブログ化されているのでリンク集みたいになりました。

Amazon Athena を設定する

ELB のアクセスログを Athena でクエリするには下記ブログにあるCREATE TABLEでテーブルを作成できます。

Amazon AthenaでELBログをSQLで解析する

パーティション設定する場合は、PARTITIONED BY(year string, month string, day string)を加えてください。

可視化に必要なデータをクエリにより取り出す

今回、インポートしたかったデータが 10GB を超え、SPICE の単一 S3データセット 10GBまでの制限に引っかかったため、取り出すカラムを絞りました。そんなにデータ数が多くなければ、全カラムの取り出しでもいいと思います。そもそもデータ数が多くなければ、Athena をデータセットに設定してもいいかと思います。

If you are retrieving multiple files from Amazon S3, the total size of the files specified in the manifest file cannot exceed 10 GB, and the total number of files specified in the manifest file cannot exceed 100. Data Source Limits

SELECT
request_timestamp,
elb_name,
request_ip,
backend_processing_time,
elb_response_code,
received_bytes,
sent_bytes,
request_verb,
url,
protocol
FROM
xxxx_elb_log
WHERE
year='2017'
AND month='01'
AND day='01'

パーティション単位で上記クエリを 1/1、1/2、1/3 のデータに絞って取得しました。

クエリ結果の構造化データはCSVファイルとして、Query Result Location で設定した S3 のパスへ出力されます。

S3_Management_Console

取り出したデータを SPICE にインポートする

S3 のデータセットの作成方法は下記エントリをご参照ください。下記エントリでも CSV ファイルを取り扱っていますので、マニフェストファイルは URIPrefix をクエリ結果の CSV ファイルの URL に変更するだけで大丈夫です。

S3 のデータセットが作成されました。

Data_Sets

QuickSight で可視化する

作成されたデータセットからグラフを作成しましょう。作成した S3 のデータセットをクリックします。

情報が表示されます。約1.9億件のデータがあります。SPICEにインポートされたサイズは 5GBです。

Data_Sets 2

Create Analysis をクリックします。

Analysis

例えば、request_ipをクリックしてみます。

screenshot_2017-01-07_16_10_11

リクエスト元IPアドレス毎のアクセス数が表示されました。DDoSの解析に役立ちそうですね。

データセットが Athena の場合、Filter でパーティション単位である 1日分に絞り込みしても、グラフが描画されるまでに体感 10〜20秒かかっていました。今回のデータ量を考えれば、十分早いと思いますが、色々な形でグラフを表示させていたら若干ストレスでした。

データセットが S3(SPICEインポート)の場合、3日分のデータですが、グラフが描画されるまでに 1〜2 秒ぐらいでした。早い!ノンストレス!

まとめ

Amazon Athena、QuickSight により、今まで Elasticsearch、Kibana などで実装していたログ可視化が SQL クエリだけで仕組みの実装不要で可視化することができました。更には低コスト、高パフォーマンス!是非活用しましょう!