AWS Athena で自社アプリのログを解析する
自社アプリのログがあり今までテキストで検索していましたが、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 に変換します。
{"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 で手動で作成できます。
何回も作り直すと思うので、クエリーが便利です。
以下のクエリーを実行すると、テーブルが作成されます。
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 でテーブルを選んで、右上のパーティションの表示で確認できます。
MSCK REPAIR TABLE test_db.event
Points
- DB名とテーブル名にハイフンはエラーです。アンダースコアです(ハマりました)
- パーテション名に part と言う名前を付けていますが、何でもいいです。
- パーティション再構築SQLを実行しないと検索できないので注意です。
Athena の実行
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 で一発だろ」と無茶振りになるのか。信じるか信じないかはあなた次第です。
Author And Source
この問題について(AWS Athena で自社アプリのログを解析する), 我々は、より多くの情報をここで見つけました https://qiita.com/koji4104/items/ed983344cffe35402773著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .