Review Telemetry
Follow shared context and the
findings contract. Own emitted names,
dimensions, units, cardinality, redaction and duplicate instrumentation, on which
dashboards, alerts and queries depend.
Route symbol names to review-naming, cost-only findings to review-perf, and
stale/contradictory docs to review-consistency. Keep emitted-contract defects
here, combining signal and measured-cost evidence rather than duplicating them.
Procedure
- Inventory changed signals from instrument definitions and telemetry tests or
exported-signal snapshots, not surrounding prose. Locate comparable signals
and consumers.
- Apply the contract and emission questions below.
- Return exact emitted evidence and impact; apply
review-perf measurement
requirements to per-emission cost claims.
Signal-contract questions
- Follow OpenTelemetry semantic names/values for metrics, spans and attributes.
Reuse sibling dot-separated namespaces (
oxidizer.hyper), name shapes, units
and attribute sets rather than inventing parallel vocabulary.
- Treat additions/removals/renames in stable metric dimensions as breaking
changes to dependent queries/dashboards. Emit a sentinel for missing values,
never drop the dimension.
- Keep service-specific dimensions out of shared defaults; expose an extension
for the consumer to emit.
- Require metrics/logging layer names at construction, with sensible standard
pipeline defaults, and expose names on pipeline context.
- Put convention-carried units in instruments, not metric names.
Emission questions
- Bound metric attributes and span names: no request IDs, raw URIs, user or
tenant identifiers. Use enumerable error kinds or route templates, e.g.
connect.hyper.timeout or request.connect.connection_refused.
Convention-appropriate span/log attributes may be high-cardinality
(url.full on HTTP client spans); assess sensitivity/backend cost, not
cardinality alone. Order composite labels low-to-high cardinality so prefixes
remain queryable.
- Avoid per-emission
String allocation: prefer &'static str,
Cow<'static, str> or cached attributes. Cache instruments too.
- Does middleware/client instrumentation already emit retry, timeout, breaker
or request signals? Remove duplicate call-site metrics/logs and reuse it.
- Require a named consumer for new spans. If no backend consumes them, prefer
regular tracing APIs, metrics or logs. Per-request measurements are metrics;
logs describe events an operator must read.
- Reuse an existing tracing log front end rather than boxing/storing a local
logger provider.
- Route all user/customer data through repository classification/redaction
before emission.
Proof and coverage
Name the exact signal/attributes and violated convention or sibling, with
decisive emitted evidence, operator impact and corrected instrumentation.
Telemetry tables/dashboards can prove consumer dependence for a breaking
rename, not the emitted definition.
If comparable components instrument behavior but this change adds none, note
that once; do not demand unnecessary instrumentation.
Coverage: signals reviewed and names/attribute sets unconfirmed by definitions
or telemetry tests.
1---2name: review-telemetry3description: Review Rust changes for metrics, logs and spans that break OpenTelemetry semantic conventions, destabilize an existing dimension set, risk unbounded cardinality, allocate per emission, or duplicate instrumentation a library already provides. Use for a focused telemetry audit, or when review-lens routes changed telemetry here. Not for general logging style or for telemetry backend and exporter configuration review.4---56# Review Telemetry78Follow [shared context](../review-lens/review-context.md) and the9[findings contract](../review-delivery/findings-contract.md). Own emitted names,10dimensions, units, cardinality, redaction and duplicate instrumentation, on which11dashboards, alerts and queries depend.1213Route symbol names to `review-naming`, cost-only findings to `review-perf`, and14stale/contradictory docs to `review-consistency`. Keep emitted-contract defects15here, combining signal and measured-cost evidence rather than duplicating them.1617## Procedure18191. Inventory changed signals from instrument definitions and telemetry tests or20 exported-signal snapshots, not surrounding prose. Locate comparable signals21 and consumers.222. Apply the contract and emission questions below.233. Return exact emitted evidence and impact; apply `review-perf` measurement24 requirements to per-emission cost claims.2526## Signal-contract questions2728- Follow OpenTelemetry semantic names/values for metrics, spans and attributes.29 Reuse sibling dot-separated namespaces (`oxidizer.hyper`), name shapes, units30 and attribute sets rather than inventing parallel vocabulary.31- Treat additions/removals/renames in stable metric dimensions as breaking32 changes to dependent queries/dashboards. Emit a sentinel for missing values,33 never drop the dimension.34- Keep service-specific dimensions out of shared defaults; expose an extension35 for the consumer to emit.36- Require metrics/logging layer names at construction, with sensible standard37 pipeline defaults, and expose names on pipeline context.38- Put convention-carried units in instruments, not metric names.3940## Emission questions4142- Bound **metric attributes and span names**: no request IDs, raw URIs, user or43 tenant identifiers. Use enumerable error kinds or route templates, e.g.44 `connect.hyper.timeout` or `request.connect.connection_refused`.45 Convention-appropriate span/log **attributes** may be high-cardinality46 (`url.full` on HTTP client spans); assess sensitivity/backend cost, not47 cardinality alone. Order composite labels low-to-high cardinality so prefixes48 remain queryable.49- Avoid per-emission `String` allocation: prefer `&'static str`,50 `Cow<'static, str>` or cached attributes. Cache instruments too.51- Does middleware/client instrumentation already emit retry, timeout, breaker52 or request signals? Remove duplicate call-site metrics/logs and reuse it.53- Require a named consumer for new spans. If no backend consumes them, prefer54 regular tracing APIs, metrics or logs. Per-request measurements are metrics;55 logs describe events an operator must read.56- Reuse an existing tracing log front end rather than boxing/storing a local57 logger provider.58- Route all user/customer data through repository classification/redaction59 **before** emission.6061## Proof and coverage6263Name the exact signal/attributes and violated convention or sibling, with64decisive emitted evidence, operator impact and corrected instrumentation.65Telemetry tables/dashboards can prove consumer dependence for a breaking66rename, not the emitted definition.6768If comparable components instrument behavior but this change adds none, note69that once; do not demand unnecessary instrumentation.7071Coverage: signals reviewed and names/attribute sets unconfirmed by definitions72or telemetry tests.