yigarashiのブログ

学んだことや考えていることを書きます

OpenTelemetryをざっくり学んだ

OpenTelemetryについての情報を見聞きする頻度がどんどん上がっており、各種サーバー監視サービスやクラウドでも対応が進んでいることから、そろそろ自分の引き出しに入れたいと感じました。概要を自分で説明できるくらいを目指してざっくり学んだログを自分用に残します。

OpenTelemetryとは

opentelemetry.io

公式トップページにある以下が全てを物語っているとは思います。メトリック、ログ、トレースはお馴染みのObservability三銃士ですね。

OpenTelemetry is a collection of APIs, SDKs, and tools. Use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) to help you analyze your software’s performance and behavior.

加えて以下の特徴も重要だろうと思います。

Open Source, Vendor Neutral

OpenTelemetryの特徴的な用語・概念

個別の気になった話題

OpenTelemetry Logs

OpenTelemetry Logging | OpenTelemetry

他のテレメトリーとの相互連携が推されているのが面白いと思いました。TraceIdやSpanIdがしっかりログのデータモデルの仕様に含まれています。このあたりのテレメトリーの融合によるo11yの改善は、テレメトリーデータを受け取って可視化するバックエンドサービスの頑張りにもだいぶ左右されるように感じました。面白いサービス、機能がたくさん出てくると良いですね。

OpenTelemetry Metrics

OpenTelemetry Metrics | OpenTelemetry

各ポイントのデータにラベルをつけられるのが面白いと思いました。production/staging、ホスト、サービス、ユーザーごとなど、さまざまな属性をつけて柔軟に可視化する未来が容易に想像できます。

また、MeterProvider、Meter、Instrumentとプログラミングモデルが定義されているのも面白いです。実際アプリケーションで処理の回数を数えたり、何かしら自前でメトリックを吐きたいと思ったとき、どこにデータを記憶しておくか、数字を積み上げるのかなど、微妙に考えることが多くて困った記憶があります。それらをSDKが提供するAPIでレールに載って書けて、勝手にOpenTelemetryに対応した形式にしてくれるのは魅力的に見えます。

Host Metrics Receiver

ここまでの情報を集めたときに、現状よくあるサーバー監視ツールのエージェントがやっているような、ホストメトリックはどう扱われるのか気になりました。OTLCにOTLPでデータを投げつけるとしたら、なんらか別にエージェントを立てる必要があるのか?といったことを疑問に思ったのです。

結論としてはOTLCのreceiverとして実装されていました。

github.com

つまりOTLPはOTLCのデータソースのひとつに過ぎず、Host Metric ReceiverのようにOTLCのreceiverもプラグイン形式で拡張できるということです。exporterが拡張可能なのは直感的に理解できますが、receiverも拡張できるのは個人的に面白いポイントでした(receiverと言いつつ自分でデータを取りに行っているわけなので……)。

リポジトリを流し読みしていたところOTLCの設定ファイルから最小セットのバイナリを生成するツールも発見しました。面白いですね。

プロファイル

OpenTelemetry Meetup 2023-10 - connpassの発表資料をいくつか拝見したところ、第4のテレメトリーとしてプロファイリングの追加も進んでいるという話を見かけました。トレースをさらにドリルダウンして、関数ごとの実行回数やCPU時間、メモリ消費量などを見られるのは、確かに正当進化という印象を受けます。

以下の発表資料の37枚目では「継続的プロファイリング」というワードも登場しており非常にワクワクしました。プロファイリングといえばパフォーマンスに問題があるときに満を持して有効化するものという認識でしたが、その常識が変わり、常にプロファイリングするのが当たり前の未来が来るかもしれないということですね。 speakerdeck.com

まとめ

OpenTelemetryについてざっくり学んだ様子をまとめました。システムの開発運用が大きく改善するのを期待できるプロジェクトという印象で、自分の中でも重要なトピックのひとつに位置付けらました。今回の学びをベースに情報収集・実践を続けていきます。