6
1

access.logをAthenaで分析できる環境を構築してみた話

Last updated at Posted at 2024-09-30

概要

EC2で収集したaccess.logをS3に転送して、S3上のgz形式のログファイルをAthenaで分析できる環境を作成しました。


そもそもAthenaってなに?

Amazon Athena は、オープンソースフレームワーク上に構築されたサーバーレスのインタラクティブな分析サービスで、オープンテーブルとファイル形式をサポートしています。
Athena は、ペタバイト規模のデータが存在する場所で分析するための簡素化された柔軟な方法を提供します。Amazon Simple Storage Service (S3) データレイクと 25 以上のデータソース (オンプレミスデータソースや SQL または Python を使用した他のクラウドシステムを含む) からデータを分析したり、アプリケーションを構築したりできます。
Athena は、オープンソースの Trino および Presto エンジンと Apache Spark フレームワーク上に構築されており、プロビジョニングや設定は不要です。

要するに S3にデータを設置すれば、それだけで分析できてしまう っていうことです!
なのでサーバーの管理とか、RDSにデータを入れたりする必要は全くないです!


対応方法

nginxのアクセスログをS3にファイルとして保存するのは、こちらの記事を参照ください!


つまずいたところ

S3にaccess.logは登録されるようになったものの、ユーザーやグループを特定できる情報が含まれていませんでした。
そこで、こういった情報もログに記録できるように、ログイン処理の中で以下のメソッドを追加しました。

// 省略してわかりやすく書いてます
function nginxNote()
{
    $auth = getAuth();
    header('X-グループのID: ' . $auth['グループのID']);
    header('X-ユーザーのID: ' . $auth['ユーザーのID']);
}

これで、アクセスログにグループのIDユーザーのIDを付加することができました。
あとでAthenaでログ分析する際に、どのユーザーやグループがどういう操作をしているかが簡単にわかるようになります。


Athena以外の候補

今回はAthenaを選出しましたが、実はこれ以外に2つほど候補がありました。

  1. ログ取得用のスキームを作成する

    1. メリット
      1. 機能に組み込みやすい
      2. 柔軟にログを取得する場所を指定できる
    2. デメリット
      1. 今後データがたまった時、取得時に負荷がかかりそう
      2. 新たにRDSを作成して進めようとしていたので、料金や負荷状況の監視など、運用コストが高い
  2. Kibanaを使う

    1. メリット
      1. 表やグラフで視覚的にわかりやすく分析できる
      2. 社内でも実績があり、転用できる(かも?)
    2. デメリット
      1. 別途料金がかかる

それぞれのメリット・デメリットを比較して、AWSに乗っているシステムなので工数が抑えられそうなことや、Lambdaなどの拡張性を考慮して、Athenaでやることに決めました。


今後の展望

今の段階で達成できている部分もありますが、まだまだ改善の余地があるので、さらに効率化と自動化を目指して以下の点に取り組む予定です。

1. nginxの安定運用

現在、access.logの書き込みが毎日朝3時に一時停止してしまう問題が発生しています。
※おそらく、ログローテーションのタイミングでgzに固める際に、権限の問題が起きて新しいログファイルに書き込みできなくなっている模様。

そのため、今は応急処置として、毎朝5時にnginxを再起動するジョブを動かしています。
ここはログローテーションの設定をしっかり見直して、nginxを安定稼働させる必要があるかなと思っています。


2. ログ分析の自動化

Athenaで利用状況を抽出できるようになりましたが、今は手動でSQLクエリを実行してデータを取得しています。
今後はこれを自動化して、もっとラクに分析できるようにする予定です。

  • BIツールの導入
    QuickSightを使って、ログデータを視覚的に分析できるように進めています。
    これが完成すれば、ダッシュボードでリアルタイムのデータが見えるようになり、どれくらい機能が使われているかすぐに把握できるはずです!

  • Lambdaでの自動化
    AWS Lambdaを使って、Athenaのデータ抽出を定期的に自動化する計画です。
    これで、SQLを手動で実行する手間が省けて、定期的にデータを取得する作業も効率化されます。


まとめ

AthenaではMySQLとほぼ同じ構文でデータを取得できて、めちゃ便利です!
最終的には全自動でデータが取れて、誰でも簡単に抽出できる環境を目指しています。
これからもAWSや他のツールを駆使して、ログ管理や分析の効率化を進めていきたいです。


6
1
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
6
1