otel-desktop-viewer
ローカル開発中にOpenTelemetryのテレメトリを受け取って眺めるためのCLIツール。トレース・メトリクス・ログをベンダーのSaaSに送らずに手元で確認できる。Go製、Apache License 2.0。CtrlSpice/otel-desktop-viewer。
#opentelemetry #observability #golang
実体はカスタムCollectorディストリビューション
単なるビューアではなく、OpenTelemetry Collectorに独自のdesktop exporterを組み込んだカスタムディストリビューションとして作られている。このdesktop exporterが以下の3つを担う。
- 受け取ったテレメトリをDuckDBへ取り込む
POST /rpcのJSON-RPC APIとして公開する- バイナリに埋め込まれたSvelte製のWeb UIを配信する
つまり「Collector + 組み込みDB + 組み込みUI」が単一バイナリに収まっている。ローカルにJaegerのall-in-oneやバックエンド一式を立てるのに比べて、依存が単一バイナリで済むのが利点。
使い方
otel-desktop-viewer
これだけで以下が立ち上がる。
- Web UI:
localhost:8000 - OTLP gRPCレシーバー:
localhost:4317 - OTLP HTTPレシーバー:
localhost:4318
アプリ側はOTEL_EXPORTER_OTLP_ENDPOINTをここに向けるだけでよい。Docker Composeに1サービスとして足し、他のサービスからOTLPで送らせる使い方も想定されている。
主なフラグ
| フラグ | 意味 | デフォルト |
|---|---|---|
--db string |
DuckDBファイルへ永続化する | 指定なし(インメモリ) |
--db-max-size string |
保存容量の上限 | メモリ512MB / ディスク2GB |
--browser-port int |
Web UIとJSON-RPC APIのポート | 8000 |
--grpc int |
OTLP gRPCの待ち受けポート | 4317 |
--http int |
OTLP HTTPの待ち受けポート | 4318 |
--host string |
OTLPとWeb UIのバインド先ホスト | localhost |
--open-browser |
起動時にブラウザを開く | true |
ストレージ
デフォルトはインメモリで、プロセスを終了するとデータは消える。残したい場合だけ--db path.dbでDuckDBのファイルに永続化する。--db-max-sizeの上限を超えると古いテレメトリから自動的に削除される。デバッグ中に垂れ流し続けても際限なく膨らまないようになっている。
インストール
| 方法 | コマンド |
|---|---|
| Homebrew (macOS) | brew tap ctrlspice/otel-desktop-viewer && brew install --cask otel-desktop-viewer |
| Linux | GitHub Releasesの.deb / .rpm、またはビルド済みバイナリ |
| Go | go install github.com/CtrlSpice/otel-desktop-viewer@latest |
| Docker | docker pull ghcr.io/ctrlspice/otel-desktop-viewer:latest |
注意点として、DuckDBを使う都合上ビルドにはCGO_ENABLED=1が必要(Windowsの場合はMSYS2でのビルド環境が要る)。またLinuxのリリースバイナリはglibc 2.39以上を要求するため、Ubuntu 24.04以降・Debian 13以降・Fedora 40以降が対象になる。
位置づけ
「ローカル開発中に自分のテレメトリを見る」という用途の道具で、本番のオブザーバビリティ基盤を置き換えるものではない。同種のものとしてはTUIで同じことをするotel-tuiや、開発フレームワーク側にダッシュボードを内蔵するAspireがある。計装側と組み合わせるなら、Goのコンパイル時計装で吐かせたテレメトリの送り先をここに向けると、コードを書き換えずに手元で中身を確認できる。