OpenTelemetryの計装ができているか確認する

OTLPを使うときによく opentelemetry.sdk.trace.export.BatchSpanProcessor を使うが、このモジュールには計装ができているかを簡単に確認できる SimpleSpanProcessor と ConsoleSpanExporter がある。

# ...
from opentelemetry.sdk.trace.export import BatchSpanProcessor, SimpleSpanProcessor, ConsoleSpanExporter

# ...
provider = TracerProvider()

if True:  # OTLP で出力するとき
    exporter = OTLPSpanExporter()
    processor = BatchSpanProcessor(exporter)
    provider.add_span_processor(processor)
else:  # デバッグ用にSpanをコンソール出力する
    provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))

このようにConsoleSpanExporterとSimpleSpanProcessorを組み合わせると、スパンを終了するとすぐにこのようにコンソールに表示される。

{
    "name": "select",
    "context": {
        "trace_id": "0x482e696dfeddb746339f93e26468871a",
        "span_id": "0x214fc3976d4a5031",
        "trace_state": "[]"
    },
    "kind": "SpanKind.CLIENT",
    "parent_id": null,
    "start_time": "2025-01-10T09:47:54.071241Z",
    "end_time": "2025-01-10T09:47:54.072727Z",
    "status": {
        "status_code": "UNSET"
    },
    "attributes": {
        "db.system": "mysql",
        "db.name": "mysql",
        "db.statement": "select help_topic_id, name from help_topic",
        "db.user": "root",
        "net.peer.name": "127.0.0.1",
        "net.peer.port": 3306
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "service.name": "mysqlclient-test"
        },
        "schema_url": ""
    }
}

ちゃんと計装できているか、取得するつもりのattributeが本当に取得できているかどうかの確認するとき、OpenTelemetry Collectorをローカルで動かすよりももっと手軽に使える。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。