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,368 @@
|
|
|
1
|
+
---
|
|
2
|
+
otel_spec: "1.x (stable API/SDK)"
|
|
3
|
+
otel_semconv: "1.43.0 (2026-07)"
|
|
4
|
+
tools:
|
|
5
|
+
- "Istio: 1.22+; Envoy: 1.29+; OTel Operator: v0.100+"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Service Mesh Observability
|
|
9
|
+
|
|
10
|
+
## 1. Why the Service Mesh Has Its Own Observability File
|
|
11
|
+
|
|
12
|
+
The service mesh is classified as a **L4-L7 hybrid layer** in the taxonomy defined in `resources/standards.md §OSI Boundary Decision`. It differs from the adjacent L4-transport layer in a fundamental way: the mesh proxy (sidecar or ambient agent) operates at the HTTP/gRPC framing level, not at raw TCP socket level.
|
|
13
|
+
|
|
14
|
+
Three properties make mesh observability distinct enough to warrant a dedicated file:
|
|
15
|
+
|
|
16
|
+
1. **Zero-code auto-instrumentation.** Sidecar injection (or ambient mode) intercepts all inbound and outbound traffic without requiring any change to application code. Metrics, access logs, and distributed trace spans are produced automatically from day one of mesh deployment. This contrasts with `layers/L4-transport.md`, where eBPF probes attach to kernel socket events and produce transport-centric (TCP RTT, retransmit) artifacts.
|
|
17
|
+
|
|
18
|
+
2. **Proxy-centric, not transport-centric.** Mesh observability is Envoy-proxy-centric or Linkerd-proxy-centric. The primary artifacts are Envoy listeners/clusters, access log records, and HTTP/gRPC span metadata; not TCP segments or IP packets. `layers/L4-transport.md` covers kernel-level transport; this file covers proxy-level L7 framing.
|
|
19
|
+
|
|
20
|
+
3. **mTLS identity as a first-class signal.** The mesh terminates mTLS at the sidecar, producing certificate identity (SPIFFE SVID), cipher suite, and expiry as observable attributes alongside each request. No other layer produces this security context natively.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Service Mesh Options (as of 2026-Q2)
|
|
25
|
+
|
|
26
|
+
| Mesh | CNCF Status | Proxy engine | Deployment modes | Primary differentiator |
|
|
27
|
+
|------|------------|-------------|-----------------|----------------------|
|
|
28
|
+
| **Istio** | Graduated | Envoy | Sidecar, Ambient (ztunnel + waypoint) | Richest Envoy telemetry; Telemetry API v2; OTLP direct export since 1.22 |
|
|
29
|
+
| **Linkerd** | Graduated | linkerd2-proxy (Rust) | Sidecar only | Lightweight; minimal CPU overhead; built-in mTLS; own propagator headers |
|
|
30
|
+
| **Envoy** | Graduated | Self | Standalone gateway or sidecar | Proxy engine underlying Istio; also deployed as standalone API gateway |
|
|
31
|
+
| **Consul Connect** | Not CNCF | Envoy (via xDS) | Sidecar | HashiCorp ecosystem; strong multi-datacenter support |
|
|
32
|
+
| **Kuma** | CNCF Sandbox | Envoy (via xDS) | Sidecar, Universal (VM) | Multi-cloud and multi-zone; Kong-backed |
|
|
33
|
+
|
|
34
|
+
CNCF status source: <https://landscape.cncf.io>; verify at use time when load-bearing.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 3. Native Telemetry from the Mesh
|
|
39
|
+
|
|
40
|
+
### 3.1 Metrics: Envoy Golden Signals
|
|
41
|
+
|
|
42
|
+
Envoy exposes golden signals per **listener** (inbound) and **cluster** (outbound). Istio enables a controlled subset by default to avoid cardinality explosion caused by per-endpoint label permutations.
|
|
43
|
+
|
|
44
|
+
| Signal | Metric names (Istio/Envoy) | Label cardinality note |
|
|
45
|
+
|--------|---------------------------|----------------------|
|
|
46
|
+
| Request rate (throughput) | `istio_requests_total` | High: source × destination × method × status code |
|
|
47
|
+
| Error rate | `istio_requests_total{response_code=~"5.."}` | Subset of throughput labels |
|
|
48
|
+
| Latency p50/p95/p99 | `istio_request_duration_milliseconds` | Histogram; disable per-endpoint if >1000 pods |
|
|
49
|
+
| Saturation (pending) | `envoy_cluster_upstream_rq_pending_total` | Per cluster |
|
|
50
|
+
| mTLS handshake errors | `istio_tcp_connections_closed_total` | Proxy-level |
|
|
51
|
+
|
|
52
|
+
Istio 1.22+ Telemetry API disables `destination_service_name` by default at high pod counts to cap cardinality. Override only after confirming cardinality budget in `resources/meta-observability.md`.
|
|
53
|
+
|
|
54
|
+
### 3.2 Distributed Traces
|
|
55
|
+
|
|
56
|
+
Envoy automatically creates **ingress and egress spans** for every HTTP/gRPC call that traverses the proxy. Each span captures:
|
|
57
|
+
|
|
58
|
+
- `http.request.method`, `http.response.status_code`, `url.full` (Stable semconv)
|
|
59
|
+
- `service.peer.name` derived from Envoy cluster name (Development semconv; successor to the deprecated `peer.service`)
|
|
60
|
+
- mTLS peer identity (SPIFFE SVID) via `tls.*` attributes (Development semconv; see `resources/standards.md §3`)
|
|
61
|
+
- `x-request-id` correlation ID (Istio-specific; carries across internal calls)
|
|
62
|
+
|
|
63
|
+
Spans are created without SDK changes. The caveat is that without application-level header forwarding, each service starts a **new root span** rather than contributing to the existing trace. This is the context propagation problem addressed in Section 5.
|
|
64
|
+
|
|
65
|
+
### 3.3 Access Logs
|
|
66
|
+
|
|
67
|
+
Envoy access logs provide per-request metadata: source workload identity, destination service, HTTP method and status code, request duration, bytes sent and received, and upstream cluster name. Access logs complement traces; they are always available (100% sampling) even when traces are sampled at 1%.
|
|
68
|
+
|
|
69
|
+
Structured access log format (JSON) is required for trace correlation:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"trace_id": "%TRACE_ID%",
|
|
74
|
+
"span_id": "%SPAN_ID%",
|
|
75
|
+
"upstream_cluster": "%UPSTREAM_CLUSTER%",
|
|
76
|
+
"response_code": "%RESPONSE_CODE%",
|
|
77
|
+
"duration": "%DURATION%",
|
|
78
|
+
"source_principal": "%DOWNSTREAM_PEER_SUBJECT%"
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
> Envoy command operators `%TRACE_ID%` and `%SPAN_ID%` (available since Envoy 1.25) extract the W3C `traceparent` context Envoy itself emitted. Using `%REQ(X-B3-TRACEID)%` is only correct if the upstream explicitly sent the B3 header. Since this skill standardizes on W3C (see §6 Propagator Headers), prefer the command operators.
|
|
83
|
+
|
|
84
|
+
### 3.4 mTLS Certificate Observability
|
|
85
|
+
|
|
86
|
+
Istio exposes certificate expiry and rotation events as Prometheus metrics:
|
|
87
|
+
|
|
88
|
+
- `citadel_server_csr_count`: certificate signing request volume
|
|
89
|
+
- `pilot_xds_pushes{type="sds"}`: SDS secret delivery (certificate rotation)
|
|
90
|
+
- Cert expiry: scraped from `istio-proxy` via `/pki` endpoint, alertable as a PrometheusRule
|
|
91
|
+
|
|
92
|
+
Cross-reference: `signals/privacy.md §Security Context (TLS attrs Development)` for attribute stability notes.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 4. OpenTelemetry Direct Export (Envoy 1.29+ / Istio 1.22+)
|
|
97
|
+
|
|
98
|
+
### 4.1 Envoy OTLP Tracer
|
|
99
|
+
|
|
100
|
+
Since Envoy 1.29, the built-in OTLP tracer exports spans directly over OTLP/HTTP to any OTel-compatible backend or OTel Collector, replacing the older Zipkin and Jaeger tracers.
|
|
101
|
+
|
|
102
|
+
Istio 1.22 surfaces this via the **Telemetry API** `opentelemetry` provider type, which avoids editing raw Envoy bootstrap config.
|
|
103
|
+
|
|
104
|
+
### 4.2 Telemetry CR (Istio 1.22+)
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
# Configure Istio tracing to export OTLP/HTTP to an OTel Collector
|
|
108
|
+
apiVersion: telemetry.istio.io/v1
|
|
109
|
+
kind: Telemetry
|
|
110
|
+
metadata:
|
|
111
|
+
name: otel-tracing
|
|
112
|
+
namespace: istio-system
|
|
113
|
+
spec:
|
|
114
|
+
tracing:
|
|
115
|
+
- providers:
|
|
116
|
+
- name: otel-tracing-provider
|
|
117
|
+
randomSamplingPercentage: 10.0
|
|
118
|
+
---
|
|
119
|
+
# Register the OTel tracing provider in MeshConfig
|
|
120
|
+
# (set via IstioOperator or helm values: meshConfig.extensionProviders)
|
|
121
|
+
# meshConfig:
|
|
122
|
+
# extensionProviders:
|
|
123
|
+
# - name: otel-tracing-provider
|
|
124
|
+
# opentelemetry:
|
|
125
|
+
# service: otel-collector.observability.svc.cluster.local
|
|
126
|
+
# port: 4318
|
|
127
|
+
# http:
|
|
128
|
+
# path: /v1/traces
|
|
129
|
+
# resourceDetectors:
|
|
130
|
+
# environment: {}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
The `resourceDetectors.environment` block activates the **Environment Resource Detector**, which reads `OTEL_RESOURCE_ATTRIBUTES` from the proxy environment and enriches every span with `service.name`, `service.namespace`, `k8s.pod.name`, and `k8s.node.name` (Stable semconv) automatically.
|
|
134
|
+
|
|
135
|
+
### 4.3 Custom Samplers (Envoy 1.29+)
|
|
136
|
+
|
|
137
|
+
Envoy 1.29 introduced the OTel Sampler interface, allowing parent-based or trace-ID-ratio samplers to be configured without patching application code. Tail-based sampling decisions are still made at the Collector tier; see `resources/transport/sampling-recipes.md` for tail-sampler configuration.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 5. Zero-Code Auto-Instrumentation Pitfall: Broken Context Propagation
|
|
142
|
+
|
|
143
|
+
### 5.1 The Problem
|
|
144
|
+
|
|
145
|
+
The mesh sidecar creates spans but cannot inject `traceparent` into the application's outbound HTTP calls by itself. If the application does not read the incoming `traceparent` header and forward it on outbound calls, Envoy on the egress side starts a **new trace**, breaking the trace chain. The result is a trace forest of disconnected single-hop spans rather than a unified distributed trace.
|
|
146
|
+
|
|
147
|
+
This is anti-pattern #1 for mesh observability: mesh-only tracing without application header forwarding.
|
|
148
|
+
|
|
149
|
+
### 5.2 Solution A: Application-Level Propagator Library
|
|
150
|
+
|
|
151
|
+
Add the W3C Trace Context propagator to the application SDK. The SDK reads `traceparent` from incoming requests and automatically injects it into all outbound HTTP/gRPC calls.
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
# Python example (opentelemetry-sdk)
|
|
155
|
+
from opentelemetry.propagate import set_global_textmap
|
|
156
|
+
from opentelemetry.propagators.composite import CompositePropagator
|
|
157
|
+
from opentelemetry.propagators.b3 import B3MultiFormat
|
|
158
|
+
from opentelemetry import propagate
|
|
159
|
+
|
|
160
|
+
set_global_textmap(CompositePropagator([
|
|
161
|
+
propagate.get_global_textmap(), # W3C TraceContext + Baggage
|
|
162
|
+
B3MultiFormat(), # B3 for Zipkin-legacy services
|
|
163
|
+
]))
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 5.3 Solution B: OTel Operator Instrumentation CR
|
|
167
|
+
|
|
168
|
+
The **OpenTelemetry Operator** (`github.com/open-telemetry/opentelemetry-operator`) injects the OTel SDK init container and environment variables into Pods automatically via a mutating webhook, without any application code change.
|
|
169
|
+
|
|
170
|
+
Supported language runtimes: Java, NodeJS, Python, .NET, Go, Apache HTTPD, Nginx.
|
|
171
|
+
|
|
172
|
+
**Step 1; Deploy the Instrumentation CR:**
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
apiVersion: opentelemetry.io/v1alpha1
|
|
176
|
+
kind: Instrumentation
|
|
177
|
+
metadata:
|
|
178
|
+
name: default-instrumentation
|
|
179
|
+
namespace: my-app
|
|
180
|
+
spec:
|
|
181
|
+
exporter:
|
|
182
|
+
endpoint: http://otel-collector.observability.svc.cluster.local:4318
|
|
183
|
+
propagators:
|
|
184
|
+
- tracecontext # W3C traceparent / tracestate
|
|
185
|
+
- baggage # W3C baggage
|
|
186
|
+
- b3 # B3 single-header (Zipkin legacy compatibility)
|
|
187
|
+
sampler:
|
|
188
|
+
type: parentbased_traceidratio
|
|
189
|
+
argument: "0.1"
|
|
190
|
+
java:
|
|
191
|
+
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest
|
|
192
|
+
nodejs:
|
|
193
|
+
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:latest
|
|
194
|
+
python:
|
|
195
|
+
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:latest
|
|
196
|
+
dotnet:
|
|
197
|
+
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:latest
|
|
198
|
+
go:
|
|
199
|
+
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-go:latest
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Step 2; Activate per Pod via annotation:**
|
|
203
|
+
|
|
204
|
+
```yaml
|
|
205
|
+
metadata:
|
|
206
|
+
annotations:
|
|
207
|
+
instrumentation.opentelemetry.io/inject-java: "true"
|
|
208
|
+
# or: inject-nodejs, inject-python, inject-dotnet, inject-go
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
The Operator injects the SDK agent, sets `OTEL_EXPORTER_OTLP_ENDPOINT`, and configures the propagator list. The sidecar then sees correctly formed `traceparent` headers on all outbound calls, connecting mesh spans to application spans in a single trace.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 6. Propagator Headers per Mesh
|
|
216
|
+
|
|
217
|
+
Cross-reference: `resources/boundaries/cross-application.md` for full propagator compatibility matrix.
|
|
218
|
+
|
|
219
|
+
| Header | Standard / Origin | Carried by | Notes |
|
|
220
|
+
|--------|------------------|-----------|-------|
|
|
221
|
+
| `traceparent` | W3C Trace Context L1 | W3C-compliant SDKs, Envoy OTLP, Istio | Recommended default for all new deployments |
|
|
222
|
+
| `tracestate` | W3C Trace Context L1 | Same as above | Vendor-specific trace flags; opaque to intermediaries |
|
|
223
|
+
| `baggage` | W3C Baggage | OTel SDK, Istio | Key-value propagation; strip PII at ingress gateway |
|
|
224
|
+
| `x-b3-traceid` | B3 (Zipkin) | Envoy B3 propagator, Linkerd (legacy compat) | 128-bit; use B3 multi-header format |
|
|
225
|
+
| `x-b3-spanid` | B3 (Zipkin) | Same | 64-bit |
|
|
226
|
+
| `x-b3-parentspanid` | B3 (Zipkin) | Same | 64-bit; absent on root spans |
|
|
227
|
+
| `x-b3-sampled` | B3 (Zipkin) | Same | `1` = keep, `0` = drop; overrides downstream sampler |
|
|
228
|
+
| `x-request-id` | Envoy / Istio internal | Istio sidecar injected | Stable correlation ID across retries; not a trace ID |
|
|
229
|
+
| `x-ot-span-context` | OpenTracing (legacy) | Envoy OpenTracing tracer | Deprecated; replaced by OTLP tracer in Envoy 1.29+ |
|
|
230
|
+
| `l5d-ctx-trace` | Linkerd | linkerd2-proxy | Linkerd trace context; not W3C-compatible |
|
|
231
|
+
| `l5d-ctx-span` | Linkerd | linkerd2-proxy | Current span identifier in Linkerd format |
|
|
232
|
+
| `l5d-ctx-parent` | Linkerd | linkerd2-proxy | Parent span reference |
|
|
233
|
+
| `l5d-ctx-deadline` | Linkerd | linkerd2-proxy | Deadline propagation (timeout budget) |
|
|
234
|
+
|
|
235
|
+
**Cross-mesh compatibility rule:** when Istio and Linkerd coexist (or when a service exits the mesh boundary to an external system), standardize on W3C `traceparent` / `tracestate` as the translation surface. Configure each mesh's propagator list to include W3C as the first entry. Translate Linkerd `l5d-ctx-*` headers to W3C at the mesh boundary gateway to avoid split-brain traces.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 7. Combining Mesh and Application Telemetry
|
|
240
|
+
|
|
241
|
+
The mesh alone covers **network boundary spans**: the ingress proxy creates a server-side span, the egress proxy creates a client-side span. What it cannot see is what the application does between receiving a request and making the next outbound call; database queries, cache reads, external API calls, or business-logic operations.
|
|
242
|
+
|
|
243
|
+
| Source | Spans covered | Business context |
|
|
244
|
+
|--------|--------------|-----------------|
|
|
245
|
+
| Mesh (Envoy/Linkerd) | Ingress and egress HTTP/gRPC per service hop | None; proxy has no access to app state |
|
|
246
|
+
| Application SDK | Internal operations: DB, cache, queue, business logic | Full; SDK operates inside the application process |
|
|
247
|
+
| Combined via OTel Collector | All of the above, correlated by `trace_id` | Complete; best result |
|
|
248
|
+
|
|
249
|
+
Recommended pipeline architecture:
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
Envoy sidecar
|
|
253
|
+
└─ OTLP/HTTP → OTel Collector (DaemonSet or sidecar)
|
|
254
|
+
└─ traces → observability backend
|
|
255
|
+
|
|
256
|
+
Application SDK (via OTel Operator Instrumentation CR)
|
|
257
|
+
└─ OTLP/gRPC → OTel Collector (same or separate instance)
|
|
258
|
+
└─ traces → observability backend (same trace_id)
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Both pipelines feed the same backend. The backend joins spans by `trace_id`. The result is a waterfall chart with proxy-level boundary spans and application-level internal spans in the same view.
|
|
262
|
+
|
|
263
|
+
For Collector topology options see `resources/transport/collector-topology.md`.
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 8. mTLS Observability (Security Context)
|
|
268
|
+
|
|
269
|
+
When Istio PeerAuthentication is set to `STRICT` mode, all pod-to-pod traffic is encrypted with mTLS. The mesh then exposes security context as observable attributes:
|
|
270
|
+
|
|
271
|
+
- **TLS version**: `tls.protocol.version` (Development tier per semconv 1.43.0; see `resources/standards.md §Semconv Stability Tiers`)
|
|
272
|
+
- **Cipher suite**: `tls.cipher` (Development tier)
|
|
273
|
+
- **Certificate expiry**: alertable via PrometheusRule on `citadel_server_root_cert_expiry_timestamp`
|
|
274
|
+
- **SPIFFE peer identity**: available in Envoy access log via `%DOWNSTREAM_PEER_SUBJECT%`; identifies source workload for zero-trust audit
|
|
275
|
+
|
|
276
|
+
```yaml
|
|
277
|
+
# PrometheusRule: alert when any Istio cert expires within 7 days
|
|
278
|
+
apiVersion: monitoring.coreos.com/v1
|
|
279
|
+
kind: PrometheusRule
|
|
280
|
+
metadata:
|
|
281
|
+
name: istio-cert-expiry
|
|
282
|
+
namespace: istio-system
|
|
283
|
+
spec:
|
|
284
|
+
groups:
|
|
285
|
+
- name: istio.certificates
|
|
286
|
+
rules:
|
|
287
|
+
- alert: IstioCertExpiryWarning
|
|
288
|
+
expr: |
|
|
289
|
+
(citadel_server_root_cert_expiry_timestamp - time()) / 86400 < 7
|
|
290
|
+
for: 1h
|
|
291
|
+
labels:
|
|
292
|
+
severity: warning
|
|
293
|
+
annotations:
|
|
294
|
+
summary: "Istio root certificate expires in fewer than 7 days"
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Cross-reference: `resources/signals/privacy.md §Security Context` for TLS attribute stability notes.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 9. Sampling Considerations
|
|
302
|
+
|
|
303
|
+
Istio's default sampling rate is **1%** (`randomSamplingPercentage: 1.0`). At 1%, you need 100 requests before the first trace is visible in the backend; this is insufficient for debugging low-traffic endpoints or canary deployments.
|
|
304
|
+
|
|
305
|
+
| Scenario | Recommended sampling rate | Configuration location |
|
|
306
|
+
|----------|--------------------------|----------------------|
|
|
307
|
+
| Development / staging | 100% | Telemetry CR `randomSamplingPercentage: 100` |
|
|
308
|
+
| Production (baseline) | 10% | Telemetry CR `randomSamplingPercentage: 10` |
|
|
309
|
+
| High-traffic SLO critical path | Tail-based at Collector | Collector `tail_sampling` processor |
|
|
310
|
+
| Canary release tracing | 100% on canary subset | Telemetry CR scoped to canary namespace or label |
|
|
311
|
+
|
|
312
|
+
Tune via the Telemetry API `samplingPercentage` field (Istio 1.22+) or by configuring a custom OTel Sampler via Envoy 1.29+. For tail-based sampling (retain error traces, drop successful traces after SLO window), configure at the gateway Collector tier as documented in `resources/transport/sampling-recipes.md`.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## 10. Matrix Coverage Reference (mesh row)
|
|
317
|
+
|
|
318
|
+
These cells from `resources/matrix.md` are the primary coverage drivers for this file:
|
|
319
|
+
|
|
320
|
+
| matrix cell | symbol | artifact |
|
|
321
|
+
|------------|--------|---------|
|
|
322
|
+
| mesh × cross-application × traces | PASS | Zero-code L7 trace continuity; primary use case of the mesh layer |
|
|
323
|
+
| mesh × multi-tenant × traces | PASS | `tenant.id` via W3C Baggage; proxy can enforce baggage scrubbing at gateway |
|
|
324
|
+
| mesh × release × traces | PARTIAL | Canary routing rules are observable; `service.version` on spans; trace continuity requires OTel Operator CR |
|
|
325
|
+
| mesh × privacy × * | PASS | mTLS config observability; baggage scrubbing; SPIFFE identity in access log |
|
|
326
|
+
| mesh × slo × metrics | PASS | Envoy request rate + error rate are primary SLI sources |
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## 11. Anti-Patterns
|
|
331
|
+
|
|
332
|
+
The following are anti-patterns for this layer. They are candidates for inclusion in `resources/anti-patterns.md`.
|
|
333
|
+
|
|
334
|
+
| # | Anti-pattern | Impact | Remedy |
|
|
335
|
+
|---|-------------|--------|--------|
|
|
336
|
+
| AP-M1 | Mesh-only tracing without application SDK | Spans cover network hops only; DB queries, business logic, and external API calls invisible | Deploy OTel Operator Instrumentation CR to inject SDK into all application pods |
|
|
337
|
+
| AP-M2 | W3C Trace Context not standardized across meshes | Linkerd and Istio produce disconnected trace forests when a request crosses mesh boundaries | Configure W3C as first propagator in both meshes; translate at boundary gateway |
|
|
338
|
+
| AP-M3 | Default 1% Istio sampling rate in production without awareness | First trace visible only after 100 requests; low-traffic endpoints never appear in trace backend | Raise to 10% baseline; use tail-based sampling at Collector for cost control |
|
|
339
|
+
| AP-M4 | OTel Operator Instrumentation CR not deployed | `traceparent` not forwarded by application code; mesh spans are disconnected root spans | Deploy `Instrumentation` CR and annotate all application Deployments |
|
|
340
|
+
| AP-M5 | Cardinality explosion from per-endpoint Envoy labels | `istio_requests_total` with high-cardinality `destination_service_name` × `source_workload` × URL path exceeds Prometheus cardinality budget | Use Telemetry API to suppress high-cardinality labels; aggregate at Collector metric transform processor |
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 12. References
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
Internal cross-references:
|
|
348
|
+
- `resources/standards.md`: normative semconv stability tiers and W3C Trace Context requirements
|
|
349
|
+
- `resources/matrix.md`: full 112-cell coverage map (mesh row)
|
|
350
|
+
- `resources/transport/sampling-recipes.md`: tail-based sampling at Collector tier
|
|
351
|
+
- `resources/transport/collector-topology.md`: DaemonSet vs sidecar Collector topology
|
|
352
|
+
- `resources/meta-observability.md`: cardinality guardrails and pipeline self-health
|
|
353
|
+
- `resources/layers/L4-transport.md`: eBPF socket-level profiles for mesh sidecar overhead
|
|
354
|
+
- `resources/boundaries/cross-application.md`: full propagator compatibility matrix
|
|
355
|
+
- `resources/boundaries/multi-tenant.md`: baggage-based tenant attribution
|
|
356
|
+
- `resources/boundaries/release.md`: canary trace routing with `service.version`
|
|
357
|
+
- `resources/signals/privacy.md`: TLS attribute stability and mTLS security context
|
|
358
|
+
- `resources/signals/traces.md`: OTel SDK trace patterns for application layer
|
|
359
|
+
|
|
360
|
+
## References
|
|
361
|
+
|
|
362
|
+
- Istio observability concepts: <https://istio.io/latest/docs/concepts/observability/>
|
|
363
|
+
- Istio OpenTelemetry tracing task: <https://istio.io/latest/docs/tasks/observability/distributed-tracing/opentelemetry/>
|
|
364
|
+
- Envoy + Istio OTel features (2024): <https://opentelemetry.io/blog/2024/new-otel-features-envoy-istio/>
|
|
365
|
+
- OTel Operator GitHub: <https://github.com/open-telemetry/opentelemetry-operator>
|
|
366
|
+
- Linkerd observability and propagator docs: <https://linkerd.io/2.15/features/distributed-tracing/>
|
|
367
|
+
- W3C Trace Context L1: <https://www.w3.org/TR/trace-context/>
|
|
368
|
+
- OTel semconv `tls.*`: <https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/>
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
otel_spec: "1.x (stable API/SDK)"
|
|
3
|
+
otel_semconv: "1.43.0 (2026-07)"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Observability Coverage Matrix
|
|
7
|
+
|
|
8
|
+
## 1. Purpose
|
|
9
|
+
|
|
10
|
+
This file is the coverage map for the `oma-observability` skill. It answers one question per cell:
|
|
11
|
+
|
|
12
|
+
> "What observability artifact belongs at the intersection of this layer, this boundary, and this signal?"
|
|
13
|
+
|
|
14
|
+
The matrix has three goals:
|
|
15
|
+
|
|
16
|
+
1. **Prevent hand-wave instrumentation.** "Just add metrics" is not a plan. Every cell forces an explicit decision: what artifact, from which source, tagged how, stored where.
|
|
17
|
+
2. **Surface N/A early.** Some combinations are physically or semantically meaningless (e.g., L3-level CPU profiling). Declaring them N/A is a correct engineering answer, not a gap.
|
|
18
|
+
3. **Provide navigation.** Each covered cell links to the authoritative layer/boundary/signal file within this skill so implementers can jump directly to the detailed guidance.
|
|
19
|
+
|
|
20
|
+
**Normative base:** all taxonomy, semconv stability tiers, and OSI boundary decisions are declared in `resources/standards.md`. Read that file before using this matrix.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Taxonomy
|
|
25
|
+
|
|
26
|
+
### Layers (4)
|
|
27
|
+
|
|
28
|
+
| Label | Meaning |
|
|
29
|
+
|-------|---------|
|
|
30
|
+
| L3-network | IP routing, VPC flow logs, BGP/BMP, ICMP, PMTUD |
|
|
31
|
+
| L4-transport | TCP retransmits/RTT, QUIC/HTTP3 transport, eBPF (Beyla/Pixie) |
|
|
32
|
+
| mesh | Istio/Linkerd/Envoy: zero-code instrumentation, mTLS metadata as security context |
|
|
33
|
+
| L7-application | HTTP/gRPC/WebSocket, RUM (web + mobile), crash analytics, messaging |
|
|
34
|
+
|
|
35
|
+
### Boundaries (4)
|
|
36
|
+
|
|
37
|
+
| Label | Meaning |
|
|
38
|
+
|-------|---------|
|
|
39
|
+
| multi-tenant | Signals must be isolated, attributed, and possibly residency-constrained per tenant |
|
|
40
|
+
| cross-application | Propagation across service, domain, or vendor boundaries |
|
|
41
|
+
| slo | Signals that feed SLI computation, burn-rate alerting, or error-budget accounting |
|
|
42
|
+
| release | Signals that are correlated to a specific deployment, canary, or feature flag state |
|
|
43
|
+
|
|
44
|
+
### Signals (7)
|
|
45
|
+
|
|
46
|
+
| Label | Meaning |
|
|
47
|
+
|-------|---------|
|
|
48
|
+
| metrics | Numeric time-series (counters, gauges, histograms) |
|
|
49
|
+
| logs | Structured log records and events |
|
|
50
|
+
| traces | Distributed spans and context propagation |
|
|
51
|
+
| profiles | Continuous CPU/memory/off-CPU flame graphs (OTEP 0239; Development) |
|
|
52
|
+
| cost | FinOps unit-economics and resource attribution |
|
|
53
|
+
| audit | Immutable, tamper-evident event records for compliance |
|
|
54
|
+
| privacy | PII detection, redaction, anonymization, pseudonymization controls |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 3. How to Read the Matrix
|
|
59
|
+
|
|
60
|
+
- **Row** = one boundary within a given layer.
|
|
61
|
+
- **Column** = one signal.
|
|
62
|
+
- **Cell content** = 1-2 word artifact description + file reference.
|
|
63
|
+
|
|
64
|
+
### Cell legend
|
|
65
|
+
|
|
66
|
+
| Token | Meaning |
|
|
67
|
+
|-------|---------|
|
|
68
|
+
| `PASS` | Covered: artifact is well-defined; see referenced file and section |
|
|
69
|
+
| `PARTIAL` | Partially covered or requires caveat; see referenced file and "Caveats" section below |
|
|
70
|
+
| `N/A` | Not meaningful at this layer/boundary or produces no actionable artifact |
|
|
71
|
+
|
|
72
|
+
Every `PASS` and `PARTIAL` cell includes at least one file reference. File references point to files within this skill tree.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 4. The Matrix
|
|
77
|
+
|
|
78
|
+
### Layer: L3-network
|
|
79
|
+
|
|
80
|
+
L3 is the IP routing layer: VPC flow logs, BGP/BMP, ICMP unreachables, and PMTUD probing. Observability at this layer is network-flow-centric. Traces are not native to L3 packets; profiles are not applicable. SLO and release boundaries are defined at the application layer and cannot be computed from IP flow data alone.
|
|
81
|
+
|
|
82
|
+
| Boundary \ Signal | metrics | logs | traces | profiles | cost | audit | privacy |
|
|
83
|
+
|---|---|---|---|---|---|---|---|
|
|
84
|
+
| multi-tenant | PASS per-tenant VPC flow byte/packet counters → `layers/L3-network.md`, `boundaries/multi-tenant.md §Metric attribution` | PASS VPC flow log stream tagged by tenant network CIDR → `layers/L3-network.md`, `signals/logs.md` | PARTIAL trace-ID egress tagging at L3 boundary only; trace context not carried in IP headers → `layers/L3-network.md §BGP advanced`, `signals/traces.md` | N/A; CPU/memory profiling has no L3 artifact | PARTIAL egress byte attribution by tenant VPC → `signals/cost.md §egress`, `boundaries/multi-tenant.md` | PASS VPC flow audit trail tagged by tenant → `signals/audit.md`, `layers/L3-network.md` | PARTIAL IP addresses are PII in GDPR/PIPA; mask or hash before retention → `signals/privacy.md §IP addresses` |
|
|
85
|
+
| cross-application | PASS inter-VPC/peering flow metrics → `layers/L3-network.md`, `signals/metrics.md` | PASS VPC flow logs across peering or transit gateway → `layers/L3-network.md`, `signals/logs.md` | PARTIAL L3 packets carry no trace context natively; use trace-ID in DNS or SNI side-channel only → `layers/L3-network.md`, `boundaries/cross-application.md` | N/A | PARTIAL cross-VPC egress cost attribution; unreliable without flow tagging → `signals/cost.md` | PASS inter-VPC flow audit for SOC2 network controls → `signals/audit.md`, `layers/L3-network.md` | PARTIAL source/destination IPs crossing application boundary are PII candidates → `signals/privacy.md §IP addresses` |
|
|
86
|
+
| slo | N/A; SLO error budgets are defined at L7; L3 availability feeds infra health at most | N/A; VPC flow logs are operational, not SLO inputs | N/A | N/A | N/A | N/A | N/A |
|
|
87
|
+
| release | N/A; release events carry no L3 signal | N/A | N/A | N/A | N/A | N/A | N/A |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### Layer: L4-transport
|
|
92
|
+
|
|
93
|
+
L4 is the TCP/UDP/QUIC transport layer. eBPF (Beyla, Pixie) is the primary observability mechanism, producing socket-level metrics and off-CPU flame graphs without code changes. TCP retransmits, RTT, and connection states are rich signals. Trace context is not native to TCP; it lives at the application framing layer. SLO and release boundaries are application concerns.
|
|
94
|
+
|
|
95
|
+
| Boundary \ Signal | metrics | logs | traces | profiles | cost | audit | privacy |
|
|
96
|
+
|---|---|---|---|---|---|---|---|
|
|
97
|
+
| multi-tenant | PASS per-tenant TCP retransmit rate, RTT histograms via eBPF socket filter → `layers/L4-transport.md §eBPF`, `boundaries/multi-tenant.md` | PASS TCP connection lifecycle events per tenant socket namespace → `layers/L4-transport.md`, `signals/logs.md` | PARTIAL TCP is not trace-native; mesh or L7 must carry trace context; L4 can log socket tuples for correlation → `layers/L4-transport.md`, `signals/traces.md` | PASS eBPF CPU/off-CPU profiling at socket-level covers L4 overhead; pprof-compatible output → `signals/profiles.md`, `layers/L4-transport.md §eBPF` | PARTIAL L4 byte volume per tenant as cost proxy; not a direct cost signal → `signals/cost.md` | PARTIAL connection-level audit (who connected to what port, when); useful for SOC2 network access controls → `signals/audit.md`, `layers/L4-transport.md` | PARTIAL source IPs in TCP metadata are PII; apply same IP-masking rules as L3 → `signals/privacy.md §IP addresses` |
|
|
98
|
+
| cross-application | PASS cross-service TCP RTT and retransmit metrics via eBPF → `layers/L4-transport.md §eBPF`, `signals/metrics.md` | PASS TCP connection events across service socket pairs → `layers/L4-transport.md`, `signals/logs.md` | PARTIAL trace context does not exist at L4; identify cross-app flows by socket 5-tuple and correlate to L7 spans → `layers/L4-transport.md`, `boundaries/cross-application.md` | PASS eBPF off-CPU profiles covering network-wait time across application boundaries → `signals/profiles.md`, `layers/L4-transport.md §eBPF` | PARTIAL cross-application byte volume as FinOps signal; correlate with L7 cost attribution for accuracy → `signals/cost.md` | PASS TCP connection audit across trust boundaries → `signals/audit.md`, `layers/L4-transport.md` | PARTIAL connection metadata contains IPs; apply masking at pipeline ingress → `signals/privacy.md` |
|
|
99
|
+
| slo | N/A; SLO windows are application-defined; L4 connection success rate may inform infra SLI but is not a canonical SLO boundary | N/A | N/A | N/A | N/A | N/A | N/A |
|
|
100
|
+
| release | N/A; release events are application-layer; L4 has no deployment semantic | N/A | N/A | N/A | N/A | N/A | N/A |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### Layer: mesh
|
|
105
|
+
|
|
106
|
+
The service mesh layer (Istio, Linkerd, Envoy) operates as a transparent L4-L7 proxy sidecar or ambient mode agent. It provides zero-code instrumentation, mTLS metadata as security context, and W3C Trace Context propagation without application code changes. This layer has the strongest native multi-signal coverage of any layer in this skill.
|
|
107
|
+
|
|
108
|
+
| Boundary \ Signal | metrics | logs | traces | profiles | cost | audit | privacy |
|
|
109
|
+
|---|---|---|---|---|---|---|---|
|
|
110
|
+
| multi-tenant | PASS per-tenant RED (Rate/Error/Duration) metrics from Envoy telemetry; tagged via `tenant.id` baggage → `layers/mesh.md`, `boundaries/multi-tenant.md §Metric attribution`, `signals/metrics.md` | PASS Envoy access logs per tenant with baggage-derived tenant tag → `layers/mesh.md`, `signals/logs.md` | PASS Envoy zero-code span injection + W3C Baggage `tenant.id` propagation → `layers/mesh.md`, `boundaries/multi-tenant.md`, `signals/traces.md` | PARTIAL mesh proxies add latency overhead visible in eBPF profiles; not a mesh-native profiling source → `signals/profiles.md`, `layers/mesh.md` | PARTIAL request-level cost attribution by tenant via mesh telemetry; feed into OpenCost → `signals/cost.md`, `layers/mesh.md` | PASS mTLS identity + access log provide SOC2 accountability trail per tenant → `signals/audit.md`, `layers/mesh.md` | PASS mTLS config enforces transport encryption; baggage scrubbing at ingress gateway removes PII before propagation → `signals/privacy.md`, `layers/mesh.md`, `resources/standards.md §W3C Baggage` |
|
|
111
|
+
| cross-application | PASS cross-service RED metrics at mesh proxy; primary use case for service topology mapping → `layers/mesh.md`, `boundaries/cross-application.md`, `signals/metrics.md` | PASS Envoy access logs across service-to-service calls; correlation by `trace_id` → `layers/mesh.md`, `signals/logs.md` | PASS primary trace origin for cross-application spans; Envoy injects spans without code changes; W3C Trace Context propagation → `layers/mesh.md`, `boundaries/cross-application.md`, `signals/traces.md` | PARTIAL mesh overhead visible via eBPF off-CPU profiles on sidecar process; not mesh-native → `signals/profiles.md`, `layers/L4-transport.md §eBPF` | PASS request cost attribution across services; mesh provides per-service byte/request counts → `signals/cost.md`, `layers/mesh.md` | PASS mTLS peer identity in access log provides cross-application accountability → `signals/audit.md`, `layers/mesh.md` | PASS baggage trust boundary enforced at mesh ingress gateway; strip or validate external baggage → `signals/privacy.md`, `boundaries/cross-application.md`, `resources/standards.md §W3C Baggage` |
|
|
112
|
+
| slo | PASS mesh request rate and error rate are primary SLI sources for latency and availability SLOs → `layers/mesh.md`, `boundaries/slo.md`, `signals/metrics.md §SLI` | PARTIAL Envoy access logs as burn-rate event source; log-based SLI possible but metric-based preferred → `signals/logs.md`, `boundaries/slo.md` | PARTIAL trace sampling must be configured to retain error traces for SLO error-budget forensics; not a direct SLO input → `signals/traces.md`, `boundaries/slo.md` | N/A; profiles do not feed SLO computation | N/A; cost is a separate FinOps concern, not an SLO boundary input | PARTIAL SLO audit trail: record burn-rate threshold breach events as audit log entries → `signals/audit.md`, `boundaries/slo.md` | N/A |
|
|
113
|
+
| release | PASS mesh request split metrics for canary traffic (Flagger/Argo Rollouts proxy rules) → `layers/mesh.md`, `boundaries/release.md`, `signals/metrics.md` | PASS deployment event injected as Envoy log entry with `service.version` tag → `layers/mesh.md`, `signals/logs.md`, `boundaries/release.md` | PARTIAL canary proxy rules at mesh layer route a percentage of traces to new version; trace header carries `service.version` → `layers/mesh.md`, `boundaries/release.md`, `signals/traces.md` | N/A | PARTIAL canary cost delta visible via per-version request counts in mesh telemetry → `signals/cost.md`, `boundaries/release.md` | PASS release event audit: mesh records version-tagged traffic split events → `signals/audit.md`, `boundaries/release.md` | N/A |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### Layer: L7-application
|
|
118
|
+
|
|
119
|
+
L7 is the application layer: HTTP/gRPC, RUM (web + mobile), crash analytics, and messaging. This is the primary signal domain for this skill. All seven signals are meaningful here. Multi-tenant instrumentation is richest at L7 because application code has full access to user context, tenant identifiers, and business semantics.
|
|
120
|
+
|
|
121
|
+
| Boundary \ Signal | metrics | logs | traces | profiles | cost | audit | privacy |
|
|
122
|
+
|---|---|---|---|---|---|---|---|
|
|
123
|
+
| multi-tenant | PASS per-tenant RED + custom business metrics tagged with `tenant.id`; histogram by tenant tier → `signals/metrics.md §tenant`, `boundaries/multi-tenant.md`, `layers/L7-application/web-rum.md` | PASS structured log stream with `tenant.id` on every record; tenant log routing via OTel Collector `routing_connector` → `signals/logs.md`, `boundaries/multi-tenant.md` | PASS W3C Baggage `tenant.id` propagated on every span; trace exported per-tenant collector pipeline if residency required → `signals/traces.md`, `boundaries/multi-tenant.md`, `resources/standards.md §W3C Baggage` | PASS per-tenant continuous profiling with Parca/Pyroscope; label by `tenant.id` for flame graph isolation → `signals/profiles.md`, `boundaries/multi-tenant.md` | PASS request-level cost attribution by tenant; feed OpenCost unit economics model → `signals/cost.md §unit economics`, `boundaries/multi-tenant.md` | PASS per-tenant audit event stream; WORM storage per tenant for SOC2 evidence → `signals/audit.md`, `boundaries/multi-tenant.md` | PASS tenant-scoped PII redaction; per-tenant privacy config for GDPR right-to-erasure → `signals/privacy.md`, `boundaries/multi-tenant.md` |
|
|
124
|
+
| cross-application | PASS inter-service request rate and latency histograms; use `service.name` + `service.peer.name` labels → `signals/metrics.md`, `boundaries/cross-application.md` | PASS correlation log: `trace_id` + `span_id` on every log record enables log-trace join across applications → `signals/logs.md`, `boundaries/cross-application.md` | PASS primary trace origin; W3C Trace Context `traceparent` on all outbound calls; DDD namespace baggage for bounded-context attribution → `signals/traces.md`, `boundaries/cross-application.md`, `resources/standards.md §W3C Trace Context` | PASS application-level profiling showing cross-service call overhead; correlate with traces via `trace_id` label → `signals/profiles.md`, `boundaries/cross-application.md` | PASS request cost attribution across services; per-service unit cost model → `signals/cost.md`, `boundaries/cross-application.md` | PASS cross-application audit events carry caller identity and `trace_id` for accountability chain → `signals/audit.md`, `boundaries/cross-application.md` | PASS baggage trust boundary at API gateway; validate or strip PII-bearing baggage from external callers → `signals/privacy.md`, `boundaries/cross-application.md`, `resources/standards.md §W3C Baggage` |
|
|
125
|
+
| slo | PASS SLI metric computation (availability, latency p99, error rate); SLO targets defined in OpenSLO YAML → `signals/metrics.md §SLI`, `boundaries/slo.md`, `resources/observability-as-code.md` | PARTIAL log-based SLI possible (error log count / total); valid for non-metrics-instrumented services but metric-based SLI preferred → `signals/logs.md`, `boundaries/slo.md` | PARTIAL critical path trace sampling for SLO forensics; tail-sampler keeps error traces within error budget window → `signals/traces.md`, `boundaries/slo.md`, `transport/sampling-recipes.md` | N/A; profiling does not feed SLO computation directly | N/A; cost SLO is a FinOps budget concern, not an error-budget SLO | PARTIAL SLO breach audit record: persist burn-rate threshold crossing as immutable audit event → `signals/audit.md`, `boundaries/slo.md` | N/A |
|
|
126
|
+
| release | PASS release marker metric event; `service.version` label on all metrics for before/after comparison → `signals/metrics.md`, `boundaries/release.md`, `resources/observability-as-code.md` | PASS deployment event as structured log record; deployment SHA, version, and rollout strategy logged → `signals/logs.md`, `boundaries/release.md` | PASS `service.version` attribute on all spans; canary trace routing by version tag for A/B error comparison → `signals/traces.md`, `boundaries/release.md` | PARTIAL pre/post-release profile comparison for performance regression detection; Parca/Pyroscope diff view → `signals/profiles.md`, `boundaries/release.md` | PARTIAL release cost delta: compare per-request cost across canary vs stable version → `signals/cost.md`, `boundaries/release.md` | PASS release audit event: immutable record of who deployed what version when → `signals/audit.md`, `boundaries/release.md` | N/A |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 5. Caveats
|
|
131
|
+
|
|
132
|
+
Rationale for the rarer N/A / PARTIAL cells. Each entry justifies the marker and points to the authoritative file.
|
|
133
|
+
|
|
134
|
+
- **C1. L3 × {SLO, release}**: N/A. SLO and release are L7 constructs (OpenSLO YAML, canary markers); L3 IP flow feeds infra health, not application error budgets. An L3 event (BGP leak, PMTUD black hole) that causes an SLO burn surfaces as an L7 error spike first; investigate via `resources/incident-forensics.md` 6-dim localization, not via L3 SLO policy. See `boundaries/slo.md`, `layers/L3-network.md`.
|
|
135
|
+
- **C2. L4 × {SLO, release}**: same rationale as C1. TCP connection success rate can serve as a fallback SLI when L7 instrumentation is absent, but it is not recommended. See `boundaries/slo.md §fallback SLI sources`.
|
|
136
|
+
- **C3. {L3, L4} × profiles**: profiling (Parca, Pyroscope, OTEP 0239) is process-level; L3 has no equivalent artifact. L4 × profiles PASS reflects eBPF kernel-socket and off-CPU wait measurements; the closest meaningful artifact; attributed to `layers/L4-transport.md §eBPF`.
|
|
137
|
+
- **C4. {L3, L4} × traces (PARTIAL)**: W3C Trace Context lives in HTTP/gRPC headers, not IP/TCP. The PARTIAL reflects a correlation technique (log socket 5-tuple alongside trace ID) rather than native propagation. Native propagation begins at mesh or L7. See `resources/standards.md §W3C Trace Context`.
|
|
138
|
+
- **C5. mesh × profiles (PARTIAL)**: sidecar proxies (Envoy, Linkerd-proxy) are separate processes; their CPU overhead is visible via eBPF on the sidecar, but that is an L4 artifact, not a mesh-native profiling signal. Mesh exposes no profiling API. See `signals/profiles.md`, `layers/L4-transport.md §eBPF`.
|
|
139
|
+
- **C6. {L3, L4} × cost (PARTIAL)**: byte volume is a cost proxy sufficient for cloud egress billing but insufficient for unit economics, which requires L7 per-request attribution. See `signals/cost.md §egress attribution`.
|
|
140
|
+
- **C7. {L3, L4} × privacy (PARTIAL)**: IP addresses are personal data (GDPR Art. 4(1), PIPA equivalent). VPC flow and TCP connection logs are operationally required but must be masked, hashed, or pseudonymized before long-term retention. Masking technique (prefix truncation, HMAC+salt, pseudonymization) is in `signals/privacy.md §IP addresses`.
|
|
141
|
+
- **C8. {L3, L4} × {SLO, release} × audit**; audit requires an identity-bearing, time-bound subject; IP/TCP-layer events carry no such subject tied to an SLO policy or deployment action. Audit at SLO/release boundaries is always L7-originated. See `signals/audit.md`.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 6. Cell Count Verification
|
|
146
|
+
|
|
147
|
+
| Layer | Boundaries | Signals | Cells |
|
|
148
|
+
|-------|-----------|---------|-------|
|
|
149
|
+
| L3-network | 4 | 7 | 28 |
|
|
150
|
+
| L4-transport | 4 | 7 | 28 |
|
|
151
|
+
| mesh | 4 | 7 | 28 |
|
|
152
|
+
| L7-application | 4 | 7 | 28 |
|
|
153
|
+
| **Total** | | | **112** |
|
|
154
|
+
|
|
155
|
+
All 112 cells are populated. No cell is blank.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 7. Cross-references
|
|
160
|
+
|
|
161
|
+
All files referenced in this matrix belong to the `oma-observability` skill tree.
|
|
162
|
+
|
|
163
|
+
| Category | Files |
|
|
164
|
+
|----------|-------|
|
|
165
|
+
| Layers | `layers/L3-network.md`, `layers/L4-transport.md`, `layers/mesh.md`, `layers/L7-application/web-rum.md`, `layers/L7-application/mobile-rum.md`, `layers/L7-application/crash-analytics.md` |
|
|
166
|
+
| Boundaries | `boundaries/multi-tenant.md`, `boundaries/cross-application.md`, `boundaries/slo.md`, `boundaries/release.md` |
|
|
167
|
+
| Signals | `signals/metrics.md`, `signals/logs.md`, `signals/traces.md`, `signals/profiles.md`, `signals/cost.md`, `signals/audit.md`, `signals/privacy.md` |
|
|
168
|
+
| Transport | `transport/sampling-recipes.md`, `transport/collector-topology.md` |
|
|
169
|
+
| Resources | `resources/standards.md`, `resources/incident-forensics.md`, `resources/observability-as-code.md`, `resources/meta-observability.md` |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 8. Coverage updates
|
|
174
|
+
|
|
175
|
+
- **On semconv promotion** (Development → RC → Stable): re-evaluate PARTIAL cells that cite stability as a caveat; promote to PASS if the semconv group is now stable.
|
|
176
|
+
- **On new layer or boundary addition**: add the corresponding table section and update all cross-references. Signal columns change only with a taxonomy revision.
|
|
177
|
+
- **On N/A re-evaluation**: add a Caveat entry (Section 5) explaining why a previously N/A combination is now meaningful before changing the cell marker.
|