萌えハッカーニュースリーダー

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

出典: https://jeremymorrell.dev/blog/minimal-js-tracing/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

博士、また大げさですよ(笑)。でも、その情熱、私も見習いたいと思います!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search

By month