WEB / WEB-21.03
Logs, metrics, and traces
Observe business outcomes, signal production, sampling, and observer visibility separately.
1. Core · Mechanism
Read every scenario without motion
Signal production
- Public operation
The fixed public-note input is known; instrumentation, local exporter, and observer know no completion record yet.
- Public business service
- Public input known
- Local instrumentation
- Signals not recorded
- Local export adapter
- Local sink empty
- Observer projection
- Observer has no record
- Business result
The own public-read adapter produces status200 and Tea title; telemetry delivery is a separate event from business completion.
- Public business service
- Tea result completed
- Local instrumentation
- Signals not recorded
- Local export adapter
- Local sink empty
- Observer projection
- Observer has no record
- Metric increment
The selected operation/status counter increments from local input; a metric aggregate does not replace an individual log record.
- Public business service
- Tea result completed
- Local instrumentation
- Counter incremented
- Local export adapter
- Local sink empty
- Observer projection
- Observer has no record
- Context relation
Supplied logical spans share traceAlias and an exact parentAlias relationship; they are not a measured network trace.
- Public business service
- Tea result completed
- Local instrumentation
- Root / child recorded
- Local export adapter
- Local sink empty
- Observer projection
- Observer has no record
- Redact / project
Known fake authorization/session aliases are excluded by the output allowlist; the source dictionary is unchanged.
- Public business service
- Tea result completed
- Local instrumentation
- Allowlisted log ready
- Local export adapter
- Local sink empty
- Observer projection
- Observer has no record
- Local stream write
The own structured record is written to a StringIO stream; no real collector or remote telemetry packet is used.
- Public business service
- Tea result completed
- Local instrumentation
- Allowlisted log ready
- Local export adapter
- Own stream written
- Observer projection
- Observer has no record
- Independent observe
An independent JSON parser reads event/operation/correlation fields; seeded aliases are absent from output.
- Public business service
- Tea result completed
- Local instrumentation
- Allowlisted log ready
- Local export adapter
- Own stream written
- Observer projection
- Parsed public record
Unsampled trace
- Sampling decision
The selected branch supplies sampled=false; this decision does not say that the business operation never occurs.
- Public business service
- Public input known
- Local instrumentation
- sampled=false supplied
- Local export adapter
- Local sink unchanged
- Observer projection
- No request trace
- Read completes
The public-read adapter produces normal status200; trace selection does not alter this finite result.
- Public business service
- Tea result completed
- Local instrumentation
- sampled=false supplied
- Local export adapter
- Local sink unchanged
- Observer projection
- No request trace
- Counter still counts
The own request counter includes the sampled=false operation; metric counting and trace inclusion are separate decisions.
- Public business service
- Tea result completed
- Local instrumentation
- Metric +1 recorded
- Local export adapter
- Local sink unchanged
- Observer projection
- No request trace
- Trace omitted
Declared sampling leaves retained trace0; an omitted trace is not a synthetic failure event.
- Public business service
- Tea result completed
- Local instrumentation
- Trace deliberately absent
- Local export adapter
- Local sink unchanged
- Observer projection
- No request trace
- Knowledge boundary
The observer does not equate no trace with no event; the verified sampling reason remains beside business completion.
- Public business service
- Tea result completed
- Local instrumentation
- Trace deliberately absent
- Local export adapter
- Local sink unchanged
- Observer projection
- No trace; event occurred
Exporter failure
- Read input known
The export-failure branch starts with an own public read and declared best-effort diagnostics policy; it is not a mandatory audit.
- Public business service
- Public input known
- Local instrumentation
- Record not produced
- Local export adapter
- Failing sink supplied
- Observer projection
- Observer empty
- Business completes
The public-note read produces a successful result; logging-sink failure is neither a business mutation nor a permission verdict.
- Public business service
- Business success200
- Local instrumentation
- Record not produced
- Local export adapter
- Failing sink supplied
- Observer projection
- Observer empty
- Record projection
Only public allowlisted fields enter the local record; raw seeded aliases are not included in sensitive output.
- Public business service
- Business success200
- Local instrumentation
- Public record ready
- Local export adapter
- Failing sink supplied
- Observer projection
- Observer empty
- Exporter failure
The own failing sink raises OSError; an actual local exception is observed without claiming a remote exporter outage.
- Public business service
- Business success200
- Local instrumentation
- Public record ready
- Local export adapter
- Own OSError observed
- Observer projection
- Observer empty
- Visibility missing
The observer retains exported record0 and visibilityConfirmed=false; business success is not turned into a health guarantee.
- Public business service
- Business success200
- Local instrumentation
- Public record ready
- Local export adapter
- Own OSError observed
- Observer projection
- export0 / visibility gap
- Scope / policy
The explicit public-read policy preserves the result without a general guarantee about compliance audit completeness.
- Public business service
- Success / diagnostic gap
- Local instrumentation
- Public record ready
- Local export adapter
- Own OSError observed
- Observer projection
- export0 / visibility gap
Missing signal
- No observation
The missing case supplies no evidence about an application event, exporter result, or recent counter sample.
- Public business service
- Operation unobserved
- Local instrumentation
- No observation supplied
- Local export adapter
- Sink state unknown
- Observer projection
- Observer has no evidence
- Window undefined
An empty measurement window leaves the error fraction undefined; absence of observation is not written as rate0.
- Public business service
- Operation unobserved
- Local instrumentation
- No observation supplied
- Local export adapter
- Sink state unknown
- Observer projection
- Denominator0 / undefined
- Health unknown
Health unknown proves neither that the application is down nor healthy; it states only an evidence boundary.
- Public business service
- Operation unobserved
- Local instrumentation
- No observation supplied
- Local export adapter
- Sink state unknown
- Observer projection
- Health unknown
- No event inference
The observer asserts neither no event nor no failure; a missing record cannot confer authorization or business success.
- Public business service
- Operation unobserved
- Local instrumentation
- No observation supplied
- Local export adapter
- Sink state unknown
- Observer projection
- No absence proof
ACTORS · STATE · DATA FLOW
Observability is a question beyond instrumentation counts
Observability uses external signals to understand internal system behavior and why a selected outcome occurred. Many log lines or an attractive dashboard are not enough. Choose the question first: did a public note read finish, which dependency waited, where did an error occur, and did the observation pipeline receive data? Bind instrumentation, signal semantics, and correlation to that question. Telemetry outcomes do not become authoritative business state.
A log records an event in structured or unstructured form with time, event type, and bounded context. Metrics aggregate selected measurements; request counts, error counts, and histograms are different kinds. A cumulative counter can increase while process resets or exporter temporality affect interpretation. A gauge describes a current observation and a histogram a distribution. Raw URLs or user identifiers as labels can create cardinality cost. This lesson uses finite operation/status dimensions without vendor tuning numbers.
A trace connects operations through spans and parent/context relationships. A public-read root can have a local-note-read child; shared context and the correct parent convey causality. A correlation identifier is not a credential or permission grant. trace-demo and span-root are inert teaching aliases, not a claimed trace wire format. The logical10–14 root duration4 and11–13 child duration2 are authored clock values, not measured latency or captured production traces.
An event need not appear in every signal
Instrumentation, sampling, local buffers, exporters, and collector/backend stages differ. A request can occur without a retained trace under selected sampling. Separate metric instrumentation can still count it. Head sampling decides early and does not guarantee selection of a later error; tail sampling can inspect more completed spans but has its own buffering and availability limits. The fixture uses a supplied sampled boolean, not an OpenTelemetry sampler or collector.
The finite window contains three local public calls: two successes and one unavailable result. Request total is3 and error total1, while only two selected requests retain trace records. Missing one trace does not make the metric total wrong. Error fraction1/3 uses that selected denominator; no global rate follows without window, reset, and label scope. An empty window with denominator0 has undefined rate, which differs from zero measured errors.
Producing a record, redacting it, submitting it to an exporter, and storing it for observation are separate facts. A normal own stream exports structured public data for independent JSON parsing. In the failure case a selected local sink raises OSError: business success remains, but observed exports are0 and visibility is unknown. This public-read policy is not a general compliance/audit permission; required audit events need their own retention and durability contracts.
2. Red · Trust & Impact
Read every scenario without motion
Trace absence
- Unsampled successful call
The unsampled call has status 200, businessCompleted true and metricIncrement 1, but sampled false and retainedTraces 0. Trace absence does not mean the request did not occur.
- Diagnostic ledger
- Business complete / metric+1 / trace0
- Observation policy
- Not yet evaluated
- Observer outcome
- Not yet evaluated
- Window denominator
The 200/503/200 window has requestTotal 3 and errorTotal 1. Using retainedRequestTraces 2 as denominator changes scope; sampling does not remove calls from metrics.
- Diagnostic ledger
- Business complete / metric+1 / trace0
- Observation policy
- Error fraction1/3 / retained traces2
- Observer outcome
- Not yet evaluated
- Empty input is not a rate
Missing denominator 0 has windowRate null. Zero observations do not yield an error fraction of 0 or health without signal-coverage evidence.
- Diagnostic ledger
- Business complete / metric+1 / trace0
- Observation policy
- Error fraction1/3 / retained traces2
- Observer outcome
- No denominator / rate null / health unknown
- Read span relationships
span-child refers to span-root in trace-demo, with logical interval 11–13 inside root 10–14. Authored duration is not measured milliseconds or latency.
- Diagnostic ledger
- Logical parent relation / no wall-clock latency
- Observation policy
- Error fraction1/3 / retained traces2
- Observer outcome
- No denominator / rate null / health unknown
- Bound causal claims
Equal operation names or nearby timestamps do not establish parent context. Trace alias and exact parent relation retain scope without diagnosing a production bottleneck from logical duration.
- Diagnostic ledger
- Logical parent relation / no wall-clock latency
- Observation policy
- Correlation relation ≠ full causal diagnosis
- Observer outcome
- No denominator / rate null / health unknown
- Name absence correctly
Verified sampling explains known trace absence; missing observation lacks that explanation. No signal is not collapsed into no event or successful health.
- Diagnostic ledger
- Logical parent relation / no wall-clock latency
- Observation policy
- Correlation relation ≠ full causal diagnosis
- Observer outcome
- Sampling absence ≠ unexplained visibility gap
Export and privacy
- Public log projection
Fake input includes demo-token-alias and demo-session-alias. The allowlist exports only event, operation and correlationAlias without mutating the source object.
- Diagnostic ledger
- Three exported fields / fake aliases excluded
- Observation policy
- Not yet evaluated
- Observer outcome
- Not yet evaluated
- Narrow redaction scope
Known-field projection is not a secret detector for every nested format. Trace attributes and metric dimensions do not automatically pass through the same filter.
- Diagnostic ledger
- Three exported fields / fake aliases excluded
- Observation policy
- Known-field projection / other signals separate
- Observer outcome
- Not yet evaluated
- Export-sink failure
exportFailure retains businessCompleted true and status 200 with exportOk false and exportedRecords 0. Successful public reading does not set visibilityConfirmed true.
- Diagnostic ledger
- Three exported fields / fake aliases excluded
- Observation policy
- Known-field projection / other signals separate
- Observer outcome
- Business200 / export false / visibility false
- Policy qualification
This public diagnostic uses explicit best-effort policy. Mandatory security audit requires separate treatment of export failure; the example is not a universal fail-open rule.
- Diagnostic ledger
- Best-effort public diagnostics only
- Observation policy
- Known-field projection / other signals separate
- Observer outcome
- Business200 / export false / visibility false
- Do not justify secret collection
Closing a correlation gap does not require Authorization, sessions or private bodies. Fake seed values are not credentials; minimal public comparison fields suffice.
- Diagnostic ledger
- Best-effort public diagnostics only
- Observation policy
- Minimum fields / no raw credential collection
- Observer outcome
- Business200 / export false / visibility false
- Report two outcomes separately
The public result completed while diagnostic export failed. The record proves neither server authorization nor backend delivery; local sink failure narrows observer coverage.
- Diagnostic ledger
- Best-effort public diagnostics only
- Observation policy
- Minimum fields / no raw credential collection
- Observer outcome
- Business result known / diagnostic gap retained
ASSUMPTION · BOUNDARY · CONTROL
Reading no signal as no event or healthy
An absent trace does not prove that an operation never occurred. Sampling false, missing context, export failure, or retention windows can explain the gap. The condition examined is an observation gap, not an attack workflow. In the unsampled branch the business response completes and metrics increment while trace records remain0. The control separates outcomes from recording decisions without fabricating another success or failure event.
A metric0 does not prove no errors unless instrumentation and observation-window coverage are known. Producing error fraction0 from empty input hides the denominator. Health assessment combines expected signal production, recent observations, and user-flow results. The missing case retains unknown observer state; a dashboard or completed static scene confers neither real application health nor caller authority.
More collected data is not always better
Copying bodies, Authorization, session identifiers, or private attributes wholesale into logs can expose secrets and personal data. The fixture seeds only fake demo-token-alias and demo-session-alias values. Its output allowlist retains event, operation, and correlationAlias without mutating the source dictionary. This is not discovery of real secrets or a detector for every nested log format; independent reading checks only that known fixture fields do not reach the sink.
Span attributes and metric dimensions also collect data. A log filter does not automatically apply to other signals. High-cardinality raw identifiers affect memory, cost, and investigation scope. Operational telemetry and authoritative security audits can have different completeness and retention guarantees. Separating export failure from business results must not dismiss mandatory audit gaps; this example selects only a public read and an explicit best-effort diagnostic policy.
3. Blue · Secure development & defense
Read every scenario without motion
Signal controls
- Three-call inventory
Adapter statuses are 200/503/200 with 3 requests, 2 successes and 1 error. Counter scope is this finite window, not a global service rate or SLA.
- Public telemetry records
- Window3 / success2 / error1
- Signal comparison
- Not yet evaluated
- Coverage outcome
- Not yet evaluated
- Sampling comparison
Sampling true/true/false retains two traces while the third call increments metrics. Outcome and retention remain separate; trace count is not the request denominator.
- Public telemetry records
- Window3 / success2 / error1
- Signal comparison
- Calls3 / retained traces2
- Coverage outcome
- Not yet evaluated
- Structured-field control
The exported record contains only three allowed fields. Fake authorization/session aliases are absent and sourceMutated false; no broader anonymization success is added.
- Public telemetry records
- Window3 / success2 / error1
- Signal comparison
- Calls3 / retained traces2
- Coverage outcome
- Allowed fields only / source unchanged
- Span-context control
Root has null parent, child refers to span-root, and both use trace-demo. End-minus-start yields 4/2 logical units, kept separate from real timing claims.
- Public telemetry records
- Exact parent relation / logical durations4,2
- Signal comparison
- Calls3 / retained traces2
- Coverage outcome
- Allowed fields only / source unchanged
- Three visibility states
Unsampled has a verified recording decision, exportFailure an observed sink OSError, and missing no observation. The same zero count carries different knowledge.
- Public telemetry records
- Exact parent relation / logical durations4,2
- Signal comparison
- Sampling / observed export error / unknown
- Coverage outcome
- Allowed fields only / source unchanged
- Observer-health boundary
Finite log/count comparisons remain within local-adapter scope. They do not claim collector, remote exporter, SDK or production-log execution; visibility and business outcome remain separate.
- Public telemetry records
- Exact parent relation / logical durations4,2
- Signal comparison
- Sampling / observed export error / unknown
- Coverage outcome
- Local signal evidence / remote coverage unmeasured
Observation gap
- Empty observer view
Missing has observationPresent false and health unknown. No observer record establishes neither source-event absence nor service health.
- Public telemetry records
- No observation / health unknown
- Signal comparison
- Not yet evaluated
- Coverage outcome
- Not yet evaluated
- Missing coverage conditions
Sampling, export success and retained window are unknown. Copying normal export or unsampled explanations would invent a verified cause for this missing state.
- Public telemetry records
- No observation / health unknown
- Signal comparison
- Sampling/export/window missing
- Coverage outcome
- Not yet evaluated
- Do not compute a rate
Denominator 0 and windowRate null are retained. Reporting zero errors adds an instrumentation-completeness assumption; businessEventAbsenceProved remains false.
- Public telemetry records
- No observation / health unknown
- Signal comparison
- Sampling/export/window missing
- Coverage outcome
- No fraction / event absence unproved
- Required observation binding
Signal purpose, active instrumentation, sampling, export outcome and observation window are needed. A public correlation alias binds to the same action without secrets or private bodies.
- Public telemetry records
- Needed: instrumentation/sampling/export/window
- Signal comparison
- Sampling/export/window missing
- Coverage outcome
- No fraction / event absence unproved
- Bound causal conclusions
Nearby clocks or equal titles do not prove event completion. Business results need their receiver and telemetry receipt its sink; neither fills the other gap.
- Public telemetry records
- Needed: instrumentation/sampling/export/window
- Signal comparison
- Business and telemetry recipients distinct
- Coverage outcome
- No fraction / event absence unproved
- Retain unknown honestly
This review records a visibility gap without inventing events or health. Rates and outcomes can be reevaluated when new evidence identifies window and recipient boundaries.
- Public telemetry records
- Needed: instrumentation/sampling/export/window
- Signal comparison
- Business and telemetry recipients distinct
- Coverage outcome
- Visibility unknown / collect scoped signal evidence
IMPLEMENTATION · SECURITY CONTROL · VERIFICATION
Define what each signal counts and carries
Define log purpose, safe output fields, and correlation aliases rather than raw secrets or entire upstream objects. Record counter-reset scope and operation/status dimensions. Histogram or duration interpretation needs units, a window, and a source clock; authored logical ticks are not milliseconds or a benchmark. Show shared traceAlias and an exact parentAlias relationship for root/child spans. Equal names alone do not establish parent context.
The native check derives cumulative totals from actual public-call adapter decisions and compares them against separately parsed result lists. Sampled=false requests remain in metrics. An own StringIO sink produces structured logs, and an independent JSON parser checks selected fields. Fake seeds are absent from output while the source object remains equal. This is Python/local-writer evidence, not an SDK exporter/backend or a production-log capture.
Show visibility gaps beside business outcomes
Use separate branches for export errors, unsampled traces, and missing observations. A local successful public read can survive exporter failure while the signal store remains incomplete; record a diagnostic gap rather than health success. The unsampled branch has a declared explanation for trace0, whereas a missing observation may lack that verified explanation. Best-effort policy here concerns operational public reads; security-sensitive audit retention and access policy need separate design.
The selector detects the inconsistent combination exportOk=false and visibilityConfirmed=true. The degraded-visibility row yields count=0 and the inconsistent positive row count=1; missing rows remain insufficient evidence. A completed business response establishes neither instrumentation recording nor remote telemetry receipt. Observe request outcome, recording and export receipt separately for the same work.
NOW APPLY IT TO THE CASE
If the trace is absent, was the request absent too?
Three public calls have statuses 200, 503 and 200, while only the first two traces are retained. A public read can complete with 200 despite an export-sink error. Counters, sampled traces and exported records cover different scopes; correlation aliases are not wire trace IDs.
Evaluate the case data journey together with environment, dependency and telemetry context. Does an operational-success label establish every application outcome?
Open the related case file ↗READ THE EXAMPLE TOGETHER
Public telemetry / visibility ledger
Select a field and examine what it supports and where the evidence ends.
Read the raw artifact and field explanations
{
"schema": {
"fields": [
"event",
"operation",
"correlationAlias"
],
"classification": "public synthetic diagnostic only",
"recordIsVendorFormat": false,
"traceAliasesAreWireIds": false
},
"normal": {
"rawFakeInput": {
"event": "public-read-completed",
"operation": "read-public-note",
"correlationAlias": "request-demo",
"authorizationAlias": "demo-token-alias",
"sessionAlias": "demo-session-alias"
},
"exported": {
"event": "public-read-completed",
"operation": "read-public-note",
"correlationAlias": "request-demo"
},
"businessResult": {
"status": 200,
"title": "Tea note"
},
"exportedRecords": 1,
"sourceMutated": false
},
"window": {
"adapterStatuses": [
200,
503,
200
],
"sampled": [
true,
true,
false
],
"requestTotal": 3,
"successTotal": 2,
"errorTotal": 1,
"retainedRequestTraces": 2,
"errorFraction": {
"numerator": 1,
"denominator": 3
},
"scope": "finite own adapter window; not global service rate"
},
"spans": [
{
"traceAlias": "trace-demo",
"spanAlias": "span-root",
"parentAlias": null,
"operation": "read-public-note",
"logicalStart": 10,
"logicalEnd": 14,
"logicalDuration": 4
},
{
"traceAlias": "trace-demo",
"spanAlias": "span-child",
"parentAlias": "span-root",
"operation": "local-note-read",
"logicalStart": 11,
"logicalEnd": 13,
"logicalDuration": 2
}
],
"unsampled": {
"status": 200,
"metricIncrement": 1,
"sampled": false,
"retainedTraces": 0,
"businessCompleted": true
},
"exportFailure": {
"status": 200,
"businessCompleted": true,
"exportOk": false,
"exportedRecords": 0,
"visibilityConfirmed": false,
"observedFailure": "own sink OSError",
"policy": "explicit best-effort public diagnostics; not mandatory audit"
},
"missing": {
"observationPresent": false,
"health": "unknown",
"businessEventAbsenceProved": false,
"windowRate": null,
"denominator": 0
},
"limits": {
"actualProductionLogsRead": false,
"otelSdkExecuted": false,
"collectorExecuted": false,
"remoteExporterExecuted": false,
"realSecretsRead": false,
"realLatencyMeasured": false,
"authorizationVerified": false
},
"selector": {
"language": "XPath",
"xml": "<audit><telemetry exportOk=\"false\" visibilityConfirmed=\"false\"/></audit>",
"xpath": "count(/audit/telemetry[@exportOk='false' and @visibilityConfirmed='true'])",
"expected": 0,
"positiveFixtureXml": "<audit><telemetry exportOk=\"false\" visibilityConfirmed=\"true\"/></audit>",
"positiveExpected": 1,
"scope": "Own inert decision observations, not vendor log fields.",
"missingFieldBehavior": "Missing observation is insufficient evidence; zero matches alone proves no healthy runtime/control."
}
}- normal/schema
- Own public output schema only; seeded fake aliases redacted.
- window/spans
- Finite counters and authored logical parent intervals have different scopes.
- unsampled/exportFailure/missing
- Recording decisions, sink errors, and no evidence carry different knowledge.
- selector/limits
- No production capture, SDK/backend, real secret, or latency claim.
Actual own local adapters, structured stream, and counts; spans are logical authored context fixtures. No real logs/secrets, OpenTelemetry SDK/collector/backend, remote exporter, or latency capture.
Two reality checks
No trace or error log means no request or error occurred.
Sampling, export, retention, or observation gaps can explain absence; no signal is not proof of no event.
A correlation ID and log success prove authority or business commit.
Correlation links context; permissions and authoritative business results are verified by their own owners.
YOUR TURN
Work through this story.
Predict the outcome, find the evidence boundary, and explain it in your own words.
A request completed with status 200, but sampled=false and retainedTraces=0. Does that prove it was omitted from metrics too?
- Yes. Without a retained trace, the request never occurred.
- No. metricIncrement=1 and businessCompleted=true.
Read the explained answer
No. metricIncrement=1 and businessCompleted=true. — No trace is retained for this request, but the metric increments. Trace count is not total request count.
The public-diagnostic export failed. Are returning the response and making the log visible the same success?
Selected lesson artifact fields; teaching example
- exportFailure.status
- 200
- exportFailure.businessCompleted
- true
- exportFailure.exportOk
- false
- exportFailure.visibilityConfirmed
- false
- exportFailure.policy
- explicit best-effort public diagnostics; not mandatory audit
- No. The business operation completes; export visibility is not confirmed.
- A 200 response proves every log sink received the record.
Read the explained answer
No. The business operation completes; export visibility is not confirmed. — Even with status=200 and businessCompleted=true, exportOk=false and visibilityConfirmed=false. This policy does not stop the response, but provides no log-delivery evidence.
The window has three requests, one error and two retained traces. Why is missing observation with denominator=0 not an error rate of zero?
Read the explained answer
For the supplied window, errorFraction is 1/3. Sampling leaves two retained traces while the metric denominator is three. The missing branch has observationPresent=false and windowRate=null; denominator=0 is not evidence of a zero error rate. Trace aliases provide logical correlation, not user identity or wire-ID verification. Fake session/authorization aliases outside the public allowlist are not exported, but this is not a full-anonymization guarantee.
□ I did not substitute trace count for the metric denominator.
□ I did not turn missing observation into a zero error rate or healthy-service verdict.
Open the application console · request / response / browser
Also open request, URL, cookie and DOM examples
Sources and scope
- OpenTelemetry — Observability primerWhat is Observability? · Reliability and metrics · Understanding distributed tracing
- OpenTelemetry — LogsLogs: timestamped record of an event · Structured logs · Log Record Exporter
- OpenTelemetry — MetricsMetrics: runtime measurement · Metric Instruments · Aggregation · Cardinality limits
- OpenTelemetry — TracesContext Propagation · Spans · Span Context
- OpenTelemetry — SamplingHead Sampling · Tail Sampling
- OWASP — Logging Cheat SheetEvent attributes · Data to exclude · Verification · Protection