LLM observability
AI Agent 向け: このページの Markdown 版は https://ankole.agentbull.com/ja-JP/docs/llm-observability/index.md にあります。ドキュメント索引は https://ankole.agentbull.com/ja-JP/llms.txt にあります。
Ankole は OpenTelemetry trace を OpenTelemetry Protocol (OTLP) HTTP/protobuf で export できます。この機能はデフォルトで無効です。observability.traces.provider は Turn root と AIGateway LLM span に追加する vendor attributes を選択します。AIGateway model Provider や transport ではなく、他の OpenTelemetry span を filter しません。langfuse は Langfuse v4 agent と generation attributes、langsmith は LangSmith compatibility attributes、opentelemetry は汎用 OpenTelemetry、gen_ai.*、Ankole attributes を出力します。
有効な trace には model input と output が含まれ、tool argument と result が含まれる場合もあります。Ankole は credential、request header、一般的な caller metadata、暗号化された reasoning と tool field、および内部 __ankole_* field を削除します。inline data: media は byte count に置き換え、1 MiB を超える input または output payload は省略します。それでも receiver は適切な access control と retention policy を持つ trusted system である必要があります。
dispatch された各 Agent Turn は 1 つの trace になります。turn <event-type> root span は Langfuse の agent observation で、sanitize された trigger event と final reply を含みます。Main Agent tool span と AIGateway response span はその child です。Background Job には codex.turn と Codex tool span も含まれます。Turn context がない直接の AIGateway call は、引き続き ai_gateway.response を root にします。Agent Computer は protobuf OTLP batch を authenticated Runtime Fabric RPC lane 経由で送るため、receiver credential は control plane に残ります。
Langfuse を構成する
以下の手順は Langfuse OpenTelemetry guide と Langfuse v4 migration checklist に従います。
-
Langfuse project の Settings → API Keys から Public Key (
pk-lf-...) と Secret Key (sk-lf-...) を取得します。 -
Console → AppConfigure → LLM observability を開き、Trace Provider で Langfuse を選択します。
-
region に対応する base endpoint を入力します。EU は
https://cloud.langfuse.com/api/public/otel、US はhttps://us.cloud.langfuse.com/api/public/otel、Japan はhttps://jp.cloud.langfuse.com/api/public/otel、HIPAA はhttps://hipaa.cloud.langfuse.com/api/public/otelです。Self-hosted Langfuse 3.22.0 以降ではhttps://<langfuse-host>/api/public/otelを使います。 -
次の command で改行を含まない Basic Auth value を作成します。
printf '%s' 'pk-lf-...:sk-lf-...' | base64 | tr -d '\n' -
認証 header の行を 2 つ追加します。1 行目は名前を
Authorization、値をBasic <base64-value>にします。2 行目は名前をx-langfuse-ingestion-version、値を4にします。 -
Trace export を有効にして保存し、control plane を再起動します。
-
通常の Agent message を 1 件送信するか、Background Job を 1 件実行します。Langfuse には
turn <event-type>agent root observation が表示されます。Main Agent trace にはtool <name>とai_gateway.responsechild があり、各 response の下にchat <model>generation があります。Background Job にはcodex.turnと Codex tool span もあります。直接の AIGateway request は引き続きai_gateway.responseroot として表示されます。provider native compaction の呼び出しは独立したcompact <model>generation として表示されます。
endpoint に /v1/traces を含めないでください。Ankole が /v1/traces を追加して application/x-protobuf を送信します。Langfuse のこの endpoint は OTLP/gRPC を受け付けません。x-langfuse-ingestion-version: 4 は v4 real-time ingestion を選択します。headers は PostgreSQL に暗号化して保存されます。
Langfuse は Console setting を追加しなくても、新しい trace を trigger identity で group 化します。Ankole は次の規則で user.id を設定します。
- trusted human からの direct message Turn は
principal:<principal_uid>を使います。 - group Turn、または source channel を持つ event Turn は
channel:<signal_channel_id>を使います。 - source channel がなくても trusted human trigger がある Turn は
principal:<principal_uid>を使います。 - trusted human と source channel のどちらもない Turn は
user.idを省略します。
Turn に属さない direct AIGateway request は principal:<authenticated_subject_uid> を使います。Agent identity は ankole.principal.uid、ankole.principal.type、filter 可能な trace metadata に別に保持されます。Main Agent conversation または Background Job Codex session である既存の Langfuse session は変わりません。
この identity mapping は 5 つ目の AppConfigure value を追加しません。上記の 4 つの values は、引き続き export と OTLP receiver だけを制御します。更新した control plane と Agent Computer を再起動した後に作成する span だけが新しい mapping を使います。Langfuse の既存データは変わりません。control plane に任意の ANKOLE_ENV と ANKOLE_VERSION を設定すると、各 trace に Langfuse environment(小文字英数字と -、_、最大 40 文字)と release が付きます。
LangSmith を構成する
この構成は LangSmith OpenTelemetry guide と LangSmith announcement に従います。
- Console → AppConfigure → LLM observability を開き、Trace Provider で LangSmith を選択します。
- region に対応する base endpoint を設定します。GCP US は
https://api.smith.langchain.com/otel、GCP EU はhttps://eu.api.smith.langchain.com/otel、GCP APAC はhttps://apac.api.smith.langchain.com/otel、AWS US はhttps://aws.api.smith.langchain.com/otel、self-hosted はhttps://<langsmith-api-host>/api/v1/otelです。 - 認証 header に
x-api-keyを追加します。必要ならLangsmith-Projectも追加します。省略するとdefaultProject を使います。 - Trace export を有効にして保存し、control plane を再起動します。
AIGateway Response が conversation に属する場合、langsmith provider は conversation ID を LangSmith 公式の langsmith.trace.session_id に設定し、session.id と gen_ai.conversation.id にも保持します。
他の OTLP/HTTP receiver
次の receiver では observability.traces.provider=opentelemetry を使います。base endpoint に /v1/traces を追加しないでください。
Visual form では、次の Headers 列の各 entry を認証 header の 1 行として追加します。
| Receiver | Endpoint | Headers |
|---|---|---|
| OpenTelemetry Collector | http://<collector-host>:4318 |
authentication が不要なら {} |
| VictoriaTraces single-node | http://<victoria-traces>:10428/insert/opentelemetry |
trusted network で authentication proxy がなければ {} |
| VictoriaTraces cluster | http://<vtinsert>:10481/insert/opentelemetry |
trusted network で authentication proxy がなければ {} |
| Honeycomb US / EU | https://api.honeycomb.io / https://api.eu1.honeycomb.io |
{"x-honeycomb-team":"<api-key>"} |
| Grafana Cloud | stack の OpenTelemetry connection tile から base endpoint をコピー | {"Authorization":"Basic <base64(instance-id:access-policy-token)>"} |
VictoriaTraces への最終 path は /insert/opentelemetry/v1/traces です。VictoriaTraces は tenant authorization を提供しないため、untrusted network では vmauth などの authentication proxy を使います。詳細は VictoriaTraces OTLP documentation を参照してください。
Grafana Cloud token には traces:write が必要です。詳細は Honeycomb OTLP documentation と Grafana Cloud OTLP documentation を参照してください。Provider の選択は Turn root と AIGateway LLM span だけを enrich します。Worker tool span と control plane の他の span は vendor-neutral のまま、同じ configured receiver に送信されます。
設定変更は control-plane startup 時に一度だけ読み込まれます。無効にするには observability.traces.enabled を false にして control plane を再起動します。OTEL_TRACES_EXPORTER または OTEL_EXPORTER_OTLP_* で Ankole を構成しないでください。Ankole は OpenTelemetry の起動前と AppConfigure の endpoint と headers の適用前に、これらの variables を削除します。この exporter は AppConfigure だけが管理します。