Fanout について
Fanoutは、トレース、ログ、メトリクスを調査する単一バイナリのOpenTelemetryシステムです。ローカルストレージとSQL分析に加え、ダッシュボード、アラート、調査エージェント、MCPサーバーを備えています。
主な機能
- 01gRPCとHTTPによるOTLP取り込み
- 02ローカルParquetストレージとDuckDB分析
- 03自然言語によるテレメトリー調査
- 04トレース、ログ、メトリクスのダッシュボード
- 05サービスおよびログ信号のアラート
活用シーン
- 01複数のテレメトリー信号を横断した障害調査
- 02個人用ダッシュボードでのサービス状態確認
- 03外部エージェントからのテレメトリー検索
MCP 対応
Fanoutは`/mcp`にMCPサーバーを公開し、外部エージェントが型付きクエリツールを利用できます。リモートクライアントはステートレスなStreamable HTTPで接続し、OAuthで登録します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://{fanout_host}/mcpclaude mcp add --transport http labstack-fanout https://{fanout_host}/mcp{"mcpServers":{"labstack-fanout":{"type":"http","url":"https://{fanout_host}/mcp"}}}Cursor で開く{"servers":{"labstack-fanout":{"type":"http","url":"https://{fanout_host}/mcp"}}}VS Code で開く{"mcpServers":{"labstack-fanout":{"type":"http","url":"https://{fanout_host}/mcp"}}}{"mcpServers":{"labstack-fanout":{"serverUrl":"https://{fanout_host}/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Fanout
単一バイナリで実現する、エージェントネイティブな OpenTelemetry 調査。
Fanout は OpenTelemetry のトレース、ログ、メトリクスを単一のバイナリとデータディレクトリにまとめ、運用が必要な外部ストレージサービスを不要にします。Fanout はプレリリース版であり、移行手段のない変更が行われる場合があります。ブラウザークライアント、組み込みエージェント、MCP ツール、ダッシュボード、アラートはプレビュー機能です (ステータス)。まずはドキュメントをご覧になるか、以下の手順で起動してください。
- gRPC と HTTP による OTLP 取り込み。ローカルの Parquet ストレージと DuckDB 分析を使用します。
- テレメトリについて自然言語で質問に答える調査エージェント。
- 同じ型付きクエリツールを使う外部エージェント向けの MCP サーバー。
- トレース、ログ、メトリクスを横断するダッシュボードと、サービスのエラー率、レイテンシ、スループット、ログ量に関するアラート。
クイックスタート
Docker
docker run --name fanout -p 7520:7520 \
-v fanout-data:/var/lib/fanout/data \
-e FANOUT_AUTH_CODE_SECRET=$(openssl rand -hex 32) \
labstack/fanout:latest
コンテナが出力する一度限りのセットアップ URL を開き、最初の管理者を作成します。Fanout は取り込みトークンを一度だけ表示するため、コレクターのシークレットと一緒に保存してください。SMTP を使わずに後からサインインするには、実行中のコンテナの制御データベースに対して、15 分間有効で一度だけ使用できるリンクを発行します。
docker exec fanout fanout login-link [email protected]
UI、API、MCP、および両方の OTLP トランスポートは、ポート 7520 を共有します。イメージのデフォルト設定とバインドマウントの所有権についてはインストールを、セットアップと SMTP ログインについては初回起動をご覧ください。
ネイティブバイナリ
チェックサム検証済みのリリースを Linux または macOS 向けに、amd64 または arm64 でインストールします。
curl -fsSL https://raw.githubusercontent.com/labstack/fanout/main/scripts/install.sh | sh
export FANOUT_AUTH_CODE_SECRET=$(openssl rand -hex 32)
fanout
リリースを固定するには FANOUT_VERSION=v2026.10.1-alpha を設定し、インストール先ディレクトリを選択するには FANOUT_PREFIX を設定します。ネイティブインストールは 127.0.0.1:7520 にバインドします。リモートアクセスには FANOUT_ADDR=:7520 を設定してから、同じ初回起動のセットアップを行ってください。
テレメトリを送信する
標準の OTLP/HTTP エクスポーターで、保存した取り込みトークンを使用できます。
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:7520
export OTEL_EXPORTER_OTLP_HEADERS="authorization=Bearer%20$INGEST_TOKEN"
同じプライベートコンテナーネットワーク上の Collector から転送する場合は、次のように設定します。
exporters:
otlp_http/fanout:
endpoint: http://fanout:7520
headers:
Authorization: "Bearer ${env:INGEST_TOKEN}"
service:
pipelines:
traces: { receivers: [otlp], exporters: [otlp_http/fanout] }
metrics: { receivers: [otlp], exporters: [otlp_http/fanout] }
logs: { receivers: [otlp], exporters: [otlp_http/fanout] }
既存の otlp レシーバーを使用し、INGEST_TOKEN を設定して、fanout を Collector から到達可能なプライベートホスト名に置き換えます。OTLP/gRPC をローカルで使う場合は localhost:7520 を使用します。TLS と HTTP/2 の設定についてはテレメトリの送信をご覧ください。
チャットを有効にする
FANOUT_AI_PROVIDER=anthropic を選択して ANTHROPIC_API_KEY を設定するか、FANOUT_AI_PROVIDER=openai を選択して OPENAI_API_KEY を設定し、Fanout を再起動します。選択したプロバイダーのキーは起動時に必要です。プロバイダーを指定しない場合、チャットは無効になりますが、他の機能は引き続き使用できます。AI 設定をご覧ください。
MCP クライアントを接続する
FANOUT_PUBLIC_URL に、安定して外部からアクセス可能な HTTPS オリジンを設定し、リモート MCP クライアントをそのオリジンの /mcp エンドポイントに接続します。クライアントは OAuth を通じて検出と登録を行い、ブラウザーでスコープを許可します。クライアントはステートレス Streamable HTTP 上の MCP プロトコル 2026-07-28 に対応している必要があります。古いバージョンと initialize ハンドシェイクはサポートされていません。セットアップと権限についてはMCP で接続するをご覧ください。
比較
| 使用しているもの | Fanoutとの違い |
|---|---|
| Loki、Tempo、Mimirを使用するGrafana | このスタックでは、シグナルごとにサービスとクエリー言語があり、その下にオブジェクトストレージを配置します。Fanoutでは、水平スケーリングを犠牲にする代わりに、3つすべてのシグナルで1つのプロセス、1つのデータディレクトリ、1つの型付きコントラクトを使用します。 |
| SigNoz | どちらもOTLPネイティブで、セルフホスト可能です。SigNozはコレクター、ClickHouse、クエリーサービスを組み合わせます。一方Fanoutは、取り込み、正規のParquetストレージ、インデックス付きトレース読み取り、DuckDB分析、アラート、ブラウザクライアントを1つのバイナリにまとめています。 |
| Jaeger | Jaegerはトレースを扱い、別途運用するストレージバックエンドを必要とします。Fanoutはトレース、ログ、メトリクスを同じストアに取り込み、ほかにデプロイするものはありません。 |
| GrafanaとPrometheus | Prometheusはメトリクスをプルし、メトリクスの扱いに優れています。Fanoutは3つすべてのシグナルでプッシュされたOTLPを受け付け、長期的なメトリクス時系列の維持ではなく、特定のインシデントの調査を中心に設計されています。 |
| Datadog、Honeycomb、Grafana Cloud | これらはマネージドサービスです。ストレージ、スケーリング、アップグレードはほかの誰かが管理し、テレメトリーは利用のためにネットワークの外へ送られます。Fanoutは自分で実行するバイナリであり、データはディスク上に残ります。 |
| ClickHouseに接続したOpenTelemetry Collector | 手作業で組み立てた同じ構成です。コレクター、データベース、ダッシュボード、それらをつなぐ仕組みが必要です。Fanoutはこの構成を1つのプログラムにまとめたもので、エージェントとMCPサーバーは同じクエリーコントラクトにあらかじめ接続されています。 |
Fanoutは単一ノードです。クラスタリング、レプリケーション、オブジェクトストレージ層はありません。1台のマシンのディスク容量とCPUでは足りなくなったデプロイ環境では、Fanoutの対応範囲を超えています。
アーキテクチャ
1つのプロセスに、取り込み、ストレージ、クエリー、アラート、エージェント、MCP、Reactクライアントが含まれます。ブラウザクライアントとエージェントクライアントは、型付きのオブザーバビリティコントラクトを共有します。
テレメトリーはParquetに保存され、DuckDBのクエリー状態は再構築可能で、SQLiteにはトランザクション対応の製品状態が保存されます。耐久性のある取り込み、インデックス付き読み取り、読み取りを継続しながらのコンパクションについては、ストレージの仕組みを参照してください。
設定
設定は環境変数のみで行います。組み込みのデフォルト値の後に空でないプロセス環境変数が適用され、データファイルやリスナーを開く前に検証されます。設定は起動時に一度だけ読み込まれるため、変更するたびに再起動が必要です。
| 環境変数 | デフォルト | 用途 |
|---|---|---|
FANOUT_ADDR | 127.0.0.1:7520 | UI、API、MCP、両方のOTLPトランスポート |
FANOUT_DATA_DIR | ./data | Parquet、クエリー状態、制御用SQLite |
FANOUT_AUTH_MODE | local | ログインリンクまたはSMTP、あるいはoidc |
FANOUT_AUTH_CODE_SECRET | — | localモードで必須、32文字以上 |
FANOUT_AI_PROVIDER | — | 空の場合はチャットを無効化、anthropicまたはopenaiの場合は有効化 |
ANTHROPIC_API_KEY | — | Anthropicのチャットに必須 |
OPENAI_API_KEY | — | OpenAIのチャットに必須 |
FANOUT_RETENTION_DAYS | 30 | テレメトリーの保持期間 |
FANOUT_MCP_ENABLED | true | /mcpでMCPエンドポイントを提供 |
どのシークレットも、値の代わりに<NAME>_FILEを指定できます。検証については設定リファレンス、デプロイ例についてはランタイムでのシークレット受け渡しを参照してください。
高度な DuckDB のサイズ設定
Fanout は DuckDB のサイズを自動的に設定します。実測したワークロードに基づき、メモリ、接続数、スレッド数を上書きできます。 詳しくはDuckDB のサイズ設定をご覧ください。
TLS、ヘルスチェック、バックアップ、アップグレード、保持、復旧については、運用手順書 をご覧ください。
パフォーマンス
Fanout v2026.10.8-alpha は、Hetzner Cloud ccx33(専用 vCPU 8 個、RAM 32 GB)上で、別の ccx33 で telemetrygen を実行し、303.5 秒間にわたって 毎秒 415,859 件の OpenTelemetry 項目を混在させた状態で受け付けました。2026 年 10 月 16 日の取り込みテストは、すべての品質ゲートに合格しました。パフォーマンス測定方法をご覧ください。 Fanout Benchを使うと、お使いのハードウェアで測定を再現できます。
ソースからビルドする
- Go 1.27.3 と C/C++ ツールチェーン(ネイティブ Linux または macOS、amd64 または arm64)。
just buildまたはbash scripts/with-duckdb.sh go build ./cmd/fanoutでビルドします。 ラッパーが DuckDB 用に固定されたヘッダー、静的ライブラリ、CGO フラグを提供します。 初回ビルドでは、チェックサム検証済みのエンジンをダウンロードするためにネットワークアクセスが必要です。 - Bun — ブラウザーアセットをコンパイルします
- Node.js 24.19.0 — 開発用ヘルパーを実行し、ドキュメントサイトをビルドします
- just — タスクランナー
- 32 文字の認証コードシークレット
git clone https://github.com/labstack/fanout.git
cd fanout
just install # browser dependencies and git hooks
just build # browser assets, then the binary
最小限の設定で実行します。
export FANOUT_AUTH_CODE_SECRET=$(openssl rand -hex 32) # must be 32+ characters
./bin/fanout
http://localhost:7520を開き、初回起動時のセットアップに従ってください。SMTP とチャットは任意です。SMTP を使わない場合は、同じ設定とデータディレクトリを指定して ./bin/fanout login-link [email protected] を実行してください。
開発
just を実行するとレシピの一覧が表示されます。完全なチェックを実行するには just check、Go のテストには just test、埋め込みブラウザーアセットの再ビルドには just ui を実行してください。環境のセットアップ、生成アセット、フック、プロジェクトの構成についてはCONTRIBUTING.mdをご覧ください。
リリース
バージョンには CalVer を採用しています。形式は vYYYY.M.N[-alpha|-beta|-rc] で、月ごとに 0 から番号を付け、すべての成熟度サフィックスで番号を共有します。Fanout はアルファ版です(例:v2026.10.1-alpha)。GA にはサフィックスがありません。コンテナータグでは先頭の v を省略し、リリースのたびに latest が更新されます。タグ付きリリースは、Docker Hub(labstack/fanout)と GHCR(ghcr.io/labstack/fanout)に同一のマニフェストを公開します。GHCR が正式な配布先で、開発用イメージも提供します。
| イメージタグ | 指し示すもの |
|---|---|
labstack/fanout:latest | 最新リリース。Docker Hub にミラーされています |
labstack/fanout:2026.10.1-alpha | 該当するリリース。Docker Hub にミラーされています |
ghcr.io/labstack/fanout:latest | 最新リリース |
ghcr.io/labstack/fanout:2026.10.1-alpha | 該当するリリース |
ghcr.io/labstack/fanout:main | main の最新コミット |
ghcr.io/labstack/fanout:sha-<commit> | 特定のコミット |
プラットフォーム、チェックサム、来歴、検証についてはdocs/release.mdをご覧ください。
コントリビュート
Issue とプルリクエストを歓迎します。CONTRIBUTING.mdに従い、プルリクエストを作成する前に just check と just test-race を実行してください。セキュリティ上の問題はSECURITY.mdから報告してください。
対象範囲
このリポジトリでは、他のリポジトリに依存せず Fanout をビルドできます。LabStack のデプロイ設定、稼働状況の監視、公開デモインスタンスは含まれません。site/ のドキュメントサイトは含まれており、設定ページは、ローダーがバインドするものと同じ internal/config 型から生成され、just check で検証されます。
ライセンス
Apache-2.0 © LabStack LLC。権利表記についてはNOTICEとTHIRD_PARTY_NOTICESをご覧ください。Fanout の名称とロゴの使用についてはTRADEMARKをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。