S3に保存された生ログファイルをSQLで分析できるようにする(Amazon Athena)

こんにちは。データサイエンティスト兼、データ基盤エンジニアのshobyです。

皆さんは「S3の生ログデータを分析してくれ」と言われた場合、どうしていますか?

ログ分析基盤に入っておらず、S3にしか存在しない生ログデータを分析するのは骨が折れる作業です。

そのような生ログデータの分析が必要になるタイミングは何か問題が発生したタイミングであることが多く、 大慌てでS3からファイルをダウンロードしてきてひたすらgrep...といったパターンも多いのではないかと思われます。

生ログの分析は簡単にできるようにしたい、とはいえ発生頻度が低い生ログの分析のためにログ分析基盤を作るのは維持コストがかかる... そんなお悩みにぴったりなのがAmazon Athenaです。

今回は、S3に保存された生ログファイルをAmazon Athenaを用いてSQLで分析できるようにする方法をご紹介します。

概要

  • Amazon Athenaとは
  • Athenaのセットアップ
  • Athenaのパーティション設定
  • TVISION INSIGHTSでの活用事例

Amazon Athenaとは

Amazon Athenaとは、SQLを用いてS3に存在するファイルを分析することのできるサービスです。 サーバーレスでクエリ課金であり、データの抽出・変換・ロード処理も実装の必要がないため、発生頻度の低い生ログファイルの分析にも低い維持コストで利用することができます。*1

Amazon Athenaを用いたS3ファイルの分析の流れは以下のような形です。

f:id:shoby:20180530191520p:plain

AWS Glue より引用

S3のデータに対してAWS Glueでスキーマ定義をし、それをAthenaから読み込んでPresto互換のクエリを発行することができます。

S3からのデータ抽出・変換・ロード処理はAWS Glueがオンデマンドで自動で行なってくれ、クエリの実行結果はS3のAthena用Bucketに保存されます。

Athenaのセットアップ

今回は、S3に保存されたCSVファイルに対してAthenaで分析を行う場合を考えます。

まず、作業するユーザーにIAM ManagerでAmazonAthenaFullAccessのポリシーを付与します。

f:id:shoby:20180530195247p:plain

次にスキーマ定義を行います。 スキーマ定義は以下の3つの方法が存在します。

  1. CREATE TABLE文の発行
  2. 設定画面による手動設定(CREATE TABLE文を生成)
  3. AWS Glueクローラーによる自動設定(スキーマを推定)

データ構造に変化がないファイルであれば1か2、データ構造に変化があるファイルであれば3の方法を取るのが良さそうです。

今回は構造化されたCSVデータが対象なため、2の設定画面による手動設定を選びます。

まず、テーブルの作成から手動を選びます。

f:id:shoby:20180530201038p:plain

データベース名、テーブル名、S3のpathを入力します。

f:id:shoby:20180530202147p:plain

データ形式でCSVを選びます。

f:id:shoby:20180530201616p:plain

カラムの定義をします。

f:id:shoby:20180530201744p:plain

パーティションの設定をします。(詳細は後述します)

f:id:shoby:20180530202021p:plain

以上でテーブルが作成でき、クエリを実行することができるようになります。

f:id:shoby:20180530202450p:plain

Athenaのパーティション設定

Athenaはデフォルトでは、S3の特定pathのファイルが全てスキャン対象になってしまうため、 パーティション設定をすることで、スキャン対象を絞り込むことができます。

ただし、フルスキャンの場合でも、1 TB あたり数ドルと格安なため、分析対象が膨大な大容量ログでない限り、参照頻度の低い生ログの分析では深刻に捉える必要はないかもしれません。

料金 - Amazon Athena | AWS

パーティションを追加する場合には、以下の設定をご参照ください。

docs.aws.amazon.com

パーティションの設定方法は2つあり、ディレクトリ名を key=value 形式にしてファイルを置き直し、 MSCK REPAIR TABLE コマンドを実行する方法か、 手動でディレクトリを一つずつパーティションに追加する方法です。

どちらも運用にそれなりの手間がかかります。

TVISION INSIGHTSでの活用事例

TVISION INSIGHTSでは、Amazon Athenaをログ分析基盤に入れる前の生ログの検証に用いています。

現在、TVISION INSIGHTSではRedashを用いてログデータの欠損や異常値の監視をしていますが、 アラートが発生した場合、Athenaを用いることで、生ログ自体に問題があったのか、ログの抽出・加工・ロード処理の問題があったのか、 原因の特定を素早く行うことができます。

tech.tvisioninsights.co.jp

まとめ

S3に存在する生ログデータを分析するのは骨の折れる作業ですが、 Amazon Athenaを用いることで、低い維持管理コストでS3の生ログデータをSQLで分析をすることができます。

Athenaを活用することで、ログ基盤のデータに問題が発生した場合も、原因の特定を素早くすることができます。

*1:AWSにはRedshift Spectrumなど、直接S3のファイルにクエリが発行できるサービスがありますが、Athenaは専用のインスタンスを立てる必要がなく、クエリ課金であることがメリットです。