33
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Systemi(株式会社システムアイ)Advent Calendar 2024

Day 11

AWS もう苦しまない、Athenaでパッとログ整理

Last updated at Posted at 2024-12-10

image.png

はじめに

今回は会社のイベントで Advent Calendar に参加しての記事になります。

初参加なので、まずは 1 つ記事(「Flutter API 通信で Qiita の記事を GET !」)を書いて Advent Calendar に参加してみる予定でしたが、会社から 2 つ目、 3 つ目と Advent Calendar が追加されたので、2 つ目の記事を投稿させて頂きます!

※去年は 2 つの Advent Calendar で、今年は 3 つです。来年は 4 つなのか!?

今回は、「 Amazon Athena 」を利用したログ整理です。
以前は 「 Google Cloud Big Query 」を利用してログ整理を行ったのですが、諸事情により利用できなかったため「 Amazon Athena 」を利用して、大量ログを整理します。

ざっくり手順

  1. ログ (CSV) ファイル
  2. Amazon S3 にバケット&フォルダ作成
  3. AWS Glue DataBrew でログを編集
  4. Amazon Athena で AWS Glue からテーブルを作成
  5. Amazon Athena で クエリを利用してログを整理

イメージ

image.png

ログ (CSV) ファイル

今回のログファイルは CSV (カンマ区切り)で、下記の項目のため、CONTENT 項目を編集して Amazon Athena へ渡す必要があります。

ログファイル項目

  • DATE : 処理日時(ミリ秒まで)
  • HOST : 処理ホスト名
  • SERVICE : サービスレイヤー
  • CONTENT : ログ詳細
    • A項目:AAA, B項目:BBB, C項目:CCC
      • B項目はキー項目で他のログと結合する
DATE HOST SERVICE CONTENT
yyyy-mm-dd HH:MM:SS.sss abc-host abc-service A項目:AAA, B項目:BBB, C項目:CCC

ログファイルの編集

"CONTENT"項目に必要な項目が入っているので、分割して各項目単位に編集が必要

DATE HOST SERVICE CONTENT
yyyy-mm-dd HH:MM:SS.sss abc-host abc-service A項目:AAA, B項目:BBB, C項目:CCC

 ↓ 編集 ↓

HOST A項目 B項目 C項目
abc-host AAA+α BBB+β CCC-Θ

Amazon S3 にバケット&フォルダ作成

  • 「Amazon Athena のクエリ結果を保存」するフォルダを作成
  • 「元ネタのログファイル」をアップロードするフォルダ、「編集した結果」をアップロードするフォルダを作成

作成イメージ

新規バケット
 ┣ athena  「Amazon Athena のクエリ結果を保存」するフォルダ
 ┣ in_log  「元ネタのログファイル」をアップロードするフォルダ
 ┃  ┗ ※Amazon Athena のテーブル単位にフォルダを作成
 ┗ out_glue「編集した結果」をアップロードするフォルダを作成
    ┗ ※Amazon Athena のテーブル単位にフォルダを作成

AWS Glue DataBrew でログを編集

ノーコードでサクッと編集ができる「 AWS Glue DataBrew 」で、ログを編集します。
今回は下記の順番で作業します。"レシピ"を作るのがメインになります。

  1. データセット
  2. プロジェクト
  3. レシピ
  4. ジョブ

データセット

インプットになる Amazon S3 のフォルダを選択します。
ログファイルの種類ごとに作成します。

image.png

入力項目

項目 入力値
S3 からソースを入力 インプットのログフォルダを Amazon S3 から選択
選択したファイルタイプ CSV
CSV 区切り記号 カンマ
列ヘッダー値 最初の行をヘッダーとして扱う

プロジェクト

データセットで取り込んだデータ項目に対して、画面のスプレッドシートで確認します。
また、後述する"レシピ"を追加して項目に編集を行います。
※項目だけではなく、結合などもできる

プロジェクト作成時に選択するデータセットから参照される Amazon S3 のフォルダにログファイルが必要。
ログファイルがアップロードされてないと、[Dataset Path] cannot find any objects matching [S3 Path] のエラーになるので注意。

image.png

image.png
※青塗ばかりでよく分からないですね。こんな感じの画面って思ってください。

入力項目

項目 入力値
レシピ名 プロジェクト名+"recipe"の自動生成
データセットを選択 "マイデータセット" -> 上記で登録したデータセット
ロール 新しい IAM ロールを作成 ※以降は作成した IAM ロールを利用

レシピの登録

各項目を編集する作業をレシピにまとめます。
画面から編集操作を選択するのですが、結構な編集パターンが有ります。
レシピはバージョン管理できるので、後述する"ジョブ"への設定もバージョン単位です。

image.png

レシピの編集パターン

大項目だけで、こんなにある。
使ったこと無いですが「外れ数」「データのマスキング」は便利だなぁと思います。

- - - - -
ソート 列アクション フィルター フォーマット クリーン
値の抽出 欠落している値 無効な値 重複した値 外れ数
列を分割 列をマージ 列を作成 ネスト-ネスト解除 ピボット
ユニオン テキスト 数値をスケール カテゴリデータエンコード エンコード
数学関数 集計関数 テキスト関数 日付関数 ウィドウ関数
データのマスキング 暗号化 復号化 ウェブ関数 その他関数
カスタム式関数 - - - -

レシピのインポート

登録(バージョン発行)したレシピは他のプロジェクトへインポートができる。
同じようなレシピはインポートして修正でサクッと完成する。

image.png

レシピは登録しなくても、画面上は作業バージョンで見えるので、登録(バージョン発行)する事を忘れがちなので注意。

レシピ

レシピはデータセットへの編集テンプレートです。
バージョン管理できます。レシピから後述する"ジョブ"へレシピをバージョン単位で設定します。

image.png

ジョブ

ジョブはデータセットで登録した Amazon S3 のフォルダから、レシピのデータ編集を加えて新たにジョブで設定した Amazon S3 のフォルダへデータファイルを作成します。
※登録時に「ジョブ作成し実行する」をクリックして最初の実行を行います

image.png

入力項目

項目 入力値
ジョブタイプ レシピジョブを作成
ジョブ入力 データセット
データセット 上記で登録したデータセット
レシピ 上記で登録したレシピ
出力-出力先 Amazon S3
出力-ファイルタイプ CSV
出力-区切り記号 カンマ
出力-圧縮 None
S3 の場所 上記で登録した S3 out_glue フォルダ ※「編集した結果」をアップロードするフォルダ
ロール 上記で登録したプロジェクトのロールを選択

ジョブの実行履歴

image.png

Amazon Athena で AWS Glue からテーブルを作成

Amazon Athena のクエリエディタからテーブルを作成。「AWS Glue クローラ」を選択する。

image.png

Crawler

クローラは登録した Amazon S3 のフォルダからデータを集めてテーブルを作成します。
登録後に「Run Crawler」をクリック。

image.png

入力項目

項目 入力値
Data source configuration Not yet
Data sources 上記で登録した S3 out_glue フォルダ ※「編集した結果」をアップロードするフォルダ
IAM role 新しい IAM ロールを作成 ※以降は作成した IAM ロールを利用
Target database 上記で登録したデータセット
Table name prefix プレフィックスを記載。プレフィックスなので注意

Crawler で作成した IAMロール(ポリシー)は、Amazon S3 のリソースを限定しているので、他のジョブから Crawler を登録した際には利用できません。そのため、ポリシーを更新して共用できるように修正しました。

Amazon Athena で クエリを利用してログを整理

ここまでで、ログファイルから必要なテーブルを作成できました。
後はテーブルから"煮るなり焼くなり"ログデータをクエリで整理します。
クエリは、ほとんど Big Query と変わりません。SQL ができれば大丈夫。

image.png

おわりに

全体として処理はイメージしやすかったのですが、AWS Glue DataBrew の編集項目の選択に悩みました。選択肢の数が多いので、どれがやりたい事なのか探しました。
レシピをコピーできるは楽ですが、もっと複雑な編集が必要な場合は、Aws Glue でコードを書いた方が良さそうです。
パッとログを整理する分には、今回のやり方で十分だと感じました。

また、今回は継続的なログ整理ではなかったので、コスト面を気にしていませんが、今後は Google Cloud (Big Query) と AWS (Athena) をコストなどを含め、総合的に比較して利用するサービスを検討したいと思います。


参考(感謝)

33
3
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
33
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?