Berserk Docs

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 codex

The 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. Use http:// only for a plaintext endpoint, such as an in-cluster ingest:4317.
  • Codex ignores [otel] in a project's .codex/config.toml.
  • [analytics] enabled = false also turns off metrics_exporter.

Prompts

Codex leaves prompt text out of its logs. To include it:

[otel]
log_user_prompt = true

Verify

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.

On this page