Accelerating the Feedback Loop of OpenTelemetry Instrumentation with otel-tui
by
Y.Matsuda
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
@ymtdzzz otel-tuiでOpenTelemetry 計装のフィードバックサイクルを 高速化する 2025.05.14 Wed. Jagu'e'r オブザービリティ分科会 Meetup#2
Slide 2
Slide 2 text
Yosuke MATSUDA (@ymtdzzz) 株式会社SmartHR プロダクトエンジニア ● 仕事ではRubyを書いています(その前はGolangを3年程) ● プライベートではOpenTelemetryにコントリビュートしたり 関連ツールを作ったりしています ● OpenTelemetryに関連した登壇など 2
Slide 3
Slide 3 text
突然ですが
Slide 4
Slide 4 text
Production環境で OpenTelemetryを利用して いる人
Slide 5
Slide 5 text
OpenTelemetryの採用事例の増加 5 ● 成熟してきたAPIや言語別SDK、ドキュメント ● オブザーバビリティSaaSのOTLP対応 ● OpenTelemetry関連の技術書 ● ミドルウェアや各種ライブラリのネイティブ計装
Slide 6
Slide 6 text
OpenTelemetryの採用事例の増加 ● 成熟してきたAPIや言語別SDK、ドキュメント ● オブザーバビリティSaaSのOTLP対応 ● OpenTelemetry関連の技術書 ● ミドルウェアや各種ライブラリのネイティブ計装 その先に待ち受けているものは? 6
Slide 7
Slide 7 text
OpenTelemetryの運用!
Slide 8
Slide 8 text
● SREやPlatform Engineer ○ 組織全体のテレメトリーパイプラインや分析基盤の整備 ○ サンプリングやフィルタリング方針の検討や共通化 ● アプリケーション開発者 ○ 計装ライブラリの設定調整(アプリレイヤーでのフィルタリ ングなど) ○ ドメインに即したテレメトリー属性の設定 ○ 必要に応じてマニュアル計装 継続的な改善 8
Slide 9
Slide 9 text
トラブルシューティング 9 ● トレースの不具合 ○ 不完全なトレース ● バックエンドやフォーマット関連の不具合 ○ 計装によってスパンの表示のされ方が異なる ○ 変換が上手くいかない(Prometheus→OTelなど)
Slide 10
Slide 10 text
トラブルシューティング 10 ● トレースの不具合 ○ 不完全なトレース ● バックエンドやフォーマット関連の不具合 ○ 計装によってスパンの表示のされ方が異なる ○ 変換が上手くいかない(Prometheus→OTelなど) 解決に時間がかかるケースも・・・
Slide 11
Slide 11 text
OpenTelemetryの難しさ
Slide 12
Slide 12 text
「不完全なトレース」のケース 12
Slide 13
Slide 13 text
「不完全なトレース」のケース 13 RPS制限超過 取り込み上限超過 Sampled flagの伝 搬ができていない 実装内部で Contextを 引き回せていない middlewareや言語 毎の計装の設定不備
Slide 14
Slide 14 text
「不完全なトレース」のケース 14 RPS制限超過 取り込み上限超過 Sampled flagの伝 搬ができていない 実装内部で Contextを 引き回せていない middlewareや言語 毎の計装の設定不備 関連するコンポーネントが多い・・・
Slide 15
Slide 15 text
「計装によってスパンの表示のされ方が異なる」ケース 15 実際の事例(Golang) ● net/httpのOTel計装ライブラリで出したSpan名が上手く出てくれない ● EchoのOTel計装ライブラリだと{method} {path}で出てくれる
Slide 16
Slide 16 text
「計装によってスパンの表示のされ方が異なる」ケース 16 想定外の見え方 計装ライブラリ間の実 装差異 ? ? ?
Slide 17
Slide 17 text
「計装によってスパンの表示のされ方が異なる」ケース 17 計装ライブラリ間の実 装差異 ブラックボックス化されたテレメトリー生成 ? ? ? 想定外の見え方
Slide 18
Slide 18 text
どうすればいい?
Slide 19
Slide 19 text
テレメトリー生成に近いところから可能性を潰す 19 RPS制限超過 取り込み上限超過 Sampled flagの伝 搬ができていない 実装内部で Contextを 引き回せていない middlewareや言語 毎の計装の設定不備 「不完全なトレース」のケース
Slide 20
Slide 20 text
テレメトリー生成に近いところから可能性を潰す 20 RPS制限超過 取り込み上限超過 Sampled flagの伝 搬ができていない 実装内部で Contextを 引き回せていない middlewareや言語 毎の計装の設定不備 「不完全なトレース」のケース 生成から遠くなるほど検証コストが高くつく
Slide 21
Slide 21 text
ローカルで素早くフィードバックを得たい 21 ● ローカルからSaaSやクラウド上に構築したバックエン ドに送信する ○ APIキーの管理やコストの問題 ● ローカルでバックエンドを立ち上げる ○ 今日のテーマ!
Slide 22
Slide 22 text
既存プロダクトを用いた ローカルデバッグの課題
Slide 23
Slide 23 text
● セットアップが結構大変 ○ volume、データソースの設定(Jaegerとかは楽) ● リッチで高コストな機能とUI ○ 各種テレメトリを見に行くための導線が長い ○ テレメトリー(OTLP)がどのようにUIとして表現されるかを理 解するために時間が必要 ● Webベースなのでリロードが必要 ○ トライアンドエラーが必要なローカル開発では無視できない 既存OSSプロダクト(Grafanaなど)をローカルで動かす 23
Slide 24
Slide 24 text
● セットアップが結構大変 ○ volume、データソースの設定(Jaegerとかは楽) ● リッチで高コストな機能とUI ○ 各種テレメトリを見に行くための導線が長い ○ テレメトリー(OTLP)がどのようにUIとして表現されるかを理 解するために時間が必要 ● Webベースなのでリロードが必要 ○ トライアンドエラーが必要なローカル開発では無視できない →徐々にMP(?)が削られていく... 既存OSSプロダクト(Grafanaなど)をローカルで動かす 24
Slide 25
Slide 25 text
用途が違うのでそれはそう 25 ● 出力されるテレメトリーをリアルタイムで確認したい ● テレメトリーはOTLPレベルである程度の見やすさで確認 したい ● 面倒な設定なしで手軽に開発フローに組み込みたい 計装を調整する開発者 既存OSSプロダクト ● 豊富でリッチな分析機能及びUI ● データの永続化、様々な運用に耐えうる多様なオプション
Slide 26
Slide 26 text
otel-desktop-viewerも良さそうだったが・・・ 26 https://github.com/CtrlSpice/otel-desktop-viewer ● Webベースなのでリア ルタイム更新不可 ● 件数が増えると激重に なる→雑に垂れ流すこ とができない
Slide 27
Slide 27 text
debug-exporterは? 27 https://opentelemetry.io/docs/collector/troubleshooting/ ● 手軽だけど可視性はいまい ち ● 「トレースが出ているか?」 の確認なら使えそう ● どちらかというと計装ライ ブラリの開発者向けな印象
Slide 28
Slide 28 text
無いなら作るぞ! ターミナルでトレース表示できたらかっこよさそうだし...
Slide 29
Slide 29 text
otel-tuiの紹介
Slide 30
Slide 30 text
30 計装の動作確認を最速で行うため のターミナルアプリ
Slide 31
Slide 31 text
想定ユーザー 31 ● OTel SDKや計装ライブラリの開発者 ○ opentelemetry-go(-contrib)など ● 自アプリの計装の調整やデバッグをしたい開発者 ○ contextの伝搬、カスタム属性の付与、フィルタリング な ど ● OTel collectorの調整をしたいSRE ○ 主にreceiverとprocessor周り
Slide 32
Slide 32 text
基本的な使い方
Slide 33
Slide 33 text
ホストマシン上で動かす 33 インストール $ go install github.com/ymtdzzz/otel-tui@latest $ brew install ymtdzzz/tap/otel-tui $ nix develop github:ymtdzzz/otel-tui 起動 $ otel-tui テレメトリーの送信 $ OTEL_EXPORTER_OTLP_ENDPOINT=localhost:4317 otel-cli exec --service my-service --name "curl google" curl https://google.com
Slide 34
Slide 34 text
Dockerで開発環境に組み込む docker-compose.yml oteltui: image: ymtdzzz/otel-tui:latest container_name: otel-tui stdin_open: true tty: true collectorやexporterの向き先を修正 exporters: otlp: endpoint: oteltui:4317 service: pipelines: traces: exporters: [otlp] 34
Slide 35
Slide 35 text
確認したいタイミングでattach (中断はCtrl+p -> Ctrl+q) $ docker compose attach oteltui Dockerで開発環境に組み込む 35 すぐに利用開始!
Slide 36
Slide 36 text
こだわりポイント
Slide 37
Slide 37 text
● 開発フローに組み込みやすい ○ yamlを数行編集するだけ ○ debug exporterと同じようなノリで組み込める ● otel-tui自体の汎用性向上 ○ receiverなどOTelの資産をそのまま使える ○ prometheusやzipkin統合可のため移行検証にも○ OTel custom collectorとして実装 37
Slide 38
Slide 38 text
リアルタイム更新とローテーション ● テレメトリー受信したら即反映 ○ リロードは不要 ○ powered by rivo/tview ● ローテーションでメモリに優しく ○ 1000件のサービスエントリースパンまでインメモリに保持 ○ Ctrl+Lで即時Flushも可 38
Slide 39
Slide 39 text
リアルタイム更新とローテーション 39 リアルタイム更新 検索機能 サービスエントリー スパンの情報
Slide 40
Slide 40 text
OTLPの生データに近い情報表示 ● 「計装によってどのようなデータが生成されたかが」が 一目でわかる ○ ツリー表示で折りたたみ可能 ○ jsonのpretty printもサポート 40
Slide 41
Slide 41 text
トレースの確認に不可欠なフレームグラフ 41 フレームグラフ (折りたたみ可) スパンの情報 (OTLP準拠) スパンの関連ログ
Slide 42
Slide 42 text
その他の機能 42 ● ログやメトリクスの表示(WIP) ● トレースの関連ログの表示 ● ログから関連スパンへのジャンプ ● 各領域のサイズ変更 ● サービストポロジー(WIP)
Slide 43
Slide 43 text
otel-tuiの活用例
Slide 44
Slide 44 text
(再掲) 「計装によってスパンの表示のされ方が異なる」ケース 44 実際の事例(Golang) ● net/httpのOTel計装ライブラリで出したSpan名が上手く出てくれない ● EchoのOTel計装ライブラリだと{method} {path}で出てくれる
Slide 45
Slide 45 text
計装の違いが一目でわかる 45 net/http(上手く表示されない) echo(上手く表示される) http.routeがある http.routeがない
Slide 46
Slide 46 text
Prometheus→OTel→Google Cloudの変換 46 ● PrometheusをOTelで取得してどこかに送信したい ○ 例:COS上のアプリのPrometheus MetricsをCloud Monitoringに 送る ● PrometheusをOpenTelemetryに移行する際の影響調査 上手く出てくれない OTel上はどんなメトリク スになる?
Slide 47
Slide 47 text
otel-tuiで可視化 47 Prometheus endpoint otel-tui ● Resource Detectorはどのような属性を付与する? ● Transform Processorは想定通り変換している? などなど
Slide 48
Slide 48 text
その他の例 48 ● LBからのヘルスチェックを除外→フィルタリング設定 の動作確認 ● ParentBasedSamplerの動作確認 ● contextの渡し漏れ(計装ミス)の修正確認(Golang など)
Slide 49
Slide 49 text
PRの証跡としても貼りやすい👍 49 https://github.com/open-telemetry/opentelemetry-ruby-contrib/pull/1313
Slide 50
Slide 50 text
カンファレンスでのデモにも是非お使いください 50 Simplifying OpenTelemetry with Configuration - Alex Boten, Honeycomb & Jack Berg, New Relic (逆井 sanのツイートで知りました)
Slide 51
Slide 51 text
まとめ
Slide 52
Slide 52 text
OTel計装修正時の動作確認や検証を快適にする 52 ● 可能な限りローカルで完結させる ● 雑にテレメトリーを投げられる環境を作る ● OTLPの生データに近い情報を確認する
Slide 53
Slide 53 text
OTel計装修正時の動作確認や検証を快適にする 53 ● 可能な限りローカルで完結させる ● 雑にテレメトリーを投げられる環境を作る ● OTLPの生データに近い情報を確認する otel-tuiがお役に立てるかも!
Slide 54
Slide 54 text
フィードバック&PRお待ちしています! 54 ● TODOはまだまだあります ○ メトリクスの改善 ○ 全体的なUIの改善 ○ 柔軟な設定 ○ 自動テストが足りてない箇所がある
Slide 55
Slide 55 text
最後に少しだけ宣伝🙏
Slide 56
Slide 56 text
SmartHRでもOpenTelemetryの波がキタ 56 ● アプリはNewRelic計装が多いものの ● ミドルウェアのネイティブ計装起因でOTelを送信する ケースが出てきた! ● NewRelic計装との相互運用性も良さそうなので 本格運用に期待
Slide 57
Slide 57 text
そんなSmartHRはエンジニアを募集しています! 57 エンジニア採用サイト https://hello-world.smarthr.co.jp/ SmartHR Tech Blog https://tech.smarthr.jp/
Slide 58
Slide 58 text
ありがとうございました!