はじめに
七尾百合子さん、お誕生日 157日目 おめでとうございます!1 nikkieです。
OpenTelemetryのexporterを素振りします2
目次
- はじめに
- 目次
- opentelemetry-instrumentation-google-genai の zero-code の例
- Dockerイメージ otel/opentelemetry-collector を動かす
- opentelemetry-instrument python main.pyするまで
- exporterに記録された!
- 終わりに
opentelemetry-instrumentation-google-genai の zero-code の例
opentelemetry-instrument python main.py3すると、トレース・ログ・メトリクスが記録される例です。
ただ私は4317ポートで何を動かすか分からなかったんですよね。
An OTLP compatible endpoint should be listening for traces, logs, and metrics on http://localhost:4317.
Dockerイメージ otel/opentelemetry-collector を動かす
https://hub.docker.com/r/otel/opentelemetry-collector
「コレクターのセットアップ」にあるYAMLファイルを用意し、docker runします
docker run -p 4317:4317 -p 4318:4318 --rm -v $(pwd)/collector-config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector
opentelemetry-instrument python main.pyするまで
main.pyを省力版で用意4
import google.genai from dotenv import load_dotenv load_dotenv() def main(): client = google.genai.Client() response = client.models.generate_content( model="gemini-2.0-flash", contents="Why is the sky blue?", ) print(response.text) if __name__ == "__main__": main()
.env5
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 OTEL_EXPORTER_OTLP_PROTOCOL=grpc OTEL_SERVICE_NAME=opentelemetry-python-google-genai OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
uvで仮想環境を作りました(uv venv・Python 3.11.8 です)。
uv pip install -r requirements.txt6
google-genai opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc opentelemetry-instrumentation opentelemetry-instrumentation-google-genai opentelemetry-distro[otlp] python-dotenv
uv pip freezeの出力(環境再現用)
annotated-types==0.7.0 anyio==4.10.0 cachetools==5.5.2 certifi==2025.8.3 charset-normalizer==3.4.3 google-auth==2.40.3 google-genai==1.31.0 googleapis-common-protos==1.70.0 grpcio==1.74.0 h11==0.16.0 httpcore==1.0.9 httpx==0.28.1 idna==3.10 importlib-metadata==8.7.0 opentelemetry-api==1.36.0 opentelemetry-distro==0.57b0 opentelemetry-exporter-otlp==1.36.0 opentelemetry-exporter-otlp-proto-common==1.36.0 opentelemetry-exporter-otlp-proto-grpc==1.36.0 opentelemetry-exporter-otlp-proto-http==1.36.0 opentelemetry-instrumentation==0.57b0 opentelemetry-instrumentation-google-genai==0.3b0 opentelemetry-proto==1.36.0 opentelemetry-sdk==1.36.0 opentelemetry-semantic-conventions==0.57b0 packaging==25.0 protobuf==6.32.0 pyasn1==0.6.1 pyasn1-modules==0.4.2 pydantic==2.11.7 pydantic-core==2.33.2 python-dotenv==1.1.1 requests==2.32.5 rsa==4.9.1 sniffio==1.3.1 tenacity==9.1.2 typing-extensions==4.14.1 typing-inspection==0.4.1 urllib3==2.5.0 websockets==15.0.1 wrapt==1.17.3 zipp==3.23.0
exporterに記録された!
仮想環境を有効にして opentelemetry-instrument python main.py すると、collectorのdockerコンテナをrunしているターミナルに出力が!
全文:https://gist.github.com/ftnext/a8bd74df23fcfa64ca2c82b7fad25cf5
リクエスト「Why is the sky blue?」と
LogRecord #0
ObservedTimestamp: 2025-08-21 13:42:18.180994 +0000 UTC
Timestamp: 2025-08-21 13:42:18.180555 +0000 UTC
SeverityText:
SeverityNumber: Info(9)
Body: Map({"content":"Why is the sky blue?"})
Attributes:
-> gen_ai.system: Str(gemini)
-> event.name: Str(gen_ai.user.message)
Trace ID: c2fea995f3cc0d4bdb53cd112e73e4ba
Span ID: 8c936c4e99089bd8
Flags: 1
対するレスポンスが記録されています!
LogRecord #1
ObservedTimestamp: 2025-08-21 13:42:21.788134 +0000 UTC
Timestamp: 2025-08-21 13:42:21.788038 +0000 UTC
SeverityText:
SeverityNumber: Info(9)
Body: Map({"content":{"parts":[{"code_execution_result":null,"executable_code":null,"file_data":null,"function_call":null,"function_response":null,"inline_data":null,"text":"The sky is blue due to a phenomenon called **Rayleigh scattering**. Here's the breakdown:\n\n<省略>","thought":null,"thought_signature":null,"video_metadata":null}],"role":"model"},"finish_reason":"STOP","index":0})
Attributes:
-> gen_ai.system: Str(gemini)
-> event.name: Str(gen_ai.choice)
Trace ID: c2fea995f3cc0d4bdb53cd112e73e4ba
Span ID: 8c936c4e99089bd8
Flags: 1
終わりに
OpenTelemetryのexporterの1つ、otel/opentelemetry-collectorイメージを動かせました。
google-genaiのテレメトリをコンソールやファイルではなく、ついにexporterに送ることができました!
otel/opentelemetry-collectorイメージですが、送られたテレメトリを後から見返せるのか気になります。
-
黄前久美子さん、お誕生日おめでとうございます!
↩🎀𝙃𝙖𝙥𝙥𝙮 𝘽𝙞𝙧𝙩𝙝𝙙𝙖𝙮🎀
— アニメ「響け!ユーフォニアム」公式 (@anime_eupho) 2025年8月21日
本日8月21日は、
北宇治高校吹奏楽部 ユーフォニアム担当
黄前久美子の誕生日です✨
おめでとうございます🎂
誕生日をお祝いしてアイコンをプレゼント🎁#anime_eupho pic.twitter.com/4rwiQyT3i8 - 「私はexporterについて大いに素振りの余地があります」 Agent Development Kit で AgentTool はどのように Gemini に見えているか知りたく、OpenTelemetry によるトレースを読む - nikkie-ftnextの日記↩
- 自動計装ですね ↩
- 本家は環境変数でモデルやプロンプトを切り替えられるようにしています。 https://github.com/open-telemetry/opentelemetry-python-contrib/blob/v0.57b0/instrumentation-genai/opentelemetry-instrumentation-google-genai/examples/zero-code/main.py↩
- https://github.com/open-telemetry/opentelemetry-python-contrib/blob/v0.57b0/instrumentation-genai/opentelemetry-instrumentation-google-genai/examples/zero-code/.env↩
- そのままだと動かなかったので最新化しました。不要そうな依存は削除しています https://github.com/open-telemetry/opentelemetry-python-contrib/blob/v0.57b0/instrumentation-genai/opentelemetry-instrumentation-google-genai/examples/zero-code/requirements.txt↩