Athenaを簡単に使ってみる
Posted: | Categories: AWS | Tags: Athena
Athenaは「s3にあるファイルをSQLで検索できる」というサービスになる。
既にs3にファイルの形で置かれている場合はAthenaで集計が可能だが、 コストが読み込んだファイルに応じてかかるので、なんらかの形で課金を抑える施策が必要。
日付でログを分けるような運用を考えてみる。
調査の流れ
下記がまとまっていて分かりやすい。 Amazon Athenaではじめるログ分析入門 - Qiita 上記で紹介されていた、下記のページ Amazon Kinesis Firehose, Amazon Athena, Amazon QuickSightを用いたVPCフローログの分析 | Amazon Web Services ブログ も、Athenaを理解するのに役立つ、ただ… ただnginxログ解析のために、
イベントを受けるlambda -> kinesis firehouse -> s3 -> Athena は冗長ではないか… もうちょっとラクはできないのか AWS Glue ? GlueはRedshift, RDS, S3をソースにできる。ただpython, scalaで記述するらしい。
私がソースにしたいのは、CloudWatchなのだ。
が、考えてみると、CloudWatch -> s3へエキスポートできれば良い。方法はあった。 Amazon S3 へのログデータのエクスポート - Amazon CloudWatch ログ
割とシンプルにありそう。たぶんAPIもあるだろう。 で、なぜkinesis firehoseか?を考えると、こちらはリアルタイム解析なのだと思う。 今回の要件については…. redashで解析できれば良いので日時で良かろう。
ただディレクトリ構造については悩ましい。 s3に吐き出すディレクトリ構造については、他のエントリを参考にしよう。
Amazon Kinesis Firehose, Amazon Athena, Amazon QuickSightを用いたVPCフローログの分析 | Amazon Web Services ブログ
クエリのパフォーマンス向上とコスト削減を目的とした、Athenaにおけるデータのパーティション化。
このセクションではLambda関数を用いてS3に格納されたAthena用のデータを自動的にパーティション化する方法を示します。
この関数はFirehoseストリームに限らず、他の手段でS3上に年/月/日/時間のプリフィックスで格納されている場合でも使用できます。
パーティショニングはAthenaにおいてクエリのパフォーマンス向上とコスト削減を実現するための3つの戦略のうちの1つです。
他の2つの戦略としては、1つはデータの圧縮、そしてもう1つはApache Parquetなどの列指向フォーマットへの変換があります。
Apache Parquetについては http://nagix.hatenablog.com/entry/2015/12/08/235512 が分かりやすかった。 解析には特定の列を用いて解析を行うが、あらかじめ列ごとのデータに分かれていた方が、特定の列のみを読み込むことができ、メモリ、検索の観点から早い。
Read more...