OpenTelemetry Collectorの内部メトリクス・ログを出力する
記事の更新間隔が空いてしまったので、今後はもうちょっと更新かけていきたいところです。
小ネタでもすこしずつアウトプットしていこうと思います。
OpenTelemetry Collector の Internal Telemetry
基本的にここに書かれている内容です(まだ日本語ページがないので、翻訳でコントリビュートしよう…)。
OpenTelemetry Collector自体のモニタリングやトラブルシューティングの観点で、OTel Collector自体もテレメトリーを生成しています。
- メトリクスとして、Prometheusインターフェースを使用して8888ポートで公開されている
- ログは標準エラー出力に出力される
なお、内部トレースも公開設定が可能です(現状ではExperimentalの状態)
内部メトリクス
最もシンプルにメトリクスを生成するには、以下のような設定を行います。
service:
telemetry:
metrics:
この状態で localhost:8888/metrics をスクレープしてみると、以下のようにメトリクスを確認できます。
# HELP http_client_request_body_size Size of HTTP client request bodies.
# TYPE http_client_request_body_size histogram
http_client_request_body_size_bucket{http_request_method="POST",http_response_status_code="200",network_protocol_name="http",network_protocol_version="1.1",server_address="ingest.jp0.signalfx.com",service_instance_id="8ba7c641-f2bf-4b08-91bb-cb6739ce969e",service_name="otelcol",service_version="v0.132.0",url_scheme="https",le="0"} 0
http_client_request_body_size_bucket{http_request_method="POST",http_response_status_code="200",network_protocol_name="http",network_protocol_version="1.1",server_address="ingest.jp0.signalfx.com",service_instance_id="8ba7c641-f2bf-4b08-91bb-cb6739ce969e",service_name="otelcol",service_version="v0.132.0",url_scheme="https",le="5"} 0
http_client_request_body_size_bucket{http_request_method="POST",http_res sponse_status_code="200",network_protocol_name="http",network_protocol_version="1.1",server_address="ingest.jp0.signalfx.com",service_instance_id="8ba7c641-f2bf-4b08-91bb-cb6739ce969e",service_name="otelcol",service_version="v0.132.0",url_scheme="https",le="10"} 0
...
...
なお、OTel Collector v0.123.0 以降 service::telemetry::metrics::address の設定が無視されます。
以前のバージョンのOTel Collectorで以下のような設定が入れている場合は、バージョンアップ時にすこし注意する必要があります。
service:
telemetry:
metrics:
address: 0.0.0.0:8888
内部ログ
例えば、OTel Collectorのログをファイル出力したい場合は、以下のように設定します。
service:
telemetry:
logs:
level: DEBUG
encoding: json
output_paths: /tmp/otelcol-debug.json
error_output_paths: /tmp/otelcol-err.json
詳細なオプションはこちら
OTel Collectorを再起動したら、以下のように出力されます。
{"level":"info","ts":"2025-09-10T10:05:21.421Z","caller":"service@v0.132.0/service.go:187","msg":"Setting up own telemetry...","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"}}
{"level":"debug","ts":"2025-09-10T10:05:21.421Z","caller":"builders/builders.go:24","msg":"Stable component.","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"},"otelcol.component.id":"otlphttp","otelcol.component.kind":"exporter","otelcol.signal":"traces"}
{"level":"debug","ts":"2025-09-10T10:05:21.422Z","caller":"builders/builders.go:24","msg":"Beta component. May change in the future.","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"},"otelcol.component.id":"signalfx","otelcol.component.kind":"exporter","otelcol.signal":"traces"}
{"level":"info","ts":"2025-09-10T10:05:21.422Z","caller":"signalfxexporter@v0.132.0/factory.go:101","msg":"Correlation tracking enabled","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"},"otelcol.component.id":"signalfx","otelcol.component.kind":"exporter","otelcol.signal":"traces","endpoint":"https://api.jp0.signalfx.com"}
{"level":"debug","ts":"2025-09-10T10:05:21.422Z","caller":"builders/builders.go:24","msg":"Beta component. May change in the future.","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"},"otelcol.component.id":"resourcedetection","otelcol.component.kind":"processor","otelcol.pipeline.id":"traces","otelcol.signal":"traces"}
{"level":"debug","ts":"2025-09-10T10:05:21.422Z","caller":"builders/builders.go:24","msg":"Beta component. May change in the future.","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"},"otelcol.component.id":"batch","otelcol.component.kind":"processor","otelcol.pipeline.id":"traces","otelcol.signal":"traces"}
{"level":"debug","ts":"2025-09-10T10:05:21.422Z","caller":"builders/builders.go:24","msg":"Beta component. May change in the future.","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"},"otelcol.component.id":"memory_limiter","otelcol.component.kind":"processor","otelcol.pipeline.id":"traces","otelcol.signal":"traces"}
{"level":"debug","ts":"2025-09-10T10:05:21.422Z","caller":"memorylimiterprocessor@v0.132.0/factory.go:144","msg":"created singleton logger","resource":{"service.instance.id":"8ba7c641-f2bf-4b08-91bb-cb6739ce969e","service.name":"otelcol","service.version":"v0.132.0"},"otelcol.component.kind":"processor"}
...
...
オブザーバビリティバックエンドに送信する
当然こういったテレメトリーデータをオブザーバビリティバックエンドに送って確認できるようにしたいというケースがあるはずです。
上のような形でテレメトリーデータ自体は取り出せるので、データパイプラインにどう乗せてどう送信するかという点も見ておきましょう。
メトリクス
service::telemetry::metrics の設定には processors や exporters の設定を追加することができ、上記の Internal telemetry のページにも以下のような例が記載されています。
service:
telemetry:
metrics:
readers:
- periodic:
exporter:
otlp:
protocol: http/protobuf
endpoint: "https://backend:4318"
他方、メトリクスに関しては、Prometheus形式でメトリクスが生成されている以上、Prometheus Receiverを利用してメトリクスをスクレープし、あとは適切なProcessor, Exporterを選んでデータパイプラインを構成することも可能です。
一例として、Splunk Distro of OpenTelemetry Collectorでは内部メトリクスを取得・送信するための設定がデフォルトで構成されています。
receivers:
prometheus/internal:
config:
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 10s
static_configs:
- targets: ["0.0.0.0:8888"]
##
## 中略
##
service:
pipelines:
metrics/internal:
receivers: [prometheus/internal]
processors: [memory_limiter, batch, resourcedetection, resource/add_mode]
exporters: [signalfx]
これを通じて送信されたデータは、デフォルトで提供される "OpenTelemetry Collector" ダッシュボードで確認することができます。

Critical Monitoringのメトリクスに異常が出ているので、何かがうまくいっていなさそうです
ログ
内部メトリクスと同様 service::telemetry::logs の設定には processors や exporters の設定を追加することができます。同様に、Internal Telemetryのページにも以下のような例が記載されています。
service:
telemetry:
logs:
processors:
- batch:
exporter:
otlp:
protocol: http/protobuf
endpoint: https://backend:4318
ログに関しては、例えばファイル出力して filelog receiver で取り込むこともできるでしょう。
ただしこの場合、ファイル出力したログを参照して送信する一連の処理をログに出力するという動きになるので、雪だるま式にログファイルが肥大化する懸念があります。
OTel Collectorサービスのログは、例えば Linux サーバである場合 journald でも確認することができますので、journald receiver を利用する方が簡単かもしれません。
receivers:
journald:
directory: /var/log/journal
units:
- splunk-otel-collector
##
## 中略
##
service:
pipelines:
logs/otel-debug:
receivers: [journald]
processors:
- memory_limiter
- batch
- resourcedetection
exporters: [splunk_hec]
まとめ
OpenTelemetry Collectorの内部テレメトリーを取り出して、オブザーバビリティバックエンドに送信する方法を紹介しました。
監視サービス自体の監視をどうするかといった議論は従来からよく出てくる話です。システムの内部状態を観測するために利用するOpenTelemetry Collector自体がうまく動かないということがあると、そもそもの観測性が失われてしまうわけですから、OTel Collector自体の状態をモニタリングすることは非常に重要です。
Internal Telemetryの出力設定に関するスキーマは Development の段階にあり、将来的に Breaking Change が発生する可能性も示唆されています。
The Collector uses the OpenTelemetry SDK declarative configuration schema for configuring how to export its internal telemetry. This schema is still under development and may undergo breaking changes in future releases. We intend to keep supporting older schemas until a 1.0 schema release is available, and offer a transition period for users to update their configurations before dropping pre-1.0 schemas. For details and to track progress see issue #10808.
今後の動向は引き続き注視していく必要がありそうです。
Happy OpenTelemetrying!
宣伝:Observability Conference Tokyo 2025
2025年10月27日に Observability Conference Tokyo 2025 が開催されます。
オブザーバビリティについて語りつくす1日として、多くの実践やナレッジがシェアされ、議論されることになると思います。
私も運営メンバーの一人として、当日参加される皆さんに楽しんでもらえるようなイベントにするべく企画に携わらせていただいておりますので、是非ご都合がつく方はご参加ください。
オフライン・オンラインのハイブリッド開催で、チケット好評発売中です。
詳細は公式サイトをご覧ください。
Discussion