テック技報最新号へ →
インフラ

複数マシンのテレメトリを自宅サーバーに集める: OTel Collector + VictoriaMetrics + Loki + Grafana を Tailscale 越しに

ノート PC・GPU サーバー・Proxmox の VM など、あちこちで動くツールの OpenTelemetry(OTLP)を 1 台の自前サーバーで受けて、まとめてダッシュボードにする構成。例は Claude Code の利用統計だが、OTLP を出すものなら何でも同じ形で集められる。

@yag_ays · 2026-10-18
#infra#observability#opentelemetry#victoriametrics#loki#grafana#tailscale#self-hosted

どんなときに使う?

  • 各マシンでしか集計できないツール(例: 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 を配るだけで全マシンが正しいラベル付きで送り始める

注意点

出典

X の元の投稿を開く