Problem
docs/configuration/observability-exporters.md still says "Current scope is kind: \"otlp_http\" only." (line 9) and documents only the OTLP/HTTP exporter. The feature has since grown to three kinds, all with real DP delivery + e2e coverage, and a generalized dashboard form — none of which is documented:
Scope
Update docs/configuration/observability-exporters.md (keep the existing structure — Current Fields / Endpoint Restriction / Runtime Model / Operator Guidance / Troubleshooting / Related Pages — and the Docusaurus sentence-case conventions). Anchor every field/value to current code, don't invent.
Add / revise:
- Kinds overview — replace the "otlp_http only" line with the three kinds + a one-line purpose each.
- Per-kind config + supported backends:
otlp_http: endpoint (full /v1/traces URL) + headers; the backend list above; note the dashboard presets (Langfuse / Honeycomb / Grafana Cloud Tempo) and that Tempo/Loki/Jaeger are self-hosted (enter the endpoint manually).
aliyun_sls: endpoint (bare region host, e.g. ap-southeast-3.log.aliyuncs.com), project, logstore, credential_ref, content_mode (metadata_only default | full), content_max_bytes (default 128 KiB, ≤ 1 MiB).
object_store: provider (s3/gcs/azure_blob), bucket, prefix, region, credential_ref, compression (gzip/none), optional endpoint for S3-compatible (MinIO / R2).
credential_ref (the secret model) — for aliyun_sls + object_store, the cloud AccessKey is never in the config / cp-api / kine; only an opaque credential_ref the customer-deployed DP resolves locally (env / mounted secret). Document the DP-side env convention (SLS_CRED_<REF>_AK_ID / _AK_SECRET for SLS) and that the control plane stores only the reference.
content_mode privacy note — full writes end-user prompt + response text into the customer's SLS; opt-in, per-field-capped, with a content_truncated marker. Make the privacy implication explicit (and note the dashboard surfaces a warning when enabling Full).
- Dashboard configuration flow — the multi-kind exporter form (Kind selector → per-kind field group), one-click presets (OTLP vendors + S3/GCS/Azure/MinIO/R2), and the credential-reference field (not a plaintext key). cp-api validates per-kind before persisting.
- Cross-links / Related Pages — link the design issues for depth.
References (anchor to these)
Not in this doc (future kinds — mention as roadmap only)
datadog_logs (#688), Snowflake (#690), Databricks Delta Lake (#380) are designed but not shipped — list under a short "Roadmap" note, don't document config that doesn't exist yet.
Problem
docs/configuration/observability-exporters.mdstill says "Current scope iskind: \"otlp_http\"only." (line 9) and documents only the OTLP/HTTP exporter. The feature has since grown to three kinds, all with real DP delivery + e2e coverage, and a generalized dashboard form — none of which is documented:otlp_http— shipped; OTLP/HTTP-JSON traces. Backends: Tempo, Loki, Jaeger, Honeycomb, Grafana Cloud, Langfuse-via-OTLP. Dashboard one-click presets exist for Langfuse / Honeycomb / Grafana Cloud Tempo.aliyun_sls— Aliyun SLS native PutLogs, with opt-incontent_mode: fullprompt/response capture (DP: feat(obs): pluggable observability-sink framework + Aliyun SLS exporter #528 + feat(obs): capture request/response content for full-mode SLS exporters #532; CP/dashboard: api7/AISIX-Cloud#709).object_store— batched NDJSON to S3 / GCS / Azure Blob (+ S3-compatible MinIO / Cloudflare R2) (DP: feat(obs): object_store sink — one S3/GCS/Azure exporter on the shared pipeline #531; CP/dashboard: api7/AISIX-Cloud#706 + feat(docker): non-root image binds :80/:443 via CAP_NET_BIND_SERVICE file capability #714).Scope
Update
docs/configuration/observability-exporters.md(keep the existing structure — Current Fields / Endpoint Restriction / Runtime Model / Operator Guidance / Troubleshooting / Related Pages — and the Docusaurus sentence-case conventions). Anchor every field/value to current code, don't invent.Add / revise:
otlp_http:endpoint(full/v1/tracesURL) +headers; the backend list above; note the dashboard presets (Langfuse / Honeycomb / Grafana Cloud Tempo) and that Tempo/Loki/Jaeger are self-hosted (enter the endpoint manually).aliyun_sls:endpoint(bare region host, e.g.ap-southeast-3.log.aliyuncs.com),project,logstore,credential_ref,content_mode(metadata_onlydefault |full),content_max_bytes(default 128 KiB, ≤ 1 MiB).object_store:provider(s3/gcs/azure_blob),bucket,prefix,region,credential_ref,compression(gzip/none), optionalendpointfor S3-compatible (MinIO / R2).credential_ref(the secret model) — foraliyun_sls+object_store, the cloud AccessKey is never in the config / cp-api / kine; only an opaquecredential_refthe customer-deployed DP resolves locally (env / mounted secret). Document the DP-side env convention (SLS_CRED_<REF>_AK_ID/_AK_SECRETfor SLS) and that the control plane stores only the reference.content_modeprivacy note —fullwrites end-user prompt + response text into the customer's SLS; opt-in, per-field-capped, with acontent_truncatedmarker. Make the privacy implication explicit (and note the dashboard surfaces a warning when enabling Full).References (anchor to these)
crates/aisix-obs/src/otlp_http_sink.rs(otlp delivery + fan-out),crates/aisix-obs/src/sink/sls.rs(SLS PutLogs),crates/aisix-obs/src/sink/object_store.rs(object storage);crates/aisix-core/src/models/observability_exporter.rs(the config shapes).e2e/cases/observability_exporter_test.goin api7/AISIX-Cloud (otlp → real OpenTelemetry Collector; SLS → real-logstore readback).Not in this doc (future kinds — mention as roadmap only)
datadog_logs(#688), Snowflake (#690), Databricks Delta Lake (#380) are designed but not shipped — list under a short "Roadmap" note, don't document config that doesn't exist yet.