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

Athenaを早速試してみた

More than 3 years have passed since last update.

この記事は Retty Advent Calendar 5日目です。

昨日は、近藤さん(@yskondo )の フラットデザインは単なるデザインスタイルの話ではない でした。

さて、今年のAWSのre:inventではいろんな新しいサービスの発表が行われて、
使ってみたい!と思うサービスもたくさん増えてますが、その中で「今すぐ試したい」と思ったのがこのAWS Athenaですね。

社内でELBを使って運用してる部分も多く、ELBのアクセスログを確認する場面は容易に想像できるでしょう。
今までならAdhocで該当期間のアクセスログを一個一個開けて確認するか、S3のバケットをマウントして開けるか、Lambdaでevent triggerとしてS3バケットを指定してElasticsearchに流し込んでみるとかをやって(た)ました。

でもやっぱ面倒くさい。面倒くさいんですよ。

それで、今回Athenaの登場にはすごく期待してまして、発表後早速試してみました。
ちなみに、S3のリージョンとは関係なく使えるので、今すぐ試せます。

Athenaの初期画面(Query画面)

Athena.png
サンプルとしてすぐ見れるようになってますね!
左サイドバーのelb_logsの目的なアイコンを押すと、previewとして10件読み込んでくれます。

見るとわかりますが、elbのアクセスログです!
そう、私が欲しかったそいつなんですよ。これにぶち込めばいいんじゃないか?!と思いましたがそういう仕組みではないですね。

データベースは複数のテーブルが持てる、
テーブルはS3のオブジェクトとつなげて、その内容をテーブルのように参照できる仕組みですね。
説明見るとPrestoなので分散処理ですね。レスポンスへの期待も高まります。

新しいテーブルを作ってみよう!

Athena2.png
Add tableボタンをクリックするとこういう画面に遷移します。
なんか楽そう。早速やってみます。
Databaseがsampledbになるのは嫌だったのでtestにしたりして。
Table Nameも適当にそれらしきものを入れておきましょう。
重要なのは
Location of input Data Setです。こちらがS3のバケットを指定するものですね。説明読むと、prefixがついてるところも一旦bucket名だけまたは分岐になるprefixまで入れれば中のオブジェクトを勝手に読み込んでくれそうです。便利ー
Externalは一旦無視して次へ進みましょう。

Data Format

Athena3.png
こちらデータフォーマットを決める画面になります。
色々ありますが、今回はELBのアクセスログなので、Apache Web Logsを選んで、RegexにELBのアクセスログの正規表現を入れました。
面倒ですよね。貼っておきます。

([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*):([0-9]*) ([.0-9]*) ([.0-9]*) ([.0-9]*) (-|[0-9]*) (-|[0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) (- |[^ ]*)\" ("[^"]*") ([A-Z0-9-]+) ([A-Za-z0-9.-]*)$

終わりましたら次へ!

次はテーブルのカラム設定

Athena4.png
鬼門です。
カラム名とデータタイプを入れなければいけません。多分Athenaのテーブル作成の中で一番面倒くさいところです。
私は極度の面倒臭がり屋なので、方法を考えました。tutorialにその解決方法がありました。
いきなりtutorial押すと最初からになってしまうので、ご注意を。。。
Athena5.png

赤い枠の中にある、hereが救ってくれます。押すと
Athena6.png
いやー嬉しいですね。ELBのアクセスログのカラム構成を入れてくれます。
チュートリアル使いたくないけどどうするのか?と言われたら、直接入力するか、後々出てくる方法でやっていただきたいです。もう少々お待ちを。

Partition設定

Athena7.png
次はPartition設定です。一旦今回は飛ばします。

これで完了!

Athena8.png
Partitionまで設定が終わったら、一旦完了です。
画面を見ると、指定したDatabaseにDDLが回ってるというメッセージと一緒に、DDLが表示されてるのが見えます。
このDDLをコピーしておいて、またELBのアクセスログを読み込むテーブルを作る時に簡単にクエリを流して作れると思いますので、取っておくのも良いでしょう。
なぜなら、カラム設定は面倒くさいからです。

クエリを投げてみよう

Athena10.png
コストビビりなのでプレビューと同じクエリを投げてみました。レコード数とかボリュームまでは言えないのですが、
そこそこ溜まっていて解析にはそれなりの処置を行わなければいけないぐらいのボリュームではあるELBのアクセスログですが、
8秒ぐらいで返ってきましたね。
10行ですが240kbぐらい。

Athenaは$5/TB(累積)なので、WHEREとLIMITを適切に使えば、Adhocに確認するにはかなり強力なクエリを投げれると思います!

終わりに

Athenaはテーブル間のJOINが可能で、AWS Quicksiteや外部のBIツールとの連動も機能的には可能です。
クエリを保存しておくことや、クエリの結果はS3の特定バケットにCSVで保存されるので、それを持って色々やるのもアリですね。(保存先は右上のSettingsというところで設定可能です)
クエリの履歴も残っていて、そこからダウンロードすることも可能です。

ELBのアクセスログの解析にはもってこいで、使い道は色々ありそうなAthenaです。
ぜひ、一度使ってみてくださいー!

r4-keisuke
Rettyで検索のEMをやっております
retty
Retty株式会社はソーシャルメディア、スマートフォンを活かした「人を軸にお店を探せる」グルメサービスRettyを運営する会社です。
https://retty.me
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした