Contents
最短動作確認(Quickstart)
まずは最短でトレースとメトリクスがCollector経由で受信・送信され、Grafanaで確認できることを検証します。ここでは最小構成での手順を示し、期待される出力例も併記します。
手順(最短での確認)
最短で動作確認する流れを示します。コマンドはローカル(Linux/macOS/Windows)で実行する前提です。
- Collector(contribイメージ)を起動します。実運用ではバージョン固定を推奨します。
-
例(テスト用):
bash
docker run --rm -p 4317:4317 -p 4318:4318 -p 8888:8888 \
-v $(pwd)/collector-config.yaml:/etc/otelcol/config.yaml \
otel/opentelemetry-collector-contrib:latest \
--config /etc/otelcol/config.yaml -
代替(Linuxで host.docker.internal が使えない場合):docker run に --add-host=host.docker.internal:host-gateway を追加するか、localhost とホストネットワークを利用してください。
-
サンプルアプリを起動し、OTLPエンドポイントを Collector に向けます(自動計装またはSDK経由)。例(環境変数):
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 \
OTEL_RESOURCE_ATTRIBUTES=service.name=my-sample-app \
opentelemetry-instrument python app.py -
otel-cli や curl でテストリクエストを送ります。otel-cli を使うと簡単にスパンを生成できます。
bash
otel-cli exec -- curl http://localhost:8000/ -
検証(期待される出力例)
- Collector コンテナログ:Receiver が受信した旨のログや、Exporter が送信を試みるログが出ます(フィールドや文言はバージョンにより異なります)。
- Grafana Explore(トレース):service=my-sample-app のトレース一覧が見える。
- Prometheus / Mimir 側(remote_write を使う場合):メトリクスが送信され、Grafana の Metrics Explore でメトリクスが検索可能になる。
Collector ログの期待例(参考、実際の文言は異なる場合があります)
|
1 2 3 |
time="..." level=info msg="receiver/otlp: accepted 1 spans" time="..." level=info msg="exporter/otlp: successfully sent 1 spans" |
OpenTelemetry と Grafana の基本概念と連携パターン
このセクションでは必要なコンポーネントと典型的なデータフローを整理します。理解があると設計やトラブル切り分けが速くなります。
主要コンポーネント
OpenTelemetry の構成要素について簡潔に説明します。各要素を理解すると、どこで処理を挟むべきかが分かります。
- API/SDK:アプリ側での計測生成と送信を担います。
- 自動計装:フレームワークやライブラリをラップして自動でスパンやメトリクスを生成します。
- Collector / Grafana Agent:受信・処理(batch, sampling, attributes 付与)・エクスポートを行います。
- Grafana(Mimir/Tempo/Loki 等):受信したデータを保存・可視化します。
典型的な連携パターン
代表的なデータフローのパターンと、それぞれの長所短所を示します。設計時は遅延・コスト・可用性を比較してください。
- アプリ → OTLP (gRPC/HTTP) → Collector(集約)→ Grafana backends (Mimir/Tempo/Loki)
- アプリ(自動計装)→ Grafana Agent(DaemonSet)→ remote_write / OTLP で Grafana Cloud
プロメテウス互換が必要な場合は remote_write を使い、トレースはOTLP/Tempoへ、ログはLokiへ送るのが一般的です。
Grafana Cloud 固有のエンドポイントと認証(重要)
Grafana Cloud を使う場合、各バックエンド(Mimir/Tempo/Loki)でエンドポイントと認証方式が異なることが多く、ドキュメント確認が必須です。ここでは注意点と設定時のヒントを示します。
エンドポイントと認証の違い(概要)
Grafana Cloud 各サービスは別々のエンドポイントやAPIキーを発行することが一般的です。トークン形式やヘッダ名がサービスごとに異なる場合があるため、必ず Grafana Cloud の該当ドキュメントを参照してください。
- Mimir(metrics / remote_write):remote_write URL と認証ヘッダを指定します。
- Tempo(traces / OTLP):OTLP gRPC/HTTP のエンドポイントを使います。
- Loki(logs / push):Loki の push API に対してヘッダ付きで送信します。
各サービスの公式ドキュメント(参照):
- OpenTelemetry 公式ドキュメント: https://opentelemetry.io/docs/
- Grafana Cloud(総合): https://grafana.com/docs/grafana-cloud/
- Grafana Cloud の metrics/remote_write、traces、logs の各ページは Grafana Cloud ドキュメントで最新情報を確認してください。
設定時の注意点(Grafana Cloud向け)
以下は具体的な注意点です。サンプル設定は必ず自分の Grafana Cloud コンソールの指示に合わせて置き換えてください。
- 認証ヘッダはサービスごとに異なる可能性があります。例として "Authorization: Bearer
" が使えるケースが多いものの、必ず Cloud コンソールの指示を確認してください。 - TLS を無効化する insecure 設定はテスト目的のみとし、本番では必ず TLS を有効にしてください。
- Cloud 向けに送る際はAPIキーを Kubernetes Secret や Vault 等で安全に管理してください。
- Grafana Cloud のホスト名/ポートはアカウント毎に異なることがあります。URLはコピペで設定すると安全です。
Collector / Grafana Agent の最低構成と運用注意点
Collector と Grafana Agent は役割が重なる部分がありますが、用途別に設定と運用のポイントを押さえておくことが重要です。ここでは最小構成例と注意点を示します。
推奨イメージとバージョン管理
Collector の設定例では otel/opentelemetry-collector-contrib イメージを想定しています。Exporter/Receiver 名や設定キーは Collector のバージョンによって変更されるため、実運用ではバージョンを明示的に固定し、リリースノートを確認してください。Collector Contrib リポジトリ:https://github.com/open-telemetry/opentelemetry-collector-contrib
最小構成サンプル(Collector)
以下は検証向けの最小例です。必ず YOUR_* を置換し、insecure はテスト時のみ使用してください。Linux の Docker 環境では host.docker.internal が未定義のことがあるため、localhost または host-gateway を使う方法を検討してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
receivers: otlp: protocols: grpc: http: prometheus: config: scrape_configs: - job_name: 'myapp' static_configs: - targets: ['127.0.0.1:8000'] # 実環境に応じて更新 processors: batch: timeout: 10s memory_limiter: check_interval: 1s limit_mib: 400 spike_limit_mib: 50 attributes: actions: - key: service.name action: upsert value: my-sample-app exporters: prometheusremotewrite: endpoint: "https://YOUR_MIMIR_REMOTE_WRITE_URL" headers: Authorization: "Bearer YOUR_MIMIR_API_KEY" otlp: endpoint: "https://YOUR_TEMPO_OR_OTLP_ENDPOINT:4317" tls: insecure: false headers: Authorization: "Bearer YOUR_TEMPO_API_KEY" loki: endpoint: "https://YOUR_LOKI_PUSH_URL/loki/api/v1/push" # Loki の exporter はバージョンで設定が変わる場合があります logging: loglevel: debug service: pipelines: traces: receivers: [otlp] processors: [batch, memory_limiter, attributes] exporters: [otlp, logging] metrics: receivers: [otlp, prometheus] processors: [batch, memory_limiter, attributes] exporters: [prometheusremotewrite, logging] logs: receivers: [otlp] processors: [batch, memory_limiter] exporters: [loki, logging] |
注意点(Collector / Agent)
以下の点をチェックリストとして運用時に確認してください。
- exporter/receiver 名や設定キーが Collector のバージョンで変更される点を確認する。
- production では TLS を有効にし、insecure を使わない。
- memory_limiter と batch 設定で OOM や大量送信を防ぐ。
- high-cardinality なラベルをメトリクスに付けない。
- Grafana Agent はノード単位のスクレイプに最適で、軽量化された設定を利用するのが一般的です(Agent ドキュメント参照)。
言語別の計装:最小動作サンプルと注意点
まずは「自動計装:最短コマンド」と「手動計装:最小サンプル(+注意点)」の二段構成で示します。サンプルはローカル検証向けで、各言語の公式ドキュメントも併せて参照してください。
Python — 自動計装:最短コマンド
1文で導入します。自動計装は既存アプリをすばやく計測対象にできます。
|
1 2 3 4 |
pip install opentelemetry-distro opentelemetry-instrumentation-flask OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 OTEL_RESOURCE_ATTRIBUTES=service.name=my-python-app \ opentelemetry-instrument python app.py |
Python — 手動計装:最小サンプル(注意点含む)
手動での最小サンプルは以下の通りです。insecure オプションはローカル検証用です。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter trace.set_tracer_provider(TracerProvider()) otlp_exporter = OTLPSpanExporter(endpoint="localhost:4317", insecure=True) trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(otlp_exporter)) tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("sample"): pass |
注意点:OTLP exporter のAPIはライブラリバージョンで変わる場合があります。公式ドキュメントを参照してください。
Java — 自動計装:最短コマンド
javaagent 方式で簡単に計装できます。1文で導入します。
|
1 2 3 4 5 |
java -javaagent:/path/opentelemetry-javaagent.jar \ -Dotel.exporter.otlp.endpoint=http://localhost:4317 \ -Dotel.service.name=my-java-app \ -jar app.jar |
Java — 手動計装:最小サンプル(注意点含む)
手動計装は SDK と OtlpExporter を使います。設定方法はライブラリのバージョンによって差がありますので注意してください。
注意点:javaagent を使うとライブラリ間の互換性の影響を受けにくいですが、環境変数やJVMオプションの順序に注意してください。
Go — 自動(軽量)/手動の最小サンプル
Go はコード組込型が一般的です。導入は1文で説明します。
- 最短:Go アプリに OpenTelemetry SDK を組み込みます(以下は最小の例)。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import ( "context" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" sdktrace "go.opentelemetry.io/otel/sdk/trace" ) ctx := context.Background() exp, _ := otlptracegrpc.New(ctx, otlptracegrpc.WithEndpoint("localhost:4317"), otlptracegrpc.WithInsecure()) tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exp)) otel.SetTracerProvider(tp) |
注意点:WithInsecure はテスト用としてのみ利用し、本番では TLS 設定を使ってください。Go の exporter オプションはモジュールバージョンで変わることがあります。
Node.js — 自動計装:最短コマンド
Node.js は auto-instrumentation パッケージが利用できます。
|
1 2 3 |
npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node NODE_OPTIONS="--require ./otel-bootstrap.js" node app.js |
Node.js — 手動計装:最小サンプル(注意点含む)
手動で NodeSDK を使う例です。URL 引数やクラス名はバージョン差があるため公式を確認してください。
注意点:Node の OTLP exporter は gRPC と HTTP の選択肢があり、ライブラリの実装でオプションが異なります。
.NET — 自動/手動の最小サンプル
ASP.NET Core ではホスト起動時に OpenTelemetry を組み込みます。NuGet パッケージ名はバージョンで変わることがあります。
|
1 2 3 4 5 6 7 |
builder.Services.AddOpenTelemetryTracing(b => { b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("my-dotnet-app")) .AddAspNetCoreInstrumentation() .AddOtlpExporter(o => { o.Endpoint = new Uri("http://localhost:4317"); }); }); |
注意点:.NET の OTLP exporter は環境に応じて gRPC/HTTP の設定を分けてください。
検証とトラブルシュート(期待される出力例とデバッグコマンド)
検証では「アプリ→Collector→Backend」の各段階で期待される状態を確認します。代表的なコマンドと期待例を示します。
期待される出力例
下記はあくまでサンプルで、実際のメッセージやメトリクス名は使用する Collector のバージョンにより異なります。
- Collector が OTLP を受信した場合のログ(例)
|
1 2 |
time="..." level=info msg="otlp receiver: accepted 1 spans" receiver=otlp |
- Prometheus メトリクス(Collector の /metrics から例示)
|
1 2 3 |
# HELP otelcol_exporter_sent_spans Number of spans successfully sent by exporter. otelcol_exporter_sent_spans{exporter="otlp"} 5 |
- Grafana Explore(トレース)では service.name でフィルタして目的のスパンが表示されることを期待します。
デバッグで有用なコマンド
検証・障害対応でよく使うコマンドと確認ポイントです。
- Collector ログの確認(Docker)
|
1 2 |
docker logs -f <collector_container> |
- Kubernetes の場合
|
1 2 |
kubectl -n observability logs -l app=otel-collector -c otel-collector |
- Collector の /metrics を取得(Prometheus エンドポイント)
|
1 2 |
curl http://localhost:8888/metrics | head -n 50 |
- otel-cli を使ってスパンを生成し、Collector が受信するか確認
|
1 2 |
otel-cli exec -- curl http://localhost:8000/ |
- Grafana 側の確認は Explore で service や span.name を指定してデータの有無を確認してください。
トラブル時はまず Collector のログで Exporter のエラー(認証・TLS・接続拒否)を確認し、次にネットワーク(ポート・ファイアウォール)をチェックします。
運用・セキュリティ・スケーリング(実務ガイド)
本番運用に移す際の主要な設計指針とセキュリティ対策を短く整理します。テスト設定と本番設定の差分を明確にしてください。
TLS・認証とシークレット管理
本番では必ず TLS を有効にし、認証情報は適切に管理します。
- Kubernetes Secrets 例(短縮):
|
1 2 3 4 5 6 7 8 |
apiVersion: v1 kind: Secret metadata: name: grafana-keys type: Opaque data: MIMIR_API_KEY: BASE64_ENCODED_KEY |
- シークレットストアとして Vault を使う場合はエージェントやCSIドライバで安全に注入してください。環境変数直書きは避けます。
パフォーマンスと可用性の基本
- processors で batch サイズと timeout を調整し、遅延とメモリ使用のバランスを管理する。
- memory_limiter を有効にして OOM を防ぐ。
- サンプリング戦略(probabilistic / tail_sampling)でコストを制御する。重要なトレースを残す設計を行う。
- High-cardinality ラベルを避ける。cardinality が増えるとストレージとクエリ性能に影響する。
導入・移行時チェックリスト(段階的導入)
段階的に導入することでリスクを抑え、徐々にスケールする方針を推奨します。短いチェックリストを示します。
- PoC(1サービス):Collector と Grafana を接続し、メトリクス→ログ→トレースの流れを確認する。
- ステージング:主要サービスに広げ、負荷下での動作・コストを評価する。サンプリング設定を調整する。
- 本番前:SLO/アラート整備、運用手順書作成、ロールバック手順を準備する。
- 本番:ローリング導入で段階的にトラフィックを増やし、モニタとコストを確認する。
まとめ(実務で押さえるべき要点)
短く要点を整理します。次のステップを示し、実行に移せる形でまとめます。
Grafana と OpenTelemetry を繋げる際は、まずローカルで最小構成の動作確認を行い、Collector/Grafana Agent のバージョン差や Grafana Cloud の認証方式に注意して設定を固めることが重要です。テストと本番で TLS とシークレット管理の差分を明確にし、サンプリングとバッチ設定でコスト管理を行ってください。
- まずはローカルで otelcol-contrib とサンプルアプリで最短動作確認を行う。
- Grafana Cloud 利用時は各サービスのエンドポイントと認証方式を必ず公式ドキュメントで確認する。
- Collector と Agent の設定はバージョン固定・設定差分管理を行う(exporter/receiver 名に注意)。
- 本番では TLS を有効にし、APIキーは Secret/Vault で管理する。
- 検証では Collector のログ、/metrics、Grafana Explore の表示を順に確認して切り分ける。
参考リンク
- OpenTelemetry 公式: https://opentelemetry.io/docs/
- OpenTelemetry Collector Contrib: https://github.com/open-telemetry/opentelemetry-collector-contrib
- Grafana Cloud ドキュメント(総合): https://grafana.com/docs/grafana-cloud/
- Grafana Agent ドキュメント: https://grafana.com/docs/grafana-cloud/agent/
- otel-cli(簡易トレース生成): https://github.com/equinix/otel-cli