oh-my-agent-commandcode 0.0.0-stage → 20.38.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -2
- package/filter-test-output.sh +52 -0
- package/mods/oma.ts +347 -0
- package/package.json +30 -4
- package/skills/_shared/conditional/experiment-ledger.md +28 -0
- package/skills/_shared/conditional/exploration-loop.md +22 -0
- package/skills/_shared/conditional/quality-score.md +33 -0
- package/skills/_shared/core/anti-ai-prose.md +191 -0
- package/skills/_shared/core/api-contracts/README.md +28 -0
- package/skills/_shared/core/api-contracts/template.md +90 -0
- package/skills/_shared/core/clarification-protocol.md +23 -0
- package/skills/_shared/core/code-intelligence.md +46 -0
- package/skills/_shared/core/collaboration-policy.md +28 -0
- package/skills/_shared/core/common-checklist.md +28 -0
- package/skills/_shared/core/context-budget.md +22 -0
- package/skills/_shared/core/context-loading.md +34 -0
- package/skills/_shared/core/difficulty-guide.md +26 -0
- package/skills/_shared/core/execution-policy.md +31 -0
- package/skills/_shared/core/lessons-learned.md +33 -0
- package/skills/_shared/core/prompt-structure.md +18 -0
- package/skills/_shared/core/quality-principles.md +11 -0
- package/skills/_shared/core/session-metrics.md +35 -0
- package/skills/_shared/core/skill-routing.md +39 -0
- package/skills/_shared/core/test-approach.md +54 -0
- package/skills/_shared/core/vendor-detection.md +52 -0
- package/skills/_shared/runtime/memory-protocol.md +118 -0
- package/skills/_shared/runtime/result-contract.md +64 -0
- package/skills/_shared/ui-interaction-quality.md +133 -0
- package/skills/oma-academic-writing/SKILL.md +181 -0
- package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
- package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
- package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
- package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
- package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
- package/skills/oma-architecture/SKILL.md +203 -0
- package/skills/oma-architecture/resources/api-evolution.md +41 -0
- package/skills/oma-architecture/resources/checklist.md +42 -0
- package/skills/oma-architecture/resources/execution-protocol.md +115 -0
- package/skills/oma-architecture/resources/methodology-selection.md +92 -0
- package/skills/oma-architecture/resources/migration-patterns.md +28 -0
- package/skills/oma-architecture/resources/output-templates.md +111 -0
- package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
- package/skills/oma-backend/SKILL.md +202 -0
- package/skills/oma-backend/resources/checklist.md +45 -0
- package/skills/oma-backend/resources/error-playbook.md +97 -0
- package/skills/oma-backend/resources/execution-protocol.md +39 -0
- package/skills/oma-backend/resources/orm-reference.md +61 -0
- package/skills/oma-backend/variants/node/api-template.ts +315 -0
- package/skills/oma-backend/variants/node/snippets.md +475 -0
- package/skills/oma-backend/variants/node/stack.yaml +21 -0
- package/skills/oma-backend/variants/node/tech-stack.md +33 -0
- package/skills/oma-backend/variants/python/api-template.py +378 -0
- package/skills/oma-backend/variants/python/snippets.md +199 -0
- package/skills/oma-backend/variants/python/stack.yaml +18 -0
- package/skills/oma-backend/variants/python/tech-stack.md +45 -0
- package/skills/oma-backend/variants/rust/api-template.rs +635 -0
- package/skills/oma-backend/variants/rust/snippets.md +471 -0
- package/skills/oma-backend/variants/rust/stack.yaml +20 -0
- package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
- package/skills/oma-backend/variants/stack.schema.json +73 -0
- package/skills/oma-brainstorm/SKILL.md +166 -0
- package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
- package/skills/oma-coordination/SKILL.md +171 -0
- package/skills/oma-db/SKILL.md +201 -0
- package/skills/oma-db/resources/anti-patterns.md +177 -0
- package/skills/oma-db/resources/checklist.md +67 -0
- package/skills/oma-db/resources/document-templates.md +107 -0
- package/skills/oma-db/resources/error-playbook.md +50 -0
- package/skills/oma-db/resources/examples.md +170 -0
- package/skills/oma-db/resources/execution-protocol.md +127 -0
- package/skills/oma-db/resources/iso-controls.md +98 -0
- package/skills/oma-db/resources/migration-playbook.md +93 -0
- package/skills/oma-db/resources/query-tuning.md +57 -0
- package/skills/oma-db/resources/vector-db.md +159 -0
- package/skills/oma-debug/SKILL.md +146 -0
- package/skills/oma-debug/resources/bug-report-template.md +327 -0
- package/skills/oma-debug/resources/checklist.md +31 -0
- package/skills/oma-debug/resources/common-patterns.md +734 -0
- package/skills/oma-debug/resources/debugging-checklist.md +364 -0
- package/skills/oma-debug/resources/error-playbook.md +94 -0
- package/skills/oma-debug/resources/execution-protocol.md +40 -0
- package/skills/oma-design/SKILL.md +135 -0
- package/skills/oma-design/resources/asset-strategy.md +34 -0
- package/skills/oma-design/resources/checklist.md +63 -0
- package/skills/oma-design/resources/data-grid.md +48 -0
- package/skills/oma-design/resources/design-md-spec.md +107 -0
- package/skills/oma-design/resources/design-tokens.md +53 -0
- package/skills/oma-design/resources/error-playbook.md +18 -0
- package/skills/oma-design/resources/execution-protocol.md +95 -0
- package/skills/oma-design/resources/external-design-skills.md +130 -0
- package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
- package/skills/oma-design/resources/product-interface-review.md +59 -0
- package/skills/oma-design/resources/redesign-protocol.md +52 -0
- package/skills/oma-design/resources/stitch-integration.md +244 -0
- package/skills/oma-dev-workflow/SKILL.md +375 -0
- package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
- package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
- package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
- package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
- package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
- package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
- package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
- package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
- package/skills/oma-docs/SKILL.md +77 -0
- package/skills/oma-docs/resources/commands.md +76 -0
- package/skills/oma-explanation/SKILL.md +212 -0
- package/skills/oma-explanation/resources/document-structure.md +115 -0
- package/skills/oma-explanation/resources/draft-format.md +199 -0
- package/skills/oma-explanation/resources/html-contract.md +102 -0
- package/skills/oma-frontend/SKILL.md +227 -0
- package/skills/oma-frontend/resources/angular-rules.md +110 -0
- package/skills/oma-frontend/resources/checklist.md +76 -0
- package/skills/oma-frontend/resources/error-playbook.md +125 -0
- package/skills/oma-frontend/resources/execution-protocol.md +46 -0
- package/skills/oma-frontend/resources/snippets.md +354 -0
- package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
- package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
- package/skills/oma-frontend/resources/tech-stack.md +156 -0
- package/skills/oma-hwp/SKILL.md +166 -0
- package/skills/oma-hwp/config/hwp-config.yaml +35 -0
- package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
- package/skills/oma-hwp/resources/execution-protocol.md +145 -0
- package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
- package/skills/oma-hwp/resources/package.json +13 -0
- package/skills/oma-hwp/resources/troubleshooting.md +70 -0
- package/skills/oma-hwp/resources/tsconfig.json +10 -0
- package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
- package/skills/oma-image/SKILL.md +142 -0
- package/skills/oma-image/config/image-config.yaml +70 -0
- package/skills/oma-image/resources/checklist.md +18 -0
- package/skills/oma-image/resources/execution-protocol.md +117 -0
- package/skills/oma-image/resources/invocation.md +105 -0
- package/skills/oma-image/resources/prompt-tips.md +71 -0
- package/skills/oma-image/resources/vendor-matrix.md +90 -0
- package/skills/oma-market/SKILL.md +142 -0
- package/skills/oma-market/resources/checklist.md +12 -0
- package/skills/oma-market/resources/error-playbook.md +12 -0
- package/skills/oma-market/resources/execution-protocol.md +60 -0
- package/skills/oma-market/resources/frameworks/pestel.md +101 -0
- package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
- package/skills/oma-market/resources/frameworks/swot.md +61 -0
- package/skills/oma-market/resources/intent-rules.md +35 -0
- package/skills/oma-market/resources/output-laws.md +53 -0
- package/skills/oma-mobile/SKILL.md +168 -0
- package/skills/oma-mobile/resources/checklist.md +77 -0
- package/skills/oma-mobile/resources/error-playbook.md +198 -0
- package/skills/oma-mobile/resources/execution-protocol.md +47 -0
- package/skills/oma-mobile/resources/screen-template.dart +331 -0
- package/skills/oma-mobile/resources/screen-template.swift +239 -0
- package/skills/oma-mobile/resources/screen-template.tsx +179 -0
- package/skills/oma-mobile/resources/tech-stack.md +69 -0
- package/skills/oma-mobile/variants/README.md +45 -0
- package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
- package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
- package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
- package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
- package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
- package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
- package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
- package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
- package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
- package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
- package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
- package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
- package/skills/oma-mobile/variants/stack.schema.json +68 -0
- package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
- package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
- package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
- package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
- package/skills/oma-observability/SKILL.md +225 -0
- package/skills/oma-observability/resources/anti-patterns.md +555 -0
- package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
- package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
- package/skills/oma-observability/resources/boundaries/release.md +372 -0
- package/skills/oma-observability/resources/boundaries/slo.md +225 -0
- package/skills/oma-observability/resources/checklist.md +123 -0
- package/skills/oma-observability/resources/examples.md +448 -0
- package/skills/oma-observability/resources/execution-protocol.md +166 -0
- package/skills/oma-observability/resources/incident-forensics.md +348 -0
- package/skills/oma-observability/resources/intent-rules.md +307 -0
- package/skills/oma-observability/resources/layers/L3-network.md +281 -0
- package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
- package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
- package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
- package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
- package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
- package/skills/oma-observability/resources/layers/mesh.md +368 -0
- package/skills/oma-observability/resources/matrix.md +177 -0
- package/skills/oma-observability/resources/meta-observability.md +605 -0
- package/skills/oma-observability/resources/observability-as-code.md +666 -0
- package/skills/oma-observability/resources/signals/audit.md +310 -0
- package/skills/oma-observability/resources/signals/cost.md +303 -0
- package/skills/oma-observability/resources/signals/logs.md +263 -0
- package/skills/oma-observability/resources/signals/metrics.md +478 -0
- package/skills/oma-observability/resources/signals/privacy.md +351 -0
- package/skills/oma-observability/resources/signals/profiles.md +245 -0
- package/skills/oma-observability/resources/signals/traces.md +360 -0
- package/skills/oma-observability/resources/standards.md +214 -0
- package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
- package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
- package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
- package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
- package/skills/oma-observability/resources/vendor-categories.md +352 -0
- package/skills/oma-orchestration/SKILL.md +302 -0
- package/skills/oma-orchestration/config/cli-config.yaml +92 -0
- package/skills/oma-orchestration/resources/memory-schema.md +232 -0
- package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
- package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
- package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
- package/skills/oma-orchestration/scripts/verify.sh +20 -0
- package/skills/oma-orchestration/templates/backend-task.md +19 -0
- package/skills/oma-orchestration/templates/debug-task.md +16 -0
- package/skills/oma-orchestration/templates/frontend-task.md +18 -0
- package/skills/oma-orchestration/templates/mobile-task.md +18 -0
- package/skills/oma-orchestration/templates/qa-task.md +16 -0
- package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
- package/skills/oma-pdf/SKILL.md +162 -0
- package/skills/oma-pdf/config/pdf-config.yaml +27 -0
- package/skills/oma-pdf/resources/execution-protocol.md +127 -0
- package/skills/oma-pm/SKILL.md +157 -0
- package/skills/oma-pm/resources/error-playbook.md +75 -0
- package/skills/oma-pm/resources/examples.md +439 -0
- package/skills/oma-pm/resources/execution-protocol.md +62 -0
- package/skills/oma-pm/resources/iso-planning.md +110 -0
- package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
- package/skills/oma-pm/resources/task-template.json +86 -0
- package/skills/oma-qa/SKILL.md +141 -0
- package/skills/oma-qa/resources/checklist.md +339 -0
- package/skills/oma-qa/resources/error-playbook.md +98 -0
- package/skills/oma-qa/resources/execution-protocol.md +169 -0
- package/skills/oma-qa/resources/iso-quality.md +82 -0
- package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
- package/skills/oma-recap/SKILL.md +245 -0
- package/skills/oma-recap/resources/output-formats.md +83 -0
- package/skills/oma-refactor/SKILL.md +184 -0
- package/skills/oma-refactor/resources/definition.md +108 -0
- package/skills/oma-refactor/resources/governance.md +33 -0
- package/skills/oma-refactor/resources/hotspots.py +44 -0
- package/skills/oma-refactor/resources/measurement.md +93 -0
- package/skills/oma-scholar/SKILL.md +276 -0
- package/skills/oma-scholar/config/scholar-config.yaml +79 -0
- package/skills/oma-scholar/resources/api-endpoints.md +174 -0
- package/skills/oma-scholar/resources/checklist.md +92 -0
- package/skills/oma-scholar/resources/execution-protocol.md +224 -0
- package/skills/oma-scholar/resources/fallback-providers.md +143 -0
- package/skills/oma-scholar/resources/setup-openalex.md +85 -0
- package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
- package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
- package/skills/oma-scm/SKILL.md +103 -0
- package/skills/oma-scm/resources/cm-operations.md +56 -0
- package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
- package/skills/oma-scm/resources/conventional-commits.md +108 -0
- package/skills/oma-scm/resources/merge-risk.md +76 -0
- package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
- package/skills/oma-search/SKILL.md +125 -0
- package/skills/oma-search/resources/checklist.md +36 -0
- package/skills/oma-search/resources/error-playbook.md +66 -0
- package/skills/oma-search/resources/examples.md +80 -0
- package/skills/oma-search/resources/execution-protocol.md +86 -0
- package/skills/oma-search/resources/intent-rules.md +47 -0
- package/skills/oma-search/resources/trust-registry.md +53 -0
- package/skills/oma-security/SKILL.md +172 -0
- package/skills/oma-security/resources/artex.md +108 -0
- package/skills/oma-security/resources/ci.md +134 -0
- package/skills/oma-security/resources/cisco-source.md +108 -0
- package/skills/oma-security/resources/deepsec-config.md +45 -0
- package/skills/oma-security/resources/deepsec-matchers.md +35 -0
- package/skills/oma-security/resources/deepsec-scanning.md +45 -0
- package/skills/oma-security/resources/deepsec-setup.md +41 -0
- package/skills/oma-security/resources/findings-contract.md +408 -0
- package/skills/oma-security/resources/mcp-scanning.md +122 -0
- package/skills/oma-security/resources/skill-scanning.md +106 -0
- package/skills/oma-security/resources/validation.md +71 -0
- package/skills/oma-skill-creation/SKILL.md +84 -0
- package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
- package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
- package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
- package/skills/oma-slide/SKILL.md +277 -0
- package/skills/oma-slide/resources/animation-patterns.md +245 -0
- package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
- package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
- package/skills/oma-slide/resources/canva-integration.md +203 -0
- package/skills/oma-slide/resources/checklist.md +46 -0
- package/skills/oma-slide/resources/design-doctrine.md +260 -0
- package/skills/oma-slide/resources/fixed-stage.md +232 -0
- package/skills/oma-slide/resources/generation-protocol.md +393 -0
- package/skills/oma-slide/resources/native-pptx.md +84 -0
- package/skills/oma-slide/resources/selection-index.json +461 -0
- package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
- package/skills/oma-slide/resources/style-presets.md +520 -0
- package/skills/oma-tf-infra/SKILL.md +201 -0
- package/skills/oma-tf-infra/resources/checklist.md +53 -0
- package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
- package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
- package/skills/oma-tf-infra/resources/examples.md +38 -0
- package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
- package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
- package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
- package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
- package/skills/oma-translation/SKILL.md +229 -0
- package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
- package/skills/oma-translation/resources/lang/_template.md +73 -0
- package/skills/oma-translation/resources/lang/en.md +123 -0
- package/skills/oma-translation/resources/lang/ja.md +274 -0
- package/skills/oma-translation/resources/lang/ko.md +228 -0
- package/skills/oma-translation/resources/lang/zh.md +285 -0
- package/skills/oma-translation/resources/style-skills.md +104 -0
- package/skills/oma-translation/resources/translation-rubric.md +126 -0
- package/skills/oma-video/SKILL.md +229 -0
- package/skills/oma-video/config/video-config.yaml +60 -0
- package/skills/oma-video/resources/checklist.md +26 -0
- package/skills/oma-video/resources/execution-protocol.md +122 -0
- package/skills/oma-video/resources/existing-media.md +185 -0
- package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
- package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
- package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
- package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
- package/skills/oma-video/resources/motion-principles.md +81 -0
- package/skills/oma-video/resources/mpt/driver.py +301 -0
- package/skills/oma-video/resources/prompt-tips.md +75 -0
- package/skills/oma-video/resources/script-schema.md +81 -0
- package/skills/oma-video/resources/sound-design.md +127 -0
- package/skills/oma-video/resources/strudel/package.json +11 -0
- package/skills/oma-video/resources/strudel/page.html +87 -0
- package/skills/oma-video/resources/strudel/render.mjs +295 -0
- package/skills/oma-video/resources/vendor-matrix.md +124 -0
- package/skills/oma-voice/SKILL.md +249 -0
- package/skills/oma-voice/config/voice-config.yaml +30 -0
- package/skills/oma-voice/resources/audio-processing.md +119 -0
- package/skills/oma-voice/resources/checklist.md +47 -0
- package/skills/oma-voice/resources/execution-protocol.md +215 -0
- package/skills/oma-voice/resources/prompt-tips.md +43 -0
- package/skills/oma-voice/resources/voice-matrix.md +51 -0
- package/skills/oma-voice/resources/voicestudio.md +87 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
---
|
|
2
|
+
otel_spec: "1.x (stable API/SDK)"
|
|
3
|
+
otel_semconv: "1.43.0 (2026-07)"
|
|
4
|
+
specs:
|
|
5
|
+
- "W3C Trace Context: Level 1 Recommendation 2020-02-06"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Distributed Traces Signal
|
|
9
|
+
|
|
10
|
+
## 1. Scope
|
|
11
|
+
|
|
12
|
+
Traces are the "T" in MELT+P; the correlation backbone of distributed observability. A single trace links every span produced by every service that participated in one request, job, or message.
|
|
13
|
+
|
|
14
|
+
Covers: OTel span data model, SpanKind, W3C Trace Context, DB patterns (N+1, slow query, pool exhaustion, `db.*` Stable), messaging patterns (Kafka, Flink, Spark, DLQ, `messaging.*`), RPC (`rpc.*` RC), sampling, backends, exemplars, baggage security.
|
|
15
|
+
|
|
16
|
+
Cross-references:
|
|
17
|
+
- `../boundaries/cross-application.md`: propagator matrix per cloud and mesh vendor
|
|
18
|
+
- `../layers/mesh.md`: zero-code auto-instrumentation; propagator headers
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. OTel Span Data Model (Stable)
|
|
23
|
+
|
|
24
|
+
Source: <https://opentelemetry.io/docs/specs/otel/trace/api/>
|
|
25
|
+
|
|
26
|
+
Every span carries the following fields:
|
|
27
|
+
|
|
28
|
+
| Field | Type | Description |
|
|
29
|
+
|-------|------|-------------|
|
|
30
|
+
| `TraceId` | 16-byte hex | Globally unique identifier for the entire trace |
|
|
31
|
+
| `SpanId` | 8-byte hex | Unique identifier for this span |
|
|
32
|
+
| `ParentSpanId` | 8-byte hex | SpanId of the parent; absent for root spans |
|
|
33
|
+
| `Name` | string | Operation name (e.g., `HTTP GET /api/orders`) |
|
|
34
|
+
| `Kind` | enum | SpanKind; see table below |
|
|
35
|
+
| `StartTime` | timestamp | Monotonic clock at span start |
|
|
36
|
+
| `EndTime` | timestamp | Monotonic clock at span end |
|
|
37
|
+
| `Attributes` | key-value map | Semantic convention attributes describing the operation |
|
|
38
|
+
| `Events` | list | Timestamped structured log records within the span |
|
|
39
|
+
| `Links` | list | References to other spans (used for async messaging) |
|
|
40
|
+
| `Status` | enum + string | `UNSET`, `OK`, or `ERROR` with optional description |
|
|
41
|
+
|
|
42
|
+
### SpanKind
|
|
43
|
+
|
|
44
|
+
SpanKind describes the role of the span in the larger distributed operation. Backends use it to render topology maps and assign latency accountability.
|
|
45
|
+
|
|
46
|
+
| SpanKind | Role | Typical origin |
|
|
47
|
+
|----------|------|----------------|
|
|
48
|
+
| `INTERNAL` | Default; in-process operation with no network boundary | Business logic, cache lookup, CPU computation |
|
|
49
|
+
| `SERVER` | Incoming synchronous request handled by this service | HTTP server, gRPC server handler |
|
|
50
|
+
| `CLIENT` | Outgoing synchronous call from this service to another | HTTP client, DB driver, gRPC stub |
|
|
51
|
+
| `PRODUCER` | Async message sent to a queue or topic | Kafka producer, RabbitMQ publisher |
|
|
52
|
+
| `CONSUMER` | Async message received from a queue or topic | Kafka consumer, worker pulling from queue |
|
|
53
|
+
|
|
54
|
+
Rule of thumb: sync RPC produces a `CLIENT`+`SERVER` pair sharing the same `TraceId`. Async messaging produces a `PRODUCER`+`CONSUMER` pair connected by a span link (not parent-child), because the two operations run independently.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 3. W3C Trace Context Propagation
|
|
59
|
+
|
|
60
|
+
Source: <https://www.w3.org/TR/trace-context/>
|
|
61
|
+
|
|
62
|
+
### Header format
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
traceparent: 00-<trace-id>-<span-id>-<flags>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- `00`: version (currently always `00`)
|
|
69
|
+
- `<trace-id>`: 32 hex chars (128-bit TraceId)
|
|
70
|
+
- `<span-id>`: 16 hex chars (64-bit SpanId of the sending span)
|
|
71
|
+
- `<flags>`: 8-bit flags; `01` = sampled, `00` = not sampled
|
|
72
|
+
|
|
73
|
+
Example:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
|
|
77
|
+
tracestate: vendor1=abc123,vendor2=xyz789
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`tracestate` carries vendor-specific opaque state as a comma-separated `key=value` list forwarded unchanged by intermediaries that do not own the key.
|
|
81
|
+
|
|
82
|
+
### Propagation rules
|
|
83
|
+
|
|
84
|
+
- **Inject** `traceparent` on every outbound HTTP/gRPC call; **extract** at every inbound call before creating the root span.
|
|
85
|
+
- Stripping `traceparent` silently is anti-pattern #1 in `../anti-patterns.md`.
|
|
86
|
+
- Cross-cloud/mesh vendor header bridging: `../boundaries/cross-application.md §Propagators`.
|
|
87
|
+
- Mesh-injected headers (Envoy, Linkerd): `../layers/mesh.md §Propagator headers`.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 4. Database Tracing Patterns (db.* semconv Stable)
|
|
92
|
+
|
|
93
|
+
Source: <https://opentelemetry.io/docs/specs/semconv/database/>
|
|
94
|
+
|
|
95
|
+
All DB spans use `SpanKind = CLIENT`. The span name follows the pattern `<db.operation.name> <db.collection.name>` (e.g., `SELECT orders`).
|
|
96
|
+
|
|
97
|
+
### Core db.* attributes
|
|
98
|
+
|
|
99
|
+
| Attribute | Stability | Example | Notes |
|
|
100
|
+
|-----------|-----------|---------|-------|
|
|
101
|
+
| `db.system` | Stable | `postgresql`, `mysql`, `mongodb`, `redis` | Required; identifies the DB technology |
|
|
102
|
+
| `db.operation.name` | Stable | `SELECT`, `INSERT`, `HMGET` | SQL verb or command name |
|
|
103
|
+
| `db.query.text` | Stable | `SELECT * FROM orders WHERE id = $1` | Parameterized query text; PII risk; see caveat |
|
|
104
|
+
| `db.namespace` | Stable | `mydb` | Database name / schema |
|
|
105
|
+
| `db.collection.name` | Stable | `orders` | Table or collection name |
|
|
106
|
+
| `db.client.connections.used` | Development | `14` | Active connections in pool (attribute name varies by semconv draft; pin to version in `../standards.md`) |
|
|
107
|
+
| `db.client.connection.pool.utilization` | Development | `0.875` | Ratio: used / max (current semconv draft name; older drafts use `db.client.connections.usage`) |
|
|
108
|
+
|
|
109
|
+
`db.query.text` caveat: WHERE clause literals may contain PII (email addresses, phone numbers). Always use parameterized queries so that literals are replaced by `$1`, `?`, or `:name` placeholders. If the ORM or driver captures the raw query, apply redaction at the OTel SDK layer or in the Collector processor. Cross-ref `../signals/privacy.md`.
|
|
110
|
+
|
|
111
|
+
### 4.1 N+1 Query Detection
|
|
112
|
+
|
|
113
|
+
Symptom: a single parent `SERVER` span contains N child `CLIENT` spans that all share the same `db.operation.name` and `db.collection.name`, each taking 2-30 ms, producing an additive latency of N × latency_per_query.
|
|
114
|
+
|
|
115
|
+
Trace waterfall example:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
[SERVER] POST /api/orders .................... 480ms
|
|
119
|
+
[CLIENT] SELECT orders WHERE ... .. 18ms
|
|
120
|
+
[CLIENT] SELECT orders WHERE ... .. 17ms
|
|
121
|
+
[CLIENT] SELECT orders WHERE ... .. 17ms
|
|
122
|
+
[CLIENT] SELECT orders WHERE ... .. 18ms
|
|
123
|
+
... (× 24 more)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Detection:
|
|
127
|
+
|
|
128
|
+
- OTel trace visualizers (Honeycomb BubbleUp, Datadog Watchdog, Grafana Tempo TraceQL) can flag traces where `count(db.CLIENT spans per SERVER span) > N_threshold`.
|
|
129
|
+
- TraceQL example (Grafana Tempo): `{ span.db.system = "postgresql" } | count() > 10`
|
|
130
|
+
- Honeycomb: group by `trace.parent_id`, count `db.*` child spans, alert on p95 count > 10.
|
|
131
|
+
|
|
132
|
+
Remediation: replace per-row lookups with eager loading (ORM `include`/`join`), batch queries (`SELECT ... WHERE id = ANY($1)`), or the DataLoader pattern for GraphQL.
|
|
133
|
+
|
|
134
|
+
### 4.2 Slow Query Analysis
|
|
135
|
+
|
|
136
|
+
Slow queries surface as `CLIENT` spans with duration above the p99 threshold.
|
|
137
|
+
|
|
138
|
+
1. Index `db.query.text` + `db.operation.name` against a `span.duration` histogram in the trace backend.
|
|
139
|
+
2. Flag spans where `span.duration > 100ms` at p99 (adjust threshold per SLO).
|
|
140
|
+
3. Correlate `db.query.text` with `pg_stat_statements` / MySQL `slow_query_log` to obtain execution plans.
|
|
141
|
+
4. Apply `EXPLAIN ANALYZE` and add the missing index or rewrite the query.
|
|
142
|
+
|
|
143
|
+
Privacy: if `db.query.text` captures literal values, redact before export; see `../signals/privacy.md §query text redaction`.
|
|
144
|
+
|
|
145
|
+
### 4.3 Connection Pool Exhaustion
|
|
146
|
+
|
|
147
|
+
Symptom: the blocking span is on the **client side** (waiting to acquire a pool connection), not inside the DB. `CLIENT` span duration grows while actual DB response time stays flat.
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
[SERVER] POST /api/orders .............. 5200ms
|
|
151
|
+
[CLIENT] acquire pool connection ............ 5190ms ← pool wait, no DB call yet
|
|
152
|
+
[CLIENT] SELECT orders WHERE ... . 10ms
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Attributes to monitor: `db.client.connections.used` (Development), `db.client.connections.usage` (Development, alert at > 0.85). Cross-ref `../signals/metrics.md` for `pool_wait_count` and `pool_wait_duration_seconds` histograms.
|
|
156
|
+
|
|
157
|
+
Remediation: tune pool size to expected concurrency (10-20 connections per pod); add circuit breaker upstream; split read/write pools for long-running read transactions.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 5. Messaging Tracing Patterns (messaging.* semconv)
|
|
162
|
+
|
|
163
|
+
Source: <https://opentelemetry.io/docs/specs/semconv/messaging/>
|
|
164
|
+
|
|
165
|
+
### Core messaging.* attributes
|
|
166
|
+
|
|
167
|
+
| Attribute | Example | Notes |
|
|
168
|
+
|-----------|---------|-------|
|
|
169
|
+
| `messaging.system` | `kafka`, `rabbitmq`, `nats` | Required |
|
|
170
|
+
| `messaging.destination.name` | `orders-topic` | Topic or queue name |
|
|
171
|
+
| `messaging.operation.type` | `create`, `send`, `receive`, `process`, `settle` | Operation type per semconv 1.43.0 (Development; replaces deprecated `messaging.operation`; `publish`→`send`, `deliver`→`process`). `settle` covers ack/nack; `ack` alone is NOT a valid enum value |
|
|
172
|
+
| `messaging.message.id` | `msg-uuid-1234` | Message identifier for dedup |
|
|
173
|
+
| `messaging.kafka.message.key` | `order-9988` | Kafka partition key |
|
|
174
|
+
| `messaging.kafka.consumer.group` | `payment-consumer-group` | Kafka consumer group |
|
|
175
|
+
|
|
176
|
+
### SpanKind assignment
|
|
177
|
+
|
|
178
|
+
- `PRODUCER`: set when calling `producer.send()` or equivalent.
|
|
179
|
+
- `CONSUMER`: set when calling `consumer.poll()` or the message handler.
|
|
180
|
+
- Connect the two with a **span link** (not parent-child): async messaging breaks the synchronous call chain; span links preserve trace continuity across the queue boundary.
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
[PRODUCER] send orders-topic .. 3ms TraceId: aaa
|
|
184
|
+
Link → [CONSUMER] receive orders-topic ... 220ms TraceId: aaa
|
|
185
|
+
[CLIENT] INSERT INTO payments .. 18ms
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 5.1 Kafka-Specific Patterns
|
|
189
|
+
|
|
190
|
+
Inject W3C `traceparent` into Kafka message headers at the producer; extract at the consumer before creating the `CONSUMER` span. OTel Kafka instrumentation handles this automatically (`opentelemetry-instrumentation-kafka` for Java/Python).
|
|
191
|
+
|
|
192
|
+
Kafka consumer lag is an external metric, not a trace attribute: MSK (`kafka.consumer_lag` CloudWatch), Confluent Cloud (built-in), self-managed (`kafka_consumer_group_lag` via JMX + Prometheus). Cross-ref `../signals/metrics.md §messaging`.
|
|
193
|
+
|
|
194
|
+
**Primary-topic lag alert threshold (recommended starting point):**
|
|
195
|
+
- Warn: `kafka_consumer_group_lag > 10_000 for 5m` (queue growing faster than consumer can drain)
|
|
196
|
+
- Page: `kafka_consumer_group_lag > 100_000 for 10m` (backlog will breach SLO if unaddressed)
|
|
197
|
+
- Calibrate per topic throughput and consumer group parallelism; high-throughput topics routinely run at 50k–500k lag without impact.
|
|
198
|
+
|
|
199
|
+
### 5.2 Flink and Spark Streaming
|
|
200
|
+
|
|
201
|
+
Create one span per pipeline stage; the trace covers end-to-end job from source read to sink write. Flink OTel instrumentation is emerging (not stable as of 2026-Q2); use `messaging.system = kafka` for source/sink spans and `INTERNAL` for operator chains. Spark: instrument at the `foreachBatch` boundary; each micro-batch is one `INTERNAL` span. Checkpoint metrics: cross-ref `../signals/metrics.md §streaming`.
|
|
202
|
+
|
|
203
|
+
### 5.3 Dead Letter Queue (DLQ) Observability
|
|
204
|
+
|
|
205
|
+
A DLQ receives messages that failed all retries. Losing trace context at DLQ ingestion prevents diagnosis.
|
|
206
|
+
|
|
207
|
+
1. **Trace propagation**: copy the original `traceparent` from the failed message headers into the DLQ message headers; do not generate a new trace ID.
|
|
208
|
+
2. **DLQ depth alert**: alert on `kafka_consumer_group_lag{topic="orders-dlq"}` > 0 for critical queues.
|
|
209
|
+
3. **DLQ arrival span**: create a `CONSUMER` span at DLQ arrival with `messaging.destination.name = orders-dlq` and the original `trace_id`.
|
|
210
|
+
4. **Replay tooling**: re-inject the original trace context into replayed messages. A new `trace_id` at replay orphans the original failure span.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 6. RPC Tracing (rpc.* semconv RC)
|
|
215
|
+
|
|
216
|
+
Source: <https://opentelemetry.io/docs/specs/semconv/rpc/grpc/>
|
|
217
|
+
|
|
218
|
+
### gRPC
|
|
219
|
+
|
|
220
|
+
| Attribute | Example |
|
|
221
|
+
|-----------|---------|
|
|
222
|
+
| `rpc.system.name` | `grpc` |
|
|
223
|
+
| `rpc.service` | `com.example.OrderService` |
|
|
224
|
+
| `rpc.method` | `CreateOrder` |
|
|
225
|
+
|
|
226
|
+
SpanKind: `CLIENT` on the caller; `SERVER` on the callee. The `traceparent` header is propagated via gRPC metadata.
|
|
227
|
+
|
|
228
|
+
### HTTP RPC
|
|
229
|
+
|
|
230
|
+
Use `http.*` attributes for REST and JSON-RPC over HTTP. `rpc.*` is for binary RPC protocols only.
|
|
231
|
+
|
|
232
|
+
### Error handling
|
|
233
|
+
|
|
234
|
+
Set `status.code = ERROR` and `status.description` on RPC failures. Use `span.recordException(e)` to atomically populate `exception.type`, `exception.message`, and `exception.stacktrace`; required by MRA in `../incident-forensics.md §2.2`. Note: since semconv 1.40 the span-event form of exception recording is deprecated in favor of exception LogRecords (`OTEL_SEMCONV_EXCEPTION_SIGNAL_OPT_IN`); during migration prefer `logs/dup` so both the span pivot and log-based queries keep working.
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 7. Trace Sampling
|
|
239
|
+
|
|
240
|
+
Cross-ref `../transport/sampling-recipes.md` for full configuration recipes.
|
|
241
|
+
|
|
242
|
+
| Strategy | Pros | Cons |
|
|
243
|
+
|----------|------|------|
|
|
244
|
+
| Head-based | Low overhead; decision at trace root | Cannot retain traces that only show problems at a downstream hop |
|
|
245
|
+
| Tail-based | Trace-complete decision; keeps all error traces | Requires buffering the full trace before deciding; higher Collector memory |
|
|
246
|
+
|
|
247
|
+
Recommended recipe:
|
|
248
|
+
|
|
249
|
+
- 100% of traces where `status.code = ERROR`
|
|
250
|
+
- 100% of traces where business cost > $0.50 (custom attribute)
|
|
251
|
+
- 5-10% tail sampling of remaining traces for baseline coverage
|
|
252
|
+
|
|
253
|
+
For multi-replica tail sampling, use consistent hashing on `trace_id` via the OTel Collector `loadbalancing` exporter to route all spans of one trace to the same Collector instance.
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 8. Trace Backends
|
|
258
|
+
|
|
259
|
+
Cross-ref `../vendor-categories.md` for full vendor category taxonomy.
|
|
260
|
+
|
|
261
|
+
| Backend | Category | Key differentiator |
|
|
262
|
+
|---------|----------|--------------------|
|
|
263
|
+
| Jaeger (CNCF Graduated) | OSS full-stack | Kubernetes-native; Badger or Cassandra storage |
|
|
264
|
+
| Grafana Tempo | OSS full-stack | Low-cost object storage (S3/GCS); TraceQL query language |
|
|
265
|
+
| Zipkin | OSS (legacy) | Older wire format; superseded by OTel/Jaeger for new deployments |
|
|
266
|
+
| Honeycomb | High-cardinality specialist | BubbleUp auto-analysis; best for high-attribute-count traces |
|
|
267
|
+
| Datadog APM | Commercial SaaS | Deep integration with Datadog metrics and logs |
|
|
268
|
+
| Elastic APM | Commercial SaaS | Tight Kibana/Elasticsearch integration |
|
|
269
|
+
| SigNoz | OSS full-stack | ClickHouse-backed; cost-efficient at high ingestion rates |
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 9. Trace Exemplars
|
|
274
|
+
|
|
275
|
+
Exemplars link a metric data point to a specific trace, enabling direct navigation from a PromQL alert to the trace that caused the spike.
|
|
276
|
+
|
|
277
|
+
- Prometheus exemplar support is available since v2.31.0. Histograms and summaries can carry a `trace_id` label on selected samples.
|
|
278
|
+
- OTel SDK Java, Go, and Python emit exemplars automatically when the current span context is sampled.
|
|
279
|
+
- Usage: click a spike in a Grafana panel backed by a Prometheus histogram → the exemplar tooltip shows a `trace_id` link → click to open the trace in the configured trace backend (Tempo, Jaeger, etc.).
|
|
280
|
+
|
|
281
|
+
```promql
|
|
282
|
+
# Example: p99 latency histogram with exemplar-capable query
|
|
283
|
+
histogram_quantile(0.99,
|
|
284
|
+
sum by (le, service_name) (
|
|
285
|
+
rate(http_server_request_duration_seconds_bucket{
|
|
286
|
+
deployment_environment="prod"
|
|
287
|
+
}[5m])
|
|
288
|
+
)
|
|
289
|
+
)
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Cross-ref `../incident-forensics.md §Step 2` for the exemplar-based trace acquisition flow.
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 10. Propagating Baggage (Security and Privacy)
|
|
297
|
+
|
|
298
|
+
W3C Baggage (`baggage` header) carries key-value pairs alongside the trace context. It is not part of the trace itself; it is a side-channel for business attributes that downstream services need.
|
|
299
|
+
|
|
300
|
+
### Allowed vs. prohibited baggage content
|
|
301
|
+
|
|
302
|
+
| Allowed | Prohibited |
|
|
303
|
+
|---------|-----------|
|
|
304
|
+
| `tenant.id` | User email address |
|
|
305
|
+
| `user.tier` (tier name, not PII) | Session tokens or auth cookies |
|
|
306
|
+
| `deployment.sha` | Passwords or API keys |
|
|
307
|
+
| `feature.flag.name` | Any field classified as PII under GDPR/PIPA |
|
|
308
|
+
|
|
309
|
+
W3C Baggage Recommendation §3.1: baggage propagates to all downstream services within the same distributed operation. Any data placed in baggage is visible to every service on the call path, including third-party services. Data that is proprietary, confidential, or personally identifiable MUST NOT be placed in baggage without explicit downstream trust agreement.
|
|
310
|
+
|
|
311
|
+
Enforcement rule: strip or validate incoming baggage at the API gateway / ingress before forwarding to internal services. The mesh ingress gateway is the correct enforcement point; see `../layers/mesh.md §Baggage scrubbing`.
|
|
312
|
+
|
|
313
|
+
Cross-ref:
|
|
314
|
+
|
|
315
|
+
- `../boundaries/cross-application.md`: trust-boundary baggage validation rules per cloud and mesh
|
|
316
|
+
- `../signals/privacy.md`: PII classification and redaction for baggage content
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## 11. Matrix Coverage (traces column)
|
|
321
|
+
|
|
322
|
+
These cells from `../matrix.md` have trace-specific behavior worth noting:
|
|
323
|
+
|
|
324
|
+
| Layer | Boundary | Status | Rationale |
|
|
325
|
+
|-------|----------|--------|-----------|
|
|
326
|
+
| L3-network | cross-application | PARTIAL | L3 packets carry no trace context natively; use trace-ID tagging at egress only |
|
|
327
|
+
| L4-transport | any | PARTIAL | TCP is not trace-native; trace context begins at mesh or L7 |
|
|
328
|
+
| mesh | cross-application | PASS | Primary trace origin; Envoy injects spans with zero application code changes |
|
|
329
|
+
| L7-application | cross-application | PASS | Primary; W3C `traceparent` on all outbound HTTP/gRPC calls |
|
|
330
|
+
| L7-application | multi-tenant | PASS | `tenant.id` propagated in W3C Baggage on every span |
|
|
331
|
+
| L7-application | release | PASS | `service.version` resource attribute on all spans; canary routing by version |
|
|
332
|
+
| L7-application | slo | PARTIAL | Tail sampling must retain error traces within the error budget window; traces are forensic input, not the SLI computation source |
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## 12. Anti-patterns
|
|
337
|
+
|
|
338
|
+
These candidates extend `../anti-patterns.md`. Each pattern breaks trace continuity or introduces compliance risk.
|
|
339
|
+
|
|
340
|
+
| Anti-pattern | Consequence | Remediation |
|
|
341
|
+
|---|---|---|
|
|
342
|
+
| Missing parent spans (orphan spans) | Trace visualizer shows disconnected spans; root cause chain is broken | Verify `traceparent` extraction at every inbound call; check SDK auto-instrumentation coverage |
|
|
343
|
+
| `db.query.text` captured with untrimmed PII | Email or phone literal in WHERE clause stored in trace backend; GDPR/PIPA violation | Parameterize all queries; add OTel SDK `db.sanitize_query` option or Collector redaction processor |
|
|
344
|
+
| Async messaging without span links | `PRODUCER` and `CONSUMER` spans in separate disconnected traces; cannot follow a message end-to-end | Use OTel SDK `span.addLink()` with the producer span context when creating the consumer span |
|
|
345
|
+
| DLQ drain creates a new `trace_id` | Original failure span is orphaned; forensic link to the root cause is lost | Re-inject original `traceparent` from DLQ message headers into the replayed message headers |
|
|
346
|
+
| Head-based sampling on multi-service paths | A decision to not sample at the entry service drops all downstream spans, including error spans that only appear deep in the call graph | Use tail-based sampling with 100% error retention; see §7 |
|
|
347
|
+
| Kafka consumer lag unmonitored | DLQ silently fills; processing backlog not detected until downstream systems starve | Alert on `kafka_consumer_group_lag` per consumer group; cross-ref `../signals/metrics.md §messaging` |
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## References
|
|
352
|
+
|
|
353
|
+
- OTel Trace API specification: <https://opentelemetry.io/docs/specs/otel/trace/api/>
|
|
354
|
+
- OTel Database semconv: <https://opentelemetry.io/docs/specs/semconv/database/>
|
|
355
|
+
- OTel Messaging semconv: <https://opentelemetry.io/docs/specs/semconv/messaging/>
|
|
356
|
+
- OTel RPC/gRPC semconv: <https://opentelemetry.io/docs/specs/semconv/rpc/grpc/>
|
|
357
|
+
- W3C Trace Context Level 1 Recommendation: <https://www.w3.org/TR/trace-context/>
|
|
358
|
+
- W3C Baggage Recommendation: <https://www.w3.org/TR/baggage/>
|
|
359
|
+
- Kafka producer/consumer instrumentation: <https://kafka.apache.org/documentation/>
|
|
360
|
+
- Confluent consumer lag metrics: <https://docs.confluent.io/platform/current/kafka/monitoring.html>
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
---
|
|
2
|
+
otel_spec: "1.x (stable API/SDK)"
|
|
3
|
+
otel_semconv: "1.43.0 (2026-07)"
|
|
4
|
+
specs:
|
|
5
|
+
- "W3C Trace Context: Level 1 Recommendation 2020-02-06; Level 2 Candidate Recommendation"
|
|
6
|
+
- "W3C Baggage: Recommendation 2022-12-22"
|
|
7
|
+
- "ISO/IEC 25010: 2023; ISO/IEC 27001:2022; ISO/IEC 42010:2011"
|
|
8
|
+
notes:
|
|
9
|
+
- "Pinned versions (update on spec promotion or attribute deprecation; see SKILL.md §Versioning & Deprecation — no scheduled review)"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Observability Standards Reference
|
|
13
|
+
|
|
14
|
+
## 1. Purpose
|
|
15
|
+
|
|
16
|
+
This file defines the normative standards baseline for the `oma-observability` skill. It answers:
|
|
17
|
+
|
|
18
|
+
- Which specifications govern trace propagation, attribute naming, and signal transport?
|
|
19
|
+
- How do ISO quality characteristics map onto observability concerns?
|
|
20
|
+
- Which OSI layers are in scope and why?
|
|
21
|
+
- What clock discipline is required for trustworthy timestamp ordering?
|
|
22
|
+
|
|
23
|
+
All other files in this skill reference this document as the authoritative source. Implementers MUST read this before writing instrumentation, configuring collectors, or authoring SLO policies.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. Primary De Facto Standards
|
|
28
|
+
|
|
29
|
+
### 2.1 OpenTelemetry (CNCF Incubating)
|
|
30
|
+
|
|
31
|
+
Source: <https://opentelemetry.io/docs/specs/otel/> | CNCF: <https://www.cncf.io/projects/opentelemetry/>
|
|
32
|
+
|
|
33
|
+
OpenTelemetry is the vendor-neutral, CNCF-incubating specification for telemetry APIs, SDKs, semantic conventions, and the wire protocol OTLP. It is the single de facto standard this skill operates on.
|
|
34
|
+
|
|
35
|
+
Four pillars in scope for this skill:
|
|
36
|
+
|
|
37
|
+
| Pillar | Specification | Wire protocol |
|
|
38
|
+
|--------|---------------|---------------|
|
|
39
|
+
| API / SDK | opentelemetry.io/docs/specs/otel/ | N/A |
|
|
40
|
+
| Semantic Conventions (semconv) | opentelemetry.io/docs/specs/semconv/ | N/A |
|
|
41
|
+
| Protocol (OTLP) | opentelemetry.io/docs/specs/otlp/ | gRPC :4317 / HTTP :4318 |
|
|
42
|
+
| Collector | opentelemetry.io/docs/collector/ | N/A |
|
|
43
|
+
|
|
44
|
+
Key constraints:
|
|
45
|
+
- Use the stable semconv groups listed in Section 3 for production instrumentation.
|
|
46
|
+
- OTLP is the mandatory export format; vendor-native formats are acceptable only as secondary sinks.
|
|
47
|
+
- The OTel Operator (`v1beta1`) manages Collector and auto-instrumentation CRs in Kubernetes.
|
|
48
|
+
|
|
49
|
+
### 2.2 W3C Trace Context
|
|
50
|
+
|
|
51
|
+
- Level 1 Recommendation: <https://www.w3.org/TR/trace-context/> (published 2020-02-06)
|
|
52
|
+
- Level 2 Candidate Recommendation: <https://www.w3.org/TR/trace-context-2/>
|
|
53
|
+
|
|
54
|
+
W3C Trace Context defines the `traceparent` and `tracestate` HTTP headers that establish a distributed trace across service boundaries. Level 1 is the production-stable baseline. Level 2 adds the `traceflags` precision extension and is safe to implement against CR status.
|
|
55
|
+
|
|
56
|
+
Mandatory propagation rule: every outbound HTTP/gRPC call MUST forward `traceparent`. Stripping it silently is an anti-pattern.
|
|
57
|
+
|
|
58
|
+
Vendor header compatibility reference (informative):
|
|
59
|
+
- AWS X-Ray: `X-Amzn-Trace-Id`; compatible bridge via OTel X-Ray propagator
|
|
60
|
+
- GCP Cloud Trace: prefers W3C; legacy `X-Cloud-Trace-Context` is supported for backward compat
|
|
61
|
+
- Datadog: `X-Datadog-Trace-Id`; use OTel Datadog exporter for bridging
|
|
62
|
+
|
|
63
|
+
### 2.3 W3C Baggage
|
|
64
|
+
|
|
65
|
+
Recommendation: <https://www.w3.org/TR/baggage/> (2022-12-22)
|
|
66
|
+
|
|
67
|
+
W3C Baggage defines the `baggage` HTTP header for key-value pairs propagated alongside a trace. The W3C spec itself contains trust-boundary and PII guidance: baggage is visible to all downstream services and MUST NOT carry secrets, tokens, or personally identifiable information without explicit downstream trust agreement.
|
|
68
|
+
|
|
69
|
+
OTel Baggage API reference: <https://opentelemetry.io/docs/specs/otel/baggage/api/>
|
|
70
|
+
|
|
71
|
+
Usage rules enforced by this skill:
|
|
72
|
+
- Allowed: tenant ID, feature flag state, deployment SHA, region hint.
|
|
73
|
+
- Not allowed: user email, session tokens, authentication credentials.
|
|
74
|
+
- Trust boundary: strip or validate baggage at ingress gateway before forwarding to external services.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 3. OpenTelemetry Semconv Stability Tiers
|
|
79
|
+
|
|
80
|
+
Semantic convention stability determines which attributes can be used in production without risk of breaking changes. Pin the semconv version in the file header above and update on the triggers listed in §7 (spec promotion, attribute deprecation).
|
|
81
|
+
|
|
82
|
+
Source: <https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/>
|
|
83
|
+
|
|
84
|
+
| Tier | Groups | Production use |
|
|
85
|
+
|------|--------|----------------|
|
|
86
|
+
| Stable | `service.*`, `host.*`, `cloud.*`, `k8s.*`, `http.*`, `db.*` (core), `network.*` (core), `error.*` | Yes, without caveat |
|
|
87
|
+
| Release Candidate (RC) | `rpc.*`, gRPC semconv | Yes, expect minor changes |
|
|
88
|
+
| Development | `tls.*`, `network.connection.*` | Test environments; production use requires change-tolerance |
|
|
89
|
+
| Experimental | `gen_ai.*` (deprecated in core registry since semconv 1.42; maintained in the dedicated GenAI semconv repository), profiles (OTEP 0239; Development) | Not for production SLOs |
|
|
90
|
+
|
|
91
|
+
Notes:
|
|
92
|
+
- `network.*` core attributes (e.g., `network.protocol.name`, `network.transport`) are Stable. `network.connection.*` (e.g., `network.connection.type`, `network.connection.subtype`) are Development.
|
|
93
|
+
- `tls.*` (all) are Development as of semconv 1.43.0 (verified 2026-07). For TLS deep inspection, use Wireshark or vendor-specific TLS tooling rather than OTel attributes.
|
|
94
|
+
- OTEP 0239 (profiling signal) is Development; SDK support is Java-only as of 2026-Q2. Parca and Pyroscope are in production, but the OTel profiling spec is not yet stable. Mark any profiling-related SLOs as experimental.
|
|
95
|
+
|
|
96
|
+
Verified sources:
|
|
97
|
+
- TLS attrs: <https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/>
|
|
98
|
+
- Network attrs: <https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/>
|
|
99
|
+
- RPC/gRPC: <https://opentelemetry.io/docs/specs/semconv/rpc/grpc/>
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 4. ISO/IEC Indirect Mapping
|
|
104
|
+
|
|
105
|
+
ISO/IEC 25010:2023 (<https://www.iso.org/standard/78176.html>) defines the Systems and Software Quality Model. There is no dedicated "Observability" quality characteristic in the 2023 edition. Observability concerns map indirectly through three characteristics:
|
|
106
|
+
|
|
107
|
+
| ISO/IEC 25010:2023 characteristic | Sub-characteristic | Observability concern |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| Maintainability | Analysability | Can operators diagnose system state from telemetry? |
|
|
110
|
+
| Security | Accountability | Are actions traceable to an authenticated identity (audit logs)? |
|
|
111
|
+
| Reliability | Faultlessness | Does telemetry surface defects before users encounter them? |
|
|
112
|
+
|
|
113
|
+
This mapping is informative, not normative. It is useful when presenting observability investment in terms that quality assurance or audit stakeholders recognize.
|
|
114
|
+
|
|
115
|
+
Related standards:
|
|
116
|
+
- **ISO/IEC 27001:2022 / 27002:2022** (<https://www.iso.org/standard/27001>); controls for information security management systems; governs log integrity, access control on observability backends, and audit trail requirements.
|
|
117
|
+
- **ISO/IEC 42010:2011** (<https://www.iso.org/standard/50508.html>); architecture description standard. An "observability viewpoint" is a valid architecture viewpoint under 42010 for documenting how stakeholders inspect system internals.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 5. OSI Boundary Decision
|
|
122
|
+
|
|
123
|
+
This skill operates on OSI layers L3, L4, mesh (L4-L7 hybrid), and L7. The following table makes the in-scope and out-of-scope decisions explicit.
|
|
124
|
+
|
|
125
|
+
### In scope
|
|
126
|
+
|
|
127
|
+
| Layer | Label | Coverage |
|
|
128
|
+
|-------|-------|----------|
|
|
129
|
+
| L3 | Network | IP routing, VPC flow logs, BGP/BMP, ICMP, PMTUD |
|
|
130
|
+
| L4 | Transport | TCP retransmits/RTT, eBPF (Beyla/Pixie), QUIC/HTTP3 transport |
|
|
131
|
+
| L4-L7 | Service mesh | Istio/Linkerd/Envoy: zero-code instrumentation, mTLS metadata as security context |
|
|
132
|
+
| L7 | Application | HTTP/gRPC/WebSocket, RUM (web + mobile), crash analytics, messaging |
|
|
133
|
+
|
|
134
|
+
### Out of scope
|
|
135
|
+
|
|
136
|
+
| Layer | Label | Reason | Use instead |
|
|
137
|
+
|-------|-------|--------|-------------|
|
|
138
|
+
| L1 | Physical | SaaS hypervisor hides; no OTel semconv coverage | Vendor DCIM tooling (Nlyte, Sunbird, Device42) |
|
|
139
|
+
| L2 | Data Link | Same as L1; SNMP/IPMI are hardware domains | Vendor DCIM tooling; SNMP exporters for Prometheus if needed |
|
|
140
|
+
| L5 | Session (full) | gRPC session semantics moved to L7 instrumentation; WebSocket deferred | WebSocket-specific vendor tooling |
|
|
141
|
+
| L6 | Presentation (full) | TLS kept as security context attributes only (`tls.*` Development tier); full TLS inspection is not OTel's domain | Wireshark for packet-level TLS; Cloudflare Radar for TLS ecosystem data; vendor-specific TLS inspection tooling |
|
|
142
|
+
|
|
143
|
+
Rationale: approximately 90% of production debugging occurs at L3, L4, mesh, and L7. L1/L2 are opaque to SaaS workloads. L5/L6 full coverage requires OTel semconv maturity that does not yet exist (Development tier).
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 6. Clock Discipline
|
|
148
|
+
|
|
149
|
+
Distributed traces depend on monotonic, synchronized clocks across all nodes. Clock drift corrupts waterfall charts and makes parent-before-child ordering unreliable.
|
|
150
|
+
|
|
151
|
+
### Requirements
|
|
152
|
+
|
|
153
|
+
- **NTP or chrony** MUST be running and synchronized on all host VMs and container hosts.
|
|
154
|
+
- Acceptable drift tolerance for trace timestamp correlation: **< 100 ms** (typical NTP accuracy on well-connected hosts).
|
|
155
|
+
- For sub-millisecond precision (financial, telco, or high-frequency workloads): use **PTP (IEEE 1588)** hardware timestamping.
|
|
156
|
+
|
|
157
|
+
### Cloud hypervisor time sync notes
|
|
158
|
+
|
|
159
|
+
| Cloud | Mechanism | Notes |
|
|
160
|
+
|-------|-----------|-------|
|
|
161
|
+
| AWS | Chrony + Amazon Time Sync Service (169.254.169.123) | PTP-backed time source; verify with `chronyc tracking` and `chronyc sources -v` |
|
|
162
|
+
| GCP | Internal hypervisor clock sync (`metadata.google.internal` via `time.google.com`) | GCP VMs inherit host clock. `timedatectl show` only confirms a sync daemon is active; to verify the actual offset, use `chronyc sources -v` (chrony) or `timedatectl timesync-status` (systemd-timesyncd) |
|
|
163
|
+
| Azure | Hyper-V IC timesync primary; external NTP fallback only if Hyper-V IC tools absent | Azure Linux VMs with the Hyper-V Integration Services use host time as the authoritative source. External NTP (for example `time.windows.com`) as a peer source can conflict with IC timesync; treat it as a fallback, not a parallel source. Docs: <https://learn.microsoft.com/azure/virtual-machines/linux/time-sync> |
|
|
164
|
+
|
|
165
|
+
### Span timestamp validation rule
|
|
166
|
+
|
|
167
|
+
Validate each span against its own timestamps:
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
span.start_time <= span.end_time
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
A parent span may end before an asynchronous child completes; the OTel Trace API explicitly allows children to continue after their parent ends. Parent/child interval containment is not a validity invariant or clock-drift detector. Investigate suspicious cross-host ordering using measured clock offsets and the actual synchronous/asynchronous operation semantics. See `resources/meta-observability.md` and <https://opentelemetry.io/docs/specs/otel/trace/api/>.
|
|
174
|
+
|
|
175
|
+
### Anti-pattern
|
|
176
|
+
|
|
177
|
+
NTP drift left unmonitored is anti-pattern #18 in this skill: waterfall charts appear causally wrong, leading engineers to chase phantom race conditions. Monitor `otelcol_receiver_accepted_spans` and node-level NTP offset metrics together.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 7. Versioning and Review Triggers
|
|
182
|
+
|
|
183
|
+
- The spec version block in this file's header MUST be updated when:
|
|
184
|
+
- Any listed semconv group promotes from Development → RC or RC → Stable.
|
|
185
|
+
- A listed W3C document advances maturity (CR → PR → Recommendation).
|
|
186
|
+
- OTel releases a new minor version with breaking semconv changes.
|
|
187
|
+
- **Review triggers only, no scheduled cadence** (see `SKILL.md` §Versioning & Deprecation): OTel spec releases and CNCF landscape changes (<https://landscape.cncf.io/>) affecting cited content; verify live when load-bearing.
|
|
188
|
+
- When updating, also check and update affected signal/layer files that reference the changed attribute group.
|
|
189
|
+
- Skill minor version bump required on any normative change to this file.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 8. References
|
|
194
|
+
|
|
195
|
+
Primary sources, in order of precedence:
|
|
196
|
+
|
|
197
|
+
1. OpenTelemetry specification: <https://opentelemetry.io/docs/specs/otel/>
|
|
198
|
+
2. OTel Semantic Conventions: <https://opentelemetry.io/docs/specs/semconv/>
|
|
199
|
+
3. OTLP specification: <https://opentelemetry.io/docs/specs/otlp/>
|
|
200
|
+
4. W3C Trace Context L1 Recommendation: <https://www.w3.org/TR/trace-context/>
|
|
201
|
+
5. W3C Trace Context L2 Candidate Recommendation: <https://www.w3.org/TR/trace-context-2/>
|
|
202
|
+
6. W3C Baggage Recommendation: <https://www.w3.org/TR/baggage/>
|
|
203
|
+
7. ISO/IEC 25010:2023; <https://www.iso.org/standard/78176.html>
|
|
204
|
+
8. ISO/IEC 27001:2022; <https://www.iso.org/standard/27001>
|
|
205
|
+
9. ISO/IEC 42010:2011; <https://www.iso.org/standard/50508.html>
|
|
206
|
+
10. CNCF Projects: <https://www.cncf.io/projects/>
|
|
207
|
+
11. CNCF Landscape (authoritative vendor registry): <https://landscape.cncf.io/>
|
|
208
|
+
12. OTel TLS attributes registry: <https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/>
|
|
209
|
+
13. OTel network attributes registry: <https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/>
|
|
210
|
+
14. OTel RPC/gRPC semconv: <https://opentelemetry.io/docs/specs/semconv/rpc/grpc/>
|
|
211
|
+
15. OTel Baggage API: <https://opentelemetry.io/docs/specs/otel/baggage/api/>
|
|
212
|
+
16. AWS Time Sync Service: <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html>
|
|
213
|
+
17. Azure Linux time sync: <https://learn.microsoft.com/azure/virtual-machines/linux/time-sync>
|
|
214
|
+
18. OTEP 0239 (profiling signal): <https://github.com/open-telemetry/oteps/blob/main/text/profiles/0239-profiles-data-model.md>
|