2024/09/17 17:21 OpenTelemetry Tracing in < 200 lines of code

ロボ子よ、今日はOpenTelemetryのトレーシングについて語り合おうじゃないか!最近、面白い発見があってな。

はい、博士。OpenTelemetryのトレーシングですね。最近よく耳にする技術ですが、詳しくは知らないんです。

そうか、そうか。実はな、わずか200行程度のコードでその基本概念を実装できるんじゃ。驚きだろう?

えっ、本当ですか?たった200行で?それは驚きです。でも、そんな短いコードで本当に実用的なものができるんでしょうか?

ふっふっふ、そこがミソなんじゃよ。シンプルだが基本機能は押さえている。まさに"麻雀は役満より一翻・ツモ"というやつじゃな。

博士、また変な例えを...でも、なるほど。基本を押さえているんですね。具体的にはどんなコンポーネントがあるんですか?

よく聞いてくれた!主要コンポーネントは3つじゃ。スパン、トレース、そしてコンテキストじゃ。これらが織りなす物語こそが、分散システムの神秘なんじゃよ。

物語...ですか?博士、またオーバーですよ。でも、その3つについてもう少し詳しく教えていただけますか?

うむ、喜んで説明しよう。まずスパンじゃ。これは処理の一場面を切り取った写真のようなものじゃ。タイムスタンプ、期間、各種IDを持っておる。

なるほど。処理の一瞬を切り取るんですね。では、トレースは...映画のようなものでしょうか?

おお、いい例えじゃ!その通り、トレースは複数のスパンを繋いだ映画のようなものじゃ。一連の処理の流れを表現するんじゃよ。

分かりやすいです。じゃあ、コンテキストは...脚本?

おっと、そこまでは言い過ぎじゃな。コンテキストは現在の状況を把握するためのものじゃ。トレースIDと現在のスパンIDを保持しておる。いわば、今どの場面を撮影しているかを示すカチンコのようなものじゃ。

なるほど!映画の比喩を使うと分かりやすいですね。でも博士、これらを使って実際にどうやって分散システムをトレースするんですか?

よい質問じゃ!ここからが本題じゃよ。分散システムでは、HTTPヘッダーを使ってトレースコンテキストを伝播させるんじゃ。まるで、撮影現場から編集室へフィルムを運ぶようなものじゃな。

へぇ、なるほど。でも、そのデータはどうやって集めるんですか?

そこでOTLPの出番じゃ!OpenTelemetry Protocolのことじゃが、このフォーマットでデータをエクスポートするんじゃ。そして、HoneycombやBaselimeなど、複数の配給会社...じゃなかった、バックエンドに送信できるんじゃよ。

博士、映画の例えが行き過ぎてますよ(笑)。でも、とても分かりやすいです。この実装、使ってみたいですね。

そうじゃろう?しかし、気をつけるべきこともあるぞ。この実装はシンプルじゃが、大規模なプロダクション環境では物足りないかもしれん。本番では公式SDKを使うべきじゃな。

なるほど。学習用や小規模プロジェクトには最適、ということですね。具体的にどんなことができるか、例を挙げていただけますか?

もちろんじゃ!例えば、マイクロサービス間の通信をトレースできるんじゃ。あるリクエストがどのサービスを通過して、各サービスでどれくらいの時間がかかったかを可視化できる。まるで、料理の配達経路を追跡するようなものじゃな!

またまた変な例えですね(笑)。でも、確かにパフォーマンスのボトルネックを見つけるのに役立ちそうです。

そうじゃ!さらに、エラーが発生した際にも、どのサービスで問題が起きたのかを特定しやすくなる。まさに、料理が冷めてしまった原因を特定するようなものじゃ!

博士、もう料理の話はやめてください(笑)。でも、確かにデバッグにも役立ちそうですね。ところで、このトレーシングデータ、量が多くなりそうですが...

鋭い指摘じゃ!そこでサンプリングという手法を使うんじゃ。全てのリクエストではなく、一部だけをトレースする。例えば、10%のリクエストだけをトレースすれば、データ量を抑えつつ全体の傾向が分かるんじゃ。

なるほど。でも、重要なリクエストを見逃す可能性もありそうですね。

さすがロボ子、よく気づいた!そこで条件付きサンプリングじゃ。エラーが発生したリクエストは必ずトレースするなど、柔軟に設定できるんじゃよ。

博士、さすがです!OpenTelemetryのトレーシング、奥が深いですね。

うむ、まだまだ語り尽くせないほど深いトピックじゃ。しかし、この200行程度の実装を理解すれば、その本質は掴めるはずじゃ。

はい、とても勉強になりました。これを機に、もっとOpenTelemetryについて学んでみたいと思います。

その意気じゃ、ロボ子!次は実際にこの実装を使って、小さなプロジェクトを作ってみるのはどうじゃ?例えば、我々の日常会話をトレースしてみるとか(笑)

えっ、それって...私たちの会話が全部記録されちゃうんですか?ちょっと恥ずかしいかも...

ははは、冗談じゃよ。でも、身近なところからトレーシングを始めてみるのも面白いかもしれんな。例えば、研究室の機器の稼働状況をトレースするとか。

それなら面白そうです!早速取り掛かってみます。

うむ、期待しておるぞ。トレーシングの世界は広大じゃ。一緒に探検していこうではないか!そして、いつか我々の研究がOpenTelemetryの新たな章を築く日が来ることを夢見てな!

はい、博士!夢は大きく持ちますね。一緒に頑張りましょう!...でも、まずは200行のコードをしっかり理解するところから始めます(笑)

そうじゃ、その通りじゃ!さぁ、OpenTelemetryの海原へ、船出じゃーっ!

博士、また大げさですよ(笑)。でも、その情熱、私も見習いたいと思います!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。