Skip to main content

OpenAI Codex

OpenAI Codex has native OpenTelemetry support. Once enabled, Oodle collects metrics and event logs and turns them into use-case dashboards covering adoption, token consumption, tool behavior, and performance and reliability across your organization.

Codex charts dashboard

Getting Started

1. Enable Telemetry

The fastest way is to use the integration tile in the Oodle UI:

  1. Navigate to Settings → Integrations
  2. Open the AI Observability section
  3. Click the Codex Observability tile
  4. Select an API key and follow the steps shown

Alternatively, add the following to your Codex configuration file (~/.codex/config.toml):

#:schema https://developers.openai.com/codex/config-schema.json

[otel]
environment = "production"
log_user_prompt = true

exporter = { otlp-http = {
endpoint = "https://<LOGS_ENDPOINT>/ingest/otel/v1/logs",
protocol = "binary",
headers = {
"X-API-KEY" = "<API_KEY>",
"X-OODLE-INSTANCE" = "<INSTANCE_ID>",
},
}}

metrics_exporter = { otlp-http = {
endpoint = "https://<METRICS_ENDPOINT>/v2/otlp/metrics/<INSTANCE_ID>",
protocol = "binary",
headers = {
"X-API-KEY" = "<API_KEY>",
"X-OODLE-INSTANCE" = "<INSTANCE_ID>",
},
}}

Replace <METRICS_ENDPOINT>, <API_KEY>, and <INSTANCE_ID> with values from the integration tile.

tip

The integration tile in the Oodle UI generates a ready-to-copy config.toml with the correct endpoints and API key pre-filled.

Alternative: Environment Variables

For quick testing you can export the standard OpenTelemetry variables directly in your shell:

export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=https://<METRICS_ENDPOINT>/v2/otlp/metrics/<INSTANCE_ID>
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://<LOGS_ENDPOINT>/ingest/otel/v1/logs
export OTEL_EXPORTER_OTLP_HEADERS="X-API-KEY=<API_KEY>, X-OODLE-INSTANCE=<INSTANCE_ID>"
export OTEL_LOG_USER_PROMPTS=1
export OTEL_METRIC_EXPORT_INTERVAL=10000
export OTEL_LOGS_EXPORT_INTERVAL=5000

2. Roll Out to Your Team

Commit the config.toml above to your dotfiles repository or place it in each developer's ~/.codex/ directory via your configuration management tool.

3. Verify Data

Once telemetry starts flowing, navigate to AI Cost Management → Codex in the Oodle sidebar.

Dashboards

The Codex analysis page is organized around the questions engineering leadership asks of a coding agent. Each tab embeds a dashboard that leads with headline numbers, followed by trends and ranked breakdowns.

Usage and Adoption

Is the team using it?

PanelDescription
Active UsersDistinct engineers who ran Codex
ConversationsDistinct Codex conversations, plus conversations per active user
PromptsUser prompts submitted
Activity TrendsActive users and conversations over time
Surface / Model / Version MixWhere activity runs: the IDE/app backend vs the terminal CLI, model share, and version adoption
Top UsersEngineers ranked by prompts and tokens

Token Consumption

Token volume is the primary driver of Codex spend, so this tab is the budget view.

PanelDescription
Total TokensAggregate token usage, the headline consumption number
Tokens per Active User / per ConversationUnit consumption for capacity and seat modeling
Cached Input RateShare of input context served from cache, with health thresholds. Higher is cheaper
Token BreakdownUsage by token type (input, output, cached, reasoning), model, surface, and version
Top Users and SessionsHighest-consumption engineers and conversations
Prompt EconomicsAverage prompt size and total tokens consumed per prompt

Use the Token Type dashboard filter to isolate a category (input, output, cached_input, reasoning_output).

Tools and Automation

Is the agent working well?

PanelDescription
Tool CallsInvocation volume and distinct tools used
Tool Success RateShare of tool calls that succeeded, with health thresholds
Avg Tool DurationMean execution time, overall and per tool
Per-tool Trends and LeaderboardsCalls, failures, and latency ranked by tool
MCP ServersExternal integration usage grouped by MCP server

Performance and Reliability

Codex exports rich latency telemetry, so this tab answers how fast and stable the agent feels.

PanelDescription
Avg Time to First TokenHow long users wait before Codex starts responding, with health thresholds
Avg Turn DurationEnd-to-end latency per turn
WebSocket Success RateAPI transport health, with health thresholds
Latency TrendsTime to first token / first message and turn duration over time
Startup LatencyPrewarm and shell snapshot times from launch to a usable session
Per-model LatencyTime to first token and turn duration ranked by model

This tab is built on Codex's native metrics, which carry model, originator, and version dimensions; use its dashboard filters to slice by those.

Sessions

Codex sessions table

The Sessions tab shows individual Codex sessions:

ColumnDescription
Start TimeWhen the session began
SessionCodex conversation ID
UserEmail of the developer
SurfaceWhere Codex ran: app-server (IDE/extension) or cli (terminal)
DurationWall-clock duration
TokensTotal tokens (input + output + cached)

Click any row to open a Session Detail drawer showing a turn-by-turn timeline of every event.

Session Detail Drawer

Codex session detail drawer

The drawer displays:

  • Session metadata: user, model, app version
  • Aggregated stats: tokens, tool calls, errors, duration (only populated fields are shown)
  • Turn-by-turn timeline: each turn is collapsible and shows individual events (SSE events, WebSocket events, tool calls). Every event row is expandable to reveal the full raw JSON payload.

What Gets Collected

Metrics

Codex exports the following as OpenTelemetry metrics (delta temporality):

MetricExtra LabelsDescription
codex_turn_token_usagetoken_typeToken count by type (input, output, cached, reasoning, total)
codex_thread_startednoneConversations started
codex_turn_tool_callnoneTool invocations per turn
codex_websocket_requestsuccessWebSocket API requests
codex_turn_e2e_duration_msnoneEnd-to-end turn latency
codex_turn_ttft_duration_msnoneTime to first token
codex_turn_ttfm_duration_msnoneTime to first message
codex_websocket_event_duration_msnoneWebSocket event processing time
codex_startup_prewarm_duration_msnoneStartup prewarm latency
codex_shell_snapshot_duration_msnoneShell snapshot capture latency
codex_turn_network_proxynoneTurns routed through the network proxy

All native metrics carry model, originator, and app_version. These power the Performance and Reliability dashboard.

Oodle also derives session-level metrics from the event logs below: oodle_logs_codex_token_usage (tokens keyed by conversation, user, model, surface, version, and token type), oodle_logs_codex_tool_count and oodle_logs_codex_tool_duration_ms (per-tool activity with MCP server and success dimensions), and oodle_logs_codex_prompt_length_bytes (prompt sizes). These power the Usage and Adoption, Token Consumption, and Tools and Automation dashboards plus the Sessions tab, and they honor the sidebar User and Surface filters.

Events (Logs)

Events are exported via the OpenTelemetry logs protocol. Each event has an attributes.event.name field:

Event TypeKey Attributes
codex.conversation_startsConversation ID, model, user email
codex.sse_eventModel, event kind, token counts, duration
codex.websocket_eventModel, event kind, duration, success
codex.websocket_requestModel, duration, success
codex.websocket_connectModel, duration
codex.user_promptPrompt text, prompt length
codex.tool_decisionTool name, decision, source
codex.tool_resultTool name, success, duration, error

Events are grouped by conversation.id to reconstruct the turn-by-turn timeline on the Sessions tab.

Further Reading


Support

If you need assistance or have any questions, please reach out to us through: