Kinesis Data Streamsを追う kinesis-tailf - fujiwara-ware 2024 day 22

2024/12/22に公開

この記事は fujiwara-ware advent calendar 2024 の22日目です。

kinesis-tailf とは

https://github.com/fujiwara/kinesis-tailf

kinesis-tailf は、読んで字のごとく Amazon Kinesis Data Streams を tail -f するためのツールです。

指定した stream の末尾を追い続け、新しいレコードが追加されるたびにそれを表示します。

https://aws.amazon.com/jp/kinesis/data-streams/

なぜ作ったのか

Amazon Kinesis Data Streams は、リアルタイムデータストリームを処理するためのサービスです。筆者は主にログデータを処理するために使っています。

Kinesis に流れたログは最終的には Firehose を経由して Amazon S3 などに保存されます。しかし S3 に保存されるまでには数分の遅延(バッファリング期間)があります。開発中はこのバッファリングがもどかしく、流れているログをリアルタイムで確認したくなります。

kinesis-tailf は、このようなニーズに対応するために作られました。

使い方

使い方は簡単です。以下のように stream 名を指定して実行するだけです。

$ kinesis-tailf -stream my-stream

これで指定した stream の末尾を読み続けることができます。

stream が複数のシャードを持つ場合、デフォルトでは kinesis-tailf はすべてのシャードの末尾を読んだ結果を出力します。シャードごとに読みたい場合は -shard-key オプションを指定して、振り分けに使うキーを指定できます。値を kinesis のハッシュ化アルゴリズム(MD5)でハッシュキーに変換し、その値を元にシャードを選択します。

kinesis-tailf は、KPL (Kinesis Producer Library) によって集約されたレコードの読み取りにも対応しています。KPL によって集約されたレコードは、1つのレコードに複数のレコードが含まれている形式です。Protocol Buffers でシリアライズされているため、そのままでは人間が読むには向いていません。kinesis-tailf は、KPL で集約されたレコードを自動的に展開して表示します。

https://docs.aws.amazon.com/ja_jp/streams/latest/dev/developing-producers-with-kpl.html

デフォルトでは、読み取ったレコードは無加工で標準出力に表示されます。レコード末尾に改行が含まれてないと全てが連結されて表示されてしまうため、人間が読むのが難しくなります。このような場合(JSON形式でありがち)、-lf オプションを指定することで、読み取った各レコードの末尾に改行を追加して見やすく表示できます。

まとめ

kinesis-tailf は、Kinesis Data Streams を tail -f するためのツールです。リアルタイムでログデータを確認したい場合に便利です。

日常的に使うことはないかもしれませんが、ログデータのデバッグや開発中のデータの確認など、必要な場面で活用していただければと思います。

それでは、明日もお楽しみに!

参考資料

https://techblog.kayac.com/scalable-tailf

https://aws.amazon.com/jp/blogs/news/building-with-ecs-by-kayac/

https://speakerdeck.com/fujiwara3/amazon-ecs-game-server

Discussion