Codex
Send Codex's logs, metrics and traces to Berserk with an ingest token
Codex exports OpenTelemetry logs, metrics and traces: prompts, API requests with token counts, and tool calls. It sends them over OTLP/gRPC to your ingest endpoint.
Create an Ingest Token
Create a token on Settings → Databases → Tokens, or with the CLI:
bzrk ingest-token create --table default codexThe token value is shown once. This token sends every signal to the default table; to choose other tables, see Ingest Tokens.
Configure Codex
Add this to ~/.codex/config.toml. The endpoint is the OTLP gRPC address from Settings → Endpoints; on Managed Berserk it is ingest.<your-domain>:4317.
[otel.exporter.otlp-grpc]
endpoint = "https://ingest.<your-domain>:4317"
headers = { authorization = "Bearer <your-ingest-token>" }
[otel.trace_exporter.otlp-grpc]
endpoint = "https://ingest.<your-domain>:4317"
headers = { authorization = "Bearer <your-ingest-token>" }
[otel.metrics_exporter.otlp-grpc]
endpoint = "https://ingest.<your-domain>:4317"
headers = { authorization = "Bearer <your-ingest-token>" }exporter sends logs, trace_exporter traces and metrics_exporter metrics. Codex reads the file when it starts.
https://connects with TLS. Usehttp://only for a plaintext endpoint, such as an in-clusteringest:4317.- Codex ignores
[otel]in a project's.codex/config.toml. [analytics] enabled = falsealso turns offmetrics_exporter.
Prompts
Codex leaves prompt text out of its logs. To include it:
[otel]
log_user_prompt = trueVerify
Run a prompt in Codex, then:
bzrk search "default | where resource['service.name'] startswith 'codex' | take 10" --since "5m ago"service.name names the Codex client, such as codex_exec for codex exec. Codex sessions do not appear in AI Sessions, which reads Claude Code's spans.