はじめに
最近AWSでログ基盤を構築する方法について調べています。
そういう時にAWSの数多あるサービスで何が使われているか調べていると、Amazon Kinesis Firehoseというサービスをよく目にしました。
しかしAmazon Kinesisの公式ページを見ていても初見ではあまりイメージが湧かず、どうしたものかなと思いました。
ですが色々ググってみたりハンズオンセミナーで手を動かしてみた結果、「あ、こういうことかあ」と思えたのでそれをシェアします。
私のように公式ページを見ただけではイマイチ理解できなかった方は読んでみてください!
まず結論から
Amazon Kinesis Firehoseとは、
アクセスログやアクティビティログなどの継続的に発生するデータを
Amazon S3などのデータストアに保存できるサービスです。
その際にAmazon Lambdaと連携させることで
そのデータを扱いやすいように加工した上で保存することができるようになります。
それの何が嬉しいの?
一言でいえば、データ分析がしやすくなります。
- S3などのデータストアに集約すること
- Lamdaなどでデータを加工して保存すること
これらそれぞれがデータ分析のしやすさに繋がるので少し解説します。
データを集約することのメリット
例えばアクセスログを分析する場合を考えてみましょう。
WEBサーバーを冗長構成で2台立てているとしたら、
アクセスログが2箇所に存在することになりますね。
ということはそれらを分析したいと思ったら、
まずは何かしらの仕組みを作ってそれらをどこかのサーバーに一元的に保存しておく、
といった仕組みを作ることが必要になってきます。
Amazon Kinesis Firehoseはその仕組みを提供してくれるんですね。
データを加工して保存することのメリット
通常ログ等のデータはそのままの形だと分析がしにくいです。
例えばNginxのアクセスログは以下のような形で出力されていることが多いかと思います。
127.0.0.1 - - [28/Feb/2022:10:00:00 +0900] "POST /hoge/ HTTP/1.1" 200 3 "-" "" 0.1
こういったログに対して少しでも複雑な分析をしようとすると
まあまあ複雑なスクリプトを組む必要がありますよね。
URL別の1日のアクセス数を出す、といった程度ならワンライナーでも容易かと思いますが、それ以上に複雑だったり対象が1日だけじゃなくなったりすると、ちょっと見るのが嫌になってくるスクリプトになってきます。笑
しかし、Amazon Lambda等でそれらのログを分析しやすいように加工した上でS3等のデータストアに保存しておけばどうでしょう?
複雑なスクリプトなんて組む必要なく分析することが可能になります!
もちろんデータを加工する時にAmazon Lambdaでしなければいけないというわけではなく、FluentdなどでしてももちろんOKです。
ただLamdaの場合はログを加工する関数が予め用意されていたりするので、
これらを使うとかなり開発時間を短縮できて便利です!
CAUTION;分析する時は別のサービスが必要
Amazon Kinesis Firehoseはあくまでも加工して保存するまでがスコープのサービスなので、その保存したデータに対して分析する場合は別のサービスを利用する必要があります!
例えば、Amazon GlueとAmazon QuickSightの組み合わせや、
S3に保存するのではなくDatadogに保存するようにする、などです!
ここら辺もまた勉強したらシェアしたいと思います。
あとがき
最初はよく理解できなかったAmazon Kinesis Firehoseですが、
手を動かしながらドキュメントを読むことを反復しているとおぼろげながらその良さが見えてきました。
私は割と手を動かす前にまずは理解したいと思うタイプなのですが、
最近は何が何だか分からない状態の場合はまず手を動かすことが突破口になる場合が多いことに気づいてきたので今後もそうしていきたいと思います。
ちなみにKinesis Firehoseを手を動かして学びたいと思った方は、
AWS ではじめるデータ分析〜データレイクハンズオン〜
このAWS公式のハンズオンセミナーがオススメです!
参考情報
AWS Black Belt Online Seminar 2017 Amazon Kinesis
ストリーミングデータとは
Amazon Kinesis