ANW-42 Telemetry: take export config from OTEL_ environment variables only
Delete the uptrace DSN parser and the {endpoint}/v1/* concatenation that
produced the dead export, and build the OTLP exporters with no endpoint,
headers, or protocol so the SDK reads OTEL_EXPORTER_OTLP_* itself.
The SDK concatenates as naively as we did: measured against a local sink,
a ?query base sends POST /?query/v1/metrics and a #fragment base sends
POST /. So one check stays -- a query or fragment on
OTEL_EXPORTER_OTLP_ENDPOINT fails at startup. Per-signal variables are
used verbatim and need none.
A protocol variable is the second startup check. The exporter picks its
transport at build time and this binary ships OTLP/HTTP alone, so
OTEL_EXPORTER_OTLP_PROTOCOL=grpc kept exporting over HTTP with nothing in
the log -- the same silence this change removes.
service.name stays a default rather than policy: an attribute set on the
resource builder wins over the SDK detectors that read OTEL_SERVICE_NAME
and OTEL_RESOURCE_ATTRIBUTES, so anwesen supplies its own only for keys
the environment leaves alone.
Telemetry-off is our own check on the endpoint variables: with none set
the exporter would still build and aim at the SDK default localhost:4318.
--uptrace-dsn, --otlp-endpoint, and --otlp-header stay parsed but hidden,
so a deployment upgrading with them set fails naming the OTEL_
replacement instead of going quiet.
Assumed hidden clap stubs are the right migration shape; clap rejecting
the flags as unknown would say nothing about the replacement. Flag if a
plain unknown-argument error is wanted instead.
Assumed rejecting http/json alongside grpc is right: neither has a
transport in this build. Flag if a build with both features is wanted
instead.
This commit is contained in:
parent
8894ea0c7b
commit
dc113b8249
5 changed files with 563 additions and 227 deletions
22
src/main.rs
22
src/main.rs
|
|
@ -10,7 +10,7 @@ use std::sync::Arc;
|
|||
use anwesen::app::Anwesen;
|
||||
use anwesen::doctor;
|
||||
use anwesen::merge;
|
||||
use anwesen::telemetry::{self, RawTelemetryArgs, TelemetryConfig};
|
||||
use anwesen::telemetry::{self, OtelEnv, RawTelemetryArgs, TelemetryConfig};
|
||||
use anyhow::Result;
|
||||
use clap::Parser;
|
||||
use hydra::Application;
|
||||
|
|
@ -25,14 +25,18 @@ fn main() -> Result<()> {
|
|||
match cli.command {
|
||||
Command::Serve(args) => {
|
||||
init_logging(args.log_level);
|
||||
// Resolve telemetry config before the supervisor starts; an
|
||||
// unset endpoint leaves it `None` (export off, behaves as today).
|
||||
let telemetry = match TelemetryConfig::resolve(RawTelemetryArgs {
|
||||
uptrace_dsn: args.uptrace_dsn,
|
||||
otlp_endpoint: args.otlp_endpoint,
|
||||
otlp_headers: args.otlp_headers,
|
||||
slow_request_ms: args.otlp_slow_request_ms,
|
||||
})? {
|
||||
// Resolve telemetry config before the supervisor starts; no
|
||||
// OTEL_EXPORTER_OTLP_* endpoint leaves it `None` (export off,
|
||||
// no middleware). A removed flag is a startup error (ANW-42).
|
||||
let telemetry = match TelemetryConfig::resolve(
|
||||
&RawTelemetryArgs {
|
||||
uptrace_dsn: args.uptrace_dsn,
|
||||
otlp_endpoint: args.otlp_endpoint,
|
||||
otlp_headers: args.otlp_headers,
|
||||
slow_request_ms: args.otlp_slow_request_ms,
|
||||
},
|
||||
OtelEnv::from_env(),
|
||||
)? {
|
||||
Some(cfg) => Some(Arc::new(telemetry::init(cfg)?)),
|
||||
None => None,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue