CKEditor AI On-Premises observability
See what your CKEditor AI On-Premises deployment does at runtime: which requests it serves, how long the database takes, which model it called, and how many tokens the call cost.
CKEditor AI On-Premises uses OpenTelemetry. Traces cover incoming HTTP requests, database queries, and outgoing calls to LLM providers and to the other services you connect. Turn on AI spans, and traces also cover the models, the tools, the token usage, and the content of each call.
CKEditor AI On-Premises has two independent exports. They do not carry the same data, so enable either one on its own, or both:
- OTLP – everything CKEditor AI On-Premises records: HTTP requests, database queries, and, when you turn on AI spans, the AI operations too. Send it to any OTLP-compatible backend, for example Jaeger, Grafana Tempo, or Datadog.
- Langfuse – AI operations only. CKEditor AI On-Premises drops everything else. Langfuse shows dashboards for AI interactions, token usage, and costs.
This article connects those traces to your tracing backend, to Langfuse, or to both. For raw log output and log shipping, see Logs.
If you use an AI observability platform other than Langfuse, contact us. We can add support for it.
CKEditor AI On-Premises reads the OTEL_ and LANGFUSE_ variables below from the process environment when it starts. Pass them as environment variables, even when the rest of the settings come from a CS_CONFIG_PATH file. LLM_TELEMETRY_ENABLED is an ordinary option, so it can come from either source. Required configuration covers the two sources.
AI spans are off by default, and you turn them on separately from the exporters. Turn them on first. Without them, the OTLP export carries HTTP and database spans only, and Langfuse receives nothing.
An AI span records the full call: the prompt, including the document and any context, the reply, and the model’s reasoning text when the model reasons. The API never returns that reasoning text, so a trace is the only place to read it when you debug an unexpected answer. It also means your tracing backend receives your users’ documents. Pick a backend and a retention period with that in mind.
LLM_TELEMETRY_ENABLED=[true|false]Copy codeWhere:
LLM_TELEMETRY_ENABLED(optional, default:false) – set totrueto record spans for AI operations: the models used, the tools called, token usage, and the prompt, reply, and reasoning text of each call. In aCS_CONFIG_PATHfile the option name isllm_telemetry_enabled.
The following environment variables control the OTLP trace export:
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=[OTLP_TRACES_ENDPOINT_URL]
OTEL_TRACES_SAMPLER_ARG=[SAMPLING_RATE]
OTEL_DEBUG=[true|false]Copy codeWhere:
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT(required for OTLP export) – the endpoint that receives the traces, for examplehttp://jaeger:4318/v1/traces. The export uses OTLP over HTTP, so include the full path.OTEL_TRACES_SAMPLER_ARG(optional, default:1.0) – the sampling rate as a float between0.0and1.0.1.0captures every trace.0.5captures about half of them. CKEditor AI On-Premises decides sampling per trace, not per span.OTEL_DEBUG(optional) – set it to any non-empty value, and CKEditor AI On-Premises writes OpenTelemetry diagnostics to the container logs. If traces do not reach your collector, set it.
Langfuse is an open-source LLM observability platform. CKEditor AI On-Premises sends spans to Langfuse directly, with no collector in between.
Set both LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY to enable the export:
LANGFUSE_PUBLIC_KEY=[YOUR_LANGFUSE_PUBLIC_KEY]
LANGFUSE_SECRET_KEY=[YOUR_LANGFUSE_SECRET_KEY]
LANGFUSE_BASE_URL=[LANGFUSE_URL]
LANGFUSE_DEBUG=[true|false]Copy codeWhere:
LANGFUSE_PUBLIC_KEY(required) – the public API key from your Langfuse project.LANGFUSE_SECRET_KEY(required) – the secret API key from your Langfuse project.LANGFUSE_BASE_URL(optional, default:https://cloud.langfuse.com) – the base URL of your Langfuse instance. If you self-host Langfuse, set it.LANGFUSE_DEBUG(optional) – set totrueto write verbose Langfuse SDK diagnostics to the container logs.OTEL_DEBUGdoes not cover them.
The Langfuse export does not need OTEL_EXPORTER_OTLP_TRACES_ENDPOINT. Langfuse receives the spans directly.
This example records AI spans, exports to an OTLP collector, and connects to Langfuse Cloud. Add the four telemetry variables to the command from Deployment:
docker run --init -p 8000:8000 \
[Your config here] \
-e LLM_TELEMETRY_ENABLED="true" \
-e OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://your-otlp-collector:4318/v1/traces" \
-e LANGFUSE_PUBLIC_KEY="pk-lf-..." \
-e LANGFUSE_SECRET_KEY="sk-lf-..." \
docker.cke-cs.com/ai-service:[version]Copy code