[codex] Initialize exec-server OpenTelemetry at startup (#25019)

## Summary

- Initialize stderr tracing and the configured OpenTelemetry provider
for local and remote `codex exec-server` startup.
- Instrument the local and remote server entrypoints with a root runtime
span.
- Keep raw Noise environment, registration, and stream identifiers out
of exported spans while preserving them in local debug events.
- Keep telemetry setup in a focused CLI module instead of growing the
top-level command entrypoint.

## Stack

- Previous: none (`#27058` has merged)
- Next: #27466

## Validation

- `just test -p codex-exec-server --lib` (139 passed)
- `just test -p codex-cli --test exec_server` (3 passed)
- `just bazel-lock-check`
- `just fix -p codex-exec-server -p codex-cli`
- `just fmt`

---------

Co-authored-by: Richard Lee <richardlee@openai.com>
This commit is contained in:
starr-openai
2026-06-18 11:03:42 -07:00
committed by GitHub
Unverified
parent e8dd1b45cb
commit 4c7228e423
7 changed files with 88 additions and 21 deletions
+13 -6
View File
@@ -49,6 +49,7 @@ mod app_cmd;
#[cfg(any(target_os = "macos", target_os = "windows"))]
mod desktop_app;
mod doctor;
mod exec_server_telemetry;
mod marketplace_cmd;
mod mcp_cmd;
mod plugin_cmd;
@@ -1692,6 +1693,9 @@ async fn run_exec_server_command(
.environment_id
.ok_or_else(|| anyhow::anyhow!("--environment-id is required when --remote is set"))?;
let config = load_exec_server_config(root_config_overrides, strict_config).await?;
let _otel = exec_server_telemetry::init(Some(&config))
.inspect_err(|err| eprintln!("Could not create otel exporter: {err}"))
.ok();
let auth_provider =
load_exec_server_remote_auth_provider(&config, &base_url, cmd.use_agent_identity_auth)
.await?;
@@ -1706,12 +1710,15 @@ async fn run_exec_server_command(
codex_exec_server::run_remote_environment(remote_config, runtime_paths).await?;
Ok(())
} else {
if strict_config {
// Local exec-server startup does not consume Config, but strict
// mode should still reject unknown fields before opening a listener.
let _validated_config =
load_exec_server_config(root_config_overrides, strict_config).await?;
}
let config_result = load_exec_server_config(root_config_overrides, strict_config).await;
let config = if strict_config {
Some(config_result?)
} else {
config_result.ok()
};
let _otel = exec_server_telemetry::init(config.as_ref())
.inspect_err(|err| eprintln!("Could not create otel exporter: {err}"))
.ok();
let listen_url = cmd
.listen
.as_deref()