ZAICOでは、Android・iOS・Rubyエンジニアを絶賛募集中です! 詳しくは、採用ページをご覧ください。
こんにちは、ZAICO開発チームインフラ担当の大内です。
先日弊社でZAICO社内版ハッカソン(通称FedEx)を実施した際に、ALBのログ解析環境を整備しようと思い構築しました。
背景
AWSで利用している各種サービスのログは蓄積しているのですが、活用までは至っていませんでした。
加えて、弊社のZAICOサービスはサービス開始から途中でドメイン変更があり今のドメインになっており、従来のドメインも併用しているため、そろそろ従来のドメインからのアクセスを完全に切り替えようと思っておりました。
ドメイン切り替えにあたり、従来のドメインを使ってアクセスしているお客さんはどのくらいいるのかを知るためにも可視化して影響度合いを見た方がいいと思い、環境を構築しました。
完成したダッシュボード
元々Redashを使っていたので、Redashで下記のようなダッシュボードを作成しました。
ドメイン別だけではなく、TLS比率やSSLCipher比率別にも出すようにして、将来的にALBでセキュリティポリシーを変更する必要が出てきた場合にも対応できるようにしました。
技術的なお話
裏側のアーキテクチャは以下のような感じです。
Redashは元から利用しており、ALBのログも以前からS3に蓄積していたので、S3のログを元にAthenaでテーブル環境を構築するところが肝でした。
Athena(+Glue)で単純にALBログからテーブル作成すると、テーブル作成の段階のログまでしか取り込まれず、最新のログを見たいとなった場合にGlueのテーブルを更新する必要が出てきます。
そこで今回はPartition Projectionの機能を使うことにしました。
この機能を使うことで、最新のログを見るようにすることが出来るだけでなく、ALBログの範囲を絞ることが出来るのでクエリ実行時間短縮をすることも出来ます。
詳しくは、「Athena Partition Projection」なので検索してもらえば他の方が書かれた記事が出るかと思います。
ALB以外にもWAFやCloudFrontでも利用可能ですが、それぞれログフォーマットが異なっており、テーブル作成時のクエリも異なるのでご注意ください。
まとめ
今回実装したALBのログ解析環境は、ALB以外のログも適切に分析/解析できるデータ基盤を整えてはどうだろうかといい気づきを得られたと思っています。
データ基盤(蓄積/分析/可視化)環境を整備して、より安定したサービス提供を行えるようにしていきたいと思います。