CloudNative Days で OpenTelemetry のはなしをしました
こんにちは、OpenTelemetry Advent Calendar 2024 の 12/23 担当のものです!
年末の風物詩である CloudNative Days で、OpenTelemetry(以下、OTel)の登壇をさせていただきました。思い返すと CNDT2022、CNDT2023、CNDW2024 とありがたいことに OTel ネタで採択していただいたので、それらのスライドと共に内容を振り返りつつ、関連する最近の個人的な OTel ホットトピックについても触れていこうと思います。
CNDT2022
オブザーバビリティにおける重要な要素の一つととして「テレメトリーシグナル同士の関連付け」をテーマに、OTel でどのようにログやトレース、メトリクス関連づけることができるかを解説しています。収集したテレメトリーシグナルを Grafana スタックで可視化し、簡単にテレメトリー間をジャンプできるデモを行いました。
デモで使っている Span Metrics Processor は廃止され、現在は Span Metrics Connector です。またトレースとメトリクスを関連付けるエグザンプラーに関しては、OTel Go SDK の機能として取得可能になりました。これに関しては ymotongpoo さんのブログ記事 が詳しいです。
CNDT2023
OTel の「自動計装」をテーマに、さまざまな言語でどのようにコードに手を加えない計装を行えるかを解説しました。
この発表ののちに OTel ではコードに手を加えない計装を「ゼロコード計装」としています。したがって ↑ のスライドのタイトルはイマは正確には「"ゼロコード計装"のイマ」です。
本発表で少し触れた Go のゼロコード計装について簡単にアップデートを書きます。opentelemetry-go-instrumentation は依然として WIP ステータスです。eBPF を使って実現しており、内部の仕組みはふんわり こちらのスライド で解説をしました。
eBPF ではない Go のゼロコード計装として「Go Compile Time Instrumentation」を仕組みとしたツールもあります。代表的なものとしては、Datadog の「orchestrion」や、Alibaba Cloud の「opentelemetry-go-auto-instrumentation」が存在しています。コンパイル時に AST から使われているライブラリを解析して、計装コードを挿入する仕組みのようです。サポートしているライブラリの数も eBPF ツールに比べてかなり多いです。本当は orchestrion のコードを読んで解説ブログをアドカレで出したかったのですが、太刀打ちできなかったので冬休みの課題図書としました。
orchestrion は Datadog ユーザー向けの計装ツール(2024/11に GA)だったのですが、現在 OTel プロジェクトに寄贈する提案が Issue としてあがっています。Alibaba Cloud の opentelemetry-go-auto-instrumentation についても同様です。それに伴い、Go Compile Time Instrumentation SIG の立ち上げも提案 されています。Go ゼロコード計装の今後の動向が気になりますね。
CNDW2024
OTel Collector のリモート管理をテーマに「Open Agent Management Protocol(OpAMP)」について解説しました。
KubeCon/CloudNativeCon で取り上げられていたり、O’Reilly Learning OpenTelemetry にも複数箇所で記述があったりだが、あんまり情報がない領域だったので思い立ってプロポーザルを出しました。
- Remote Control for Observability Using the Open Agent Management Protocol
- OpAMP: Scaling OpenTelemetry with Flexibility
本発表では時間の都合上触れられなかったのですが、OpAMP バックエンド製品の BindPlane については以下ブログに書きました。CNDW2024 のセッションでは OpAMP バックエンドのサンプルコード(シンプルな UI)から OTel Collector をリモート制御しましたが、BindPlane を使うことで高機能な UI で管理を行うことができます。エージェントは BindPlane の OTel Collector ディストリビューションを使うことになります。自前で OpAMP(例えば opamp-go
実装)を使って OpAMP サーバーを構築することも可能ですが、このような製品を使うことも選択肢の一つとしてあるかもしれません。詳しくは以下ブログを参照ください。
OTel Collector を提供するオブザーバビリティベンダーが OpAMP を使っていくケースもありそうです。Grafana Distro の Grafana Alloy や、AWS Distro の ADOT Collector には OpAMP に関する言及がされています。
- Support for OpAMP to manage fleet of Alloy agents
- "The way we want to approach this is via OpAMP, where the supervisor controls the collector and with it hotreloads."
最後に
OTel は見るべき範囲が広大だったり、変化も早かったりでキャッチアップするのが大変ですが、OTel Meetup も定期的に開催され毎度勉強になるセッションが聞けますし、ドキュメントの 日本語化プロジェクト も進んでるので、コミュニティの力を借りながら今後も継続的にウォッチしていければと思います。
最後に CloudNaive Days を運営してる方々に感謝ですが、毎年本当にありがとうございます。
Discussion