複数マシンのテレメトリを自宅サーバーに集める: OTel Collector + VictoriaMetrics + Loki + Grafana を Tailscale 越しに
ノート PC・GPU サーバー・Proxmox の VM など、あちこちで動くツールの OpenTelemetry(OTLP)を 1 台の自前サーバーで受けて、まとめてダッシュボードにする構成。例は Claude Code の利用統計だが、OTLP を出すものなら何でも同じ形で集められる。
どんなときに使う?
- 各マシンでしか集計できないツール(例:
ccusage)の数字を横断して見たい - 公開サーバーやクラウドのインスタンスを用意せず、自宅で常時動いているミニ PC で監視基盤を持ちたい
構成
各マシンのツール ─OTLP(gRPC 4317)→ OpenTelemetry Collector ─┬→ VictoriaMetrics(メトリクス)─→ Grafana
└→ Loki(ログ)──────────────┘- サーバー側は
docker composeで 4 サービス(Collector / VictoriaMetrics / Loki / Grafana) - マシン間の通信は Tailscale。ポート開放やファイアウォール設定なしで、どの環境からも
http://<tailnet のホスト名>:4317に送れる - 最初は Prometheus で組んだが、データ容量の観点で Prometheus 互換の VictoriaMetrics に乗り換えたとのこと(PromQL のダッシュボードはそのまま使える)
送信側の設定(Claude Code の例)
~/.claude/settings.json の env に入れる。
json
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://my-selfhost-server:4317",
"OTEL_RESOURCE_ATTRIBUTES": "host.name={{ .chezmoi.hostname }}"
}
}OTEL_RESOURCE_ATTRIBUTESにhost.nameを付けるのがポイント。これがないと Grafana でどのマシンの数字か区別できない- 設定ファイルを chezmoi で管理し、テンプレートの
{{ .chezmoi.hostname }}でマシンごとに自動で埋めている。dotfiles を配るだけで全マシンが正しいラベル付きで送り始める
注意点
- Collector の 4317 を tailnet の外に出さない(認証なしの受け口になる)。Tailscale の ACL で送信元を絞るとなおよい
- ログ(プロンプトやツール実行の記録)を Loki に入れると、機密を含みうる。保存期間と閲覧者を決めておく
- ダッシュボードは ColeMurray/claude-code-otel を参考にしたとのこと
- エージェント側の OTel 設定の詳細(Codex / Copilot CLI など)は ai-coding 分野の AIコーディング: Claude Code / Codex / Copilot CLI の利用状況を OpenTelemetry でエクスポートする を参照。軽いサーバー監視だけなら Beszel: Grafana を入れるまでもないときの軽量サーバー監視 でも足りる
出典
- @yag_ays · 2026-02-04
- ブログ「複数環境でのClaude Code利用統計をOpenTelemetryで一元管理する」(yag.xyz、投稿内リンク): t.co/XCMAixF8ZJ