1
0

More than 3 years have passed since last update.

AWS Athena で自社アプリのログを解析する

Posted at

自社アプリのログがあり今までテキストで検索していましたが、AWS に便利なものを発見しました。
AWS Athena を使うと、S3 に置いたログファイルを SQL で検索できます。
ログをS3に送り、Lambda で Json に変換して、Athena で解析します。

AWS Athena について

S3にログファイルを置くだけで、SQLで検索できるようになります。
他のAWSのログも解析ができます。あれは人間が直接見るものではなかったのです。世間ではアクセス解析などに使用されています。DBなどは使わず、ファイルを直接クラウドパワーで解析しているようです。

ログの準備

ログの例です。

ログの例
2021-01-12T12:00:01+09:00 000001 info Download success : https://xxx/01.jpg
2021-01-12T12:00:02+09:00 000001 info Download success : https://xxx/02.jpg
2021-01-12T12:00:03+09:00 000001 info Download success : https://xxx/03.jpg

自前で Json に変換します。

Jsonに変換後
{"time":"2021-01-12 12:00:01", "device":"000001", "level":"info", "event":"download", "uri":"https://xxx/01.jpg"}
{"time":"2021-01-12 12:00:02", "device":"000001", "level":"info", "event":"download", "uri":"https://xxx/02.jpg"}
{"time":"2021-01-12 12:00:03", "device":"000001", "level":"info", "event":"download", "uri":"https://xxx/03.jpg"}

Points

  • CSVでも可能です。Jsonだと拡張性があり便利です。
  • Athena の timestamp型は 2021-01-12 12:00:01 です。 2021-01-12T12:00:01 や 2021/01/12 12:00:01 はダメでした(ハマりました)

Athena のパーティション機能

Athena のパーティション機能とは
今回のケースでは、デバイスごとの検索になります。デバイスが100個あると、毎回100個すべてのログファイルを検索することになります。1つ1GBなら毎回100GBを検索します。
そこでAthenaには、S3のフォルダごとに分ける機能があります。S3のフォルダ名を part=xxx にします。Athena の SQL の検索時に part を指定すると、その part だけを検索するようになります。
※かなり説明を省略しています。

S3の準備

S3にJsonに変換したログを置きます。私はオリジナルログをS3に置き、Lambdaで変換しています。


Athena の構築

テーブルの作成は Athena の Data sources で手動で作成できます。
何回も作り直すと思うので、クエリーが便利です。
以下のクエリーを実行すると、テーブルが作成されます。

Athena_query
CREATE EXTERNAL TABLE test_db.event (
    time timestamp,
    device string,
    level string,
    event string,
    uri string)
PARTITIONED BY (part string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://test-log-1/event/';

以下を実行するとパーティションが再構築されます。
Data sources でテーブルを選んで、右上のパーティションの表示で確認できます。

Athena_query
MSCK REPAIR TABLE test_db.event

Points

  • DB名とテーブル名にハイフンはエラーです。アンダースコアです(ハマりました)
  • パーテション名に part と言う名前を付けていますが、何でもいいです。
  • パーティション再構築SQLを実行しないと検索できないので注意です。

Athena の実行

Athena_query
select * from test_db.event where part='000001'

Athena で SQL を実行したときにデータのサイズが出ます。
(Run time 1.12 seconds, Data scanned 1.67 KB)
partを指定するとデータサイズが減ることが分かります。

AWS QuickSight

AWS QuickSight はデータを見える化してくれます。
QuickSight は AWS アカウントを持っていない人を招待することが可能です。

方法
1. 初回、QuickSight の名前を付けます(アカウントで1つの名前です)
2. 既に作成した Athena の DB を選びます。

できること

  • 今回はリスト表示ですが、棒グラフや円グラフなどいろいろできます。
  • 各カラムの検索ができます。
  • 日付が timestamp 型だとカレンダーで検索できます。
  • 日付の場合、1日単位、1か月単位のカウントができます。
  • CSVやExcelの出力ができます。

Points

  • もしS3アクセスエラーとか出た場合、管理画面からS3のチェックを無効+有効にしてください。S3のバケット選択が出てきます。
  • QuickSightの月額 Standard 900円(全員作成者) Enterprise 管理者1800円、ユーザー500円

惜しい点
お客様ごとにユーザーを作り公開しようと考えてました。中身のデータソースだけ入れ替えたらいいと思ってましたが、毎回この画面を作らないといけないっぽいです。
しかしこれだけの機能を自前で作ると維持メンテが大変なので、QuickSightは是非使っていきたいです。もう少し研究が必要です。

まとめ

AWS Athena を使ってみました。
一言で言うとファイルをS3に置くだけなのですが、Athena は奥が深いというか、クセが強いです。色々応用が効きそうなので、AWS技術者には必須となるでしょう。これからは、分かりやすいログから、Athenaで利用しやすいログ、となりそうです。本番運用しているサーバーで実験的に試しています。とても便利です。

Athena は「ちょっとログ見てください」地獄から脱出できる救世主となるのか。それとも「そんなもん Athena で一発だろ」と無茶振りになるのか。信じるか信じないかはあなた次第です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0