oh-my-agent-commandcode 0.0.0-stage → 20.38.3
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,308 @@
|
|
|
1
|
+
---
|
|
2
|
+
otel_spec: "1.x (stable API/SDK)"
|
|
3
|
+
tools:
|
|
4
|
+
- "OTel Operator: v1beta1"
|
|
5
|
+
- "Fluent Bit: CNCF Graduated"
|
|
6
|
+
- "OTel Collector: v0.122.x"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Collector Topology: Deployment Modes and Kubernetes Patterns
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. Four Deployment Modes (OTel Operator `Spec.Mode`)
|
|
15
|
+
|
|
16
|
+
The OpenTelemetry Operator manages collectors via the `OpenTelemetryCollector` CRD at **v1beta1** (beta stability as of 2025). The `spec.mode` field controls the deployment strategy.
|
|
17
|
+
|
|
18
|
+
| Mode | Kubernetes Kind | Replicas | Typical Use Case |
|
|
19
|
+
|------|----------------|----------|-----------------|
|
|
20
|
+
| `deployment` | Deployment | 1..N | Gateway, tail sampling, aggregation |
|
|
21
|
+
| `daemonset` | DaemonSet | 1 per node | Node-level metrics, log collection |
|
|
22
|
+
| `statefulset` | StatefulSet | 1..N | Ordered, persistent-volume workloads |
|
|
23
|
+
| `sidecar` | injected container | 1 per pod | Serverless (Fargate, Cloud Run), isolation |
|
|
24
|
+
|
|
25
|
+
**`Deployment` (default; Gateway use case)**
|
|
26
|
+
Runs as a standard Kubernetes Deployment. Suitable for centralized processing: batching, tail sampling, exporters to backend. Scales horizontally but cannot access node-local resources (e.g., `/var/log`, `/proc`). Source: [OTel Collector Deployment docs](https://opentelemetry.io/docs/collector/deployment/).
|
|
27
|
+
|
|
28
|
+
**`DaemonSet` (Agent use case; one per node)**
|
|
29
|
+
Guarantees exactly one collector pod per node. Required for receivers that must run on the host: `hostmetrics`, `filelog`, `kubeletstats`. Accesses node filesystem and network namespaces directly.
|
|
30
|
+
|
|
31
|
+
**`StatefulSet` (specialized)**
|
|
32
|
+
Useful when collectors need stable network identity or persistent volumes (e.g., Write-Ahead Log for durability). Uncommon; prefer Deployment unless stable pod identity is mandatory.
|
|
33
|
+
|
|
34
|
+
**`Sidecar` (one per pod)**
|
|
35
|
+
Injected by the operator via pod annotation (`sidecar.opentelemetry.io/inject: "true"`). Runs in the same pod as the application. See Section 3 for when sidecar is appropriate.
|
|
36
|
+
|
|
37
|
+
> CRD stability note: `OpenTelemetryCollector` v1beta1 is beta; `Instrumentation` CRD is also v1beta1. GA graduation is tracked in [opentelemetry-operator](https://github.com/open-telemetry/opentelemetry-operator) releases.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. 2026 Recommended Pattern: Two-Tier Hybrid
|
|
42
|
+
|
|
43
|
+
The standard production pattern for Kubernetes clusters is a two-tier architecture separating node-level collection from centralized processing.
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
App Pod(s)
|
|
47
|
+
│ OTLP gRPC/HTTP
|
|
48
|
+
▼
|
|
49
|
+
DaemonSet Agent (1 per node)
|
|
50
|
+
- hostmetrics / filelog / kubeletstats receivers
|
|
51
|
+
- memory_limiter and k8sattributes enrichment
|
|
52
|
+
- traces: loadbalancing exporter, routing_key: traceID
|
|
53
|
+
│ consistent traceID hash to individual gateway replicas
|
|
54
|
+
│ metrics/logs may use their separately configured normal load balancing
|
|
55
|
+
▼
|
|
56
|
+
Deployment Gateway (N tail-sampler replicas, per-pod discovery)
|
|
57
|
+
- memory_limiter → tail_sampling → batch
|
|
58
|
+
- backend exporter
|
|
59
|
+
│ OTLP / vendor protocol
|
|
60
|
+
▼
|
|
61
|
+
Observability Backend (e.g., Grafana Cloud, Jaeger, Prometheus)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Do not send traces through an ordinary ClusterIP/load balancer before independent
|
|
65
|
+
tail samplers. It can split one trace across replicas. The traceID-aware exporter
|
|
66
|
+
must be upstream of those samplers; an exporter after sampling cannot recover
|
|
67
|
+
trace completeness. Resolve individual sampler replicas (for example via a
|
|
68
|
+
headless Service), and validate late-span behavior during membership changes.
|
|
69
|
+
|
|
70
|
+
**Agent layer responsibilities** (must be per-host):
|
|
71
|
+
- `hostmetrics` receiver: CPU, memory, disk, network from `/proc`, `/sys`
|
|
72
|
+
- `filelog` receiver: container log files from `/var/log/pods/`
|
|
73
|
+
- `k8sattributes` processor: enriches spans/metrics with pod, namespace, node labels
|
|
74
|
+
- `kubeletstats` receiver: pod/container resource metrics via Kubelet API
|
|
75
|
+
|
|
76
|
+
**Gateway layer responsibilities**:
|
|
77
|
+
- `batch` processor: reduce export RPCs, improve compression
|
|
78
|
+
- `tail_sampling` processor: evaluate complete traces before sampling decision
|
|
79
|
+
- Backend exporter: send the gateway's already-sampled traces to the selected backend. Put `loadbalancing` upstream of any further independent tail-sampler tier, not after the only sampler.
|
|
80
|
+
- `memory_limiter` processor: prevent OOM under backpressure
|
|
81
|
+
|
|
82
|
+
Example agent `OpenTelemetryCollector` manifest snippet for host metrics/logs only (traces additionally require an OTLP receiver and the traceID-aware `loadbalancing` exporter described above and in §6):
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
apiVersion: opentelemetry.io/v1beta1
|
|
86
|
+
kind: OpenTelemetryCollector
|
|
87
|
+
metadata:
|
|
88
|
+
name: otel-agent
|
|
89
|
+
spec:
|
|
90
|
+
mode: daemonset
|
|
91
|
+
config:
|
|
92
|
+
receivers:
|
|
93
|
+
hostmetrics:
|
|
94
|
+
collection_interval: 30s
|
|
95
|
+
scrapers:
|
|
96
|
+
cpu: {}
|
|
97
|
+
memory: {}
|
|
98
|
+
filesystem: {}
|
|
99
|
+
filelog:
|
|
100
|
+
include: [/var/log/pods/*/*/*.log]
|
|
101
|
+
include_file_path: true
|
|
102
|
+
kubeletstats:
|
|
103
|
+
collection_interval: 20s
|
|
104
|
+
auth_type: serviceAccount
|
|
105
|
+
processors:
|
|
106
|
+
k8sattributes:
|
|
107
|
+
passthrough: false
|
|
108
|
+
extract:
|
|
109
|
+
metadata: [k8s.pod.name, k8s.namespace.name, k8s.node.name]
|
|
110
|
+
memory_limiter:
|
|
111
|
+
limit_mib: 400
|
|
112
|
+
check_interval: 1s
|
|
113
|
+
exporters:
|
|
114
|
+
otlp:
|
|
115
|
+
endpoint: otel-gateway:4317
|
|
116
|
+
service:
|
|
117
|
+
pipelines:
|
|
118
|
+
metrics:
|
|
119
|
+
receivers: [hostmetrics, kubeletstats]
|
|
120
|
+
processors: [memory_limiter, k8sattributes]
|
|
121
|
+
exporters: [otlp]
|
|
122
|
+
logs:
|
|
123
|
+
receivers: [filelog]
|
|
124
|
+
processors: [memory_limiter, k8sattributes]
|
|
125
|
+
exporters: [otlp]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 3. When to Use Sidecar (NOT Default)
|
|
131
|
+
|
|
132
|
+
Sidecar mode is **not recommended for standard Kubernetes nodes**. Use it only when DaemonSet is unavailable or per-pod isolation is a hard requirement.
|
|
133
|
+
|
|
134
|
+
| Condition | Use Sidecar? | Reason |
|
|
135
|
+
|-----------|-------------|--------|
|
|
136
|
+
| AWS Fargate | Yes | DaemonSet not supported on Fargate nodes |
|
|
137
|
+
| GCP Cloud Run | Yes | No DaemonSet concept; sidecar containers supported |
|
|
138
|
+
| Strong per-pod isolation | Yes | Compliance or security boundary per workload |
|
|
139
|
+
| Multi-tenant pod separation | Yes | Each tenant's data must not cross pod boundaries |
|
|
140
|
+
| Standard Kubernetes nodes | No | N collectors for N pods; cost scales linearly |
|
|
141
|
+
| Tail sampling requirement | No | Trace spans split across pods; sampler sees incomplete traces |
|
|
142
|
+
|
|
143
|
+
> Warning: Enabling sidecar injection on standard Kubernetes creates one collector instance per application pod. For a 100-pod deployment, this is 100 collectors. CPU and memory costs multiply accordingly. Always prefer DaemonSet on regular nodes.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 4. Collector Component Placement Reference
|
|
148
|
+
|
|
149
|
+
Source: [OTel Kubernetes Collector Components](https://opentelemetry.io/docs/platforms/kubernetes/collector/components/)
|
|
150
|
+
|
|
151
|
+
| Receiver / Processor | Preferred Mode | Notes |
|
|
152
|
+
|---------------------|---------------|-------|
|
|
153
|
+
| `kubeletstats` receiver | DaemonSet | Requires access to Kubelet API per node |
|
|
154
|
+
| `filelog` receiver | DaemonSet | Reads `/var/log/pods/` on each node |
|
|
155
|
+
| `hostmetrics` receiver | DaemonSet | Reads `/proc`, `/sys`; host-only access |
|
|
156
|
+
| `k8sattributes` processor | DaemonSet or Gateway | On agent: enriches at source; on gateway: enriches late |
|
|
157
|
+
| `prometheus` receiver | Deployment (with caveats) | No automatic horizontal scaling for scrape target distribution; use sharding manually |
|
|
158
|
+
| `tail_sampling` processor | Deployment (Gateway) | Requires complete trace; combine with `loadbalancing` exporter |
|
|
159
|
+
| `batch` processor | Both | Tuned independently per tier |
|
|
160
|
+
| `memory_limiter` processor | Both (mandatory) | Always include; prevents OOM under traffic spikes |
|
|
161
|
+
|
|
162
|
+
> Prometheus scraping caveat: When multiple gateway replicas each run `prometheus` receiver, scrape targets are duplicated across replicas causing duplicate metrics. Use target allocator (`spec.targetAllocator`) provided by the OTel Operator to distribute scrape targets across replicas.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 5. Container Runtime Observability Integration
|
|
167
|
+
|
|
168
|
+
**containerd and CRI-O**
|
|
169
|
+
|
|
170
|
+
Both runtimes expose metrics and events relevant to infrastructure observability:
|
|
171
|
+
- Image pull duration and failure rates
|
|
172
|
+
- Container start/stop lifecycle events
|
|
173
|
+
- Runtime panic or OOM kill events
|
|
174
|
+
|
|
175
|
+
Integration approaches:
|
|
176
|
+
- `hostmetrics` receiver with `process` scraper captures container process CPU/memory
|
|
177
|
+
- containerd exposes metrics via its built-in Prometheus endpoint (default `:1338/metrics`)
|
|
178
|
+
- CRI-O exposes metrics via `:9537/metrics`; scrape with `prometheus` receiver on the DaemonSet agent
|
|
179
|
+
|
|
180
|
+
**cAdvisor integration**
|
|
181
|
+
|
|
182
|
+
cAdvisor runs as part of the Kubelet on each node and exposes per-container CPU, memory, filesystem, and network metrics.
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
# Scrape cAdvisor via kubeletstats receiver (preferred)
|
|
186
|
+
receivers:
|
|
187
|
+
kubeletstats:
|
|
188
|
+
collection_interval: 20s
|
|
189
|
+
auth_type: serviceAccount
|
|
190
|
+
endpoint: "https://${env:K8S_NODE_IP}:10250"
|
|
191
|
+
insecure_skip_verify: true
|
|
192
|
+
metric_groups: [container, pod, node]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Pod and container attribute enrichment**
|
|
196
|
+
|
|
197
|
+
The `k8sattributes` processor queries the Kubernetes API to attach resource attributes to all telemetry:
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
processors:
|
|
201
|
+
k8sattributes:
|
|
202
|
+
auth_type: serviceAccount
|
|
203
|
+
passthrough: false
|
|
204
|
+
extract:
|
|
205
|
+
metadata:
|
|
206
|
+
- k8s.pod.name
|
|
207
|
+
- k8s.pod.uid
|
|
208
|
+
- k8s.deployment.name
|
|
209
|
+
- k8s.namespace.name
|
|
210
|
+
- k8s.node.name
|
|
211
|
+
- k8s.container.name
|
|
212
|
+
labels:
|
|
213
|
+
- tag_name: app.label.version
|
|
214
|
+
key: app.kubernetes.io/version
|
|
215
|
+
from: pod
|
|
216
|
+
pod_association:
|
|
217
|
+
- sources:
|
|
218
|
+
- from: resource_attribute
|
|
219
|
+
name: k8s.pod.ip
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 6. High-Throughput Gateway Scaling
|
|
225
|
+
|
|
226
|
+
For high-volume environments, the gateway tier must scale to avoid becoming a bottleneck.
|
|
227
|
+
|
|
228
|
+
**Horizontal scaling with consistent hashing**
|
|
229
|
+
|
|
230
|
+
Tail sampling requires that all spans for a given `trace_id` reach the same collector replica. Use `loadbalancing` exporter in a first-tier gateway to route traces consistently:
|
|
231
|
+
|
|
232
|
+
```yaml
|
|
233
|
+
exporters:
|
|
234
|
+
loadbalancing:
|
|
235
|
+
protocol:
|
|
236
|
+
otlp:
|
|
237
|
+
tls:
|
|
238
|
+
insecure: true
|
|
239
|
+
resolver:
|
|
240
|
+
k8s:
|
|
241
|
+
service: otel-tail-sampler-headless
|
|
242
|
+
ports: [4317]
|
|
243
|
+
routing_key: traceID # consistent hash on trace_id
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Two-tier gateway pattern for tail sampling**
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
DaemonSet Agents
|
|
250
|
+
│
|
|
251
|
+
▼
|
|
252
|
+
Gateway Tier-1 (Deployment, 3+ replicas)
|
|
253
|
+
loadbalancing exporter → consistent hash by trace_id
|
|
254
|
+
│
|
|
255
|
+
▼
|
|
256
|
+
Gateway Tier-2 (Deployment, 3+ replicas)
|
|
257
|
+
tail_sampling processor
|
|
258
|
+
batch + memory_limiter
|
|
259
|
+
│
|
|
260
|
+
▼
|
|
261
|
+
Backend
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Tier-1 only routes; Tier-2 owns sampling decisions. This prevents trace fragmentation across replicas.
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## 7. Federated / Multi-Cluster
|
|
269
|
+
|
|
270
|
+
For multi-cluster and multi-region deployments:
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
Cluster A (Region US) Cluster B (Region EU)
|
|
274
|
+
DaemonSet Agents DaemonSet Agents
|
|
275
|
+
│ │
|
|
276
|
+
Regional Gateway Regional Gateway
|
|
277
|
+
(edge aggregation) (edge aggregation)
|
|
278
|
+
│ │
|
|
279
|
+
└──────────┬────────────────────┘
|
|
280
|
+
▼
|
|
281
|
+
Central Gateway (single region or multi-region active-active)
|
|
282
|
+
│
|
|
283
|
+
Backend
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Key considerations:
|
|
287
|
+
- **Cross-cloud egress cost**: Exporting telemetry across cloud providers or regions incurs data transfer charges. Evaluate sampling aggressively at the regional edge to reduce egress volume before forwarding to the central gateway.
|
|
288
|
+
- **Network latency**: Tail sampling decision wait (typically 30s) must account for cross-region span arrival delay. Increase `decision_wait` accordingly.
|
|
289
|
+
- **Authentication**: Use workload identity / OIDC per cluster; avoid static credentials for cross-cluster OTLP export.
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## 8. Anti-Patterns
|
|
294
|
+
|
|
295
|
+
| Anti-Pattern | Why It Fails | Correct Approach |
|
|
296
|
+
|-------------|-------------|-----------------|
|
|
297
|
+
| Sidecar collectors on standard Kubernetes nodes | One collector per pod; CPU/memory cost scales with pod count | Use DaemonSet agent per node |
|
|
298
|
+
| Tail sampling in sidecar | Sidecar sees only spans from its pod; trace is incomplete across services | Run tail_sampling in gateway tier only |
|
|
299
|
+
| Single gateway replica | No high availability; single point of failure under load | Minimum 2-3 replicas; use PodDisruptionBudget |
|
|
300
|
+
| Missing `memory_limiter` processor | OOM kill under traffic spikes or backpressure from backend | Always add memory_limiter as first processor in every pipeline |
|
|
301
|
+
| Prometheus receiver on multiple replicas without target allocator | Duplicate scrapes = duplicate metrics in backend | Use OTel Operator target allocator for Prometheus receiver |
|
|
302
|
+
| Skipping `loadbalancing` exporter before tail sampler | Spans for same trace land on different replicas; sampling decision is wrong | Always pair tail_sampling with loadbalancing exporter upstream |
|
|
303
|
+
|
|
304
|
+
## References
|
|
305
|
+
|
|
306
|
+
- https://opentelemetry.io/docs/platforms/kubernetes/collector/components/
|
|
307
|
+
- https://github.com/open-telemetry/opentelemetry-operator
|
|
308
|
+
- https://opentelemetry.io/docs/collector/deployment/
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
---
|
|
2
|
+
otel_spec: "1.x (stable API/SDK)"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# OTLP Transport: gRPC vs HTTP Decision Guide
|
|
6
|
+
|
|
7
|
+
## 1. OTLP Basics
|
|
8
|
+
|
|
9
|
+
The OpenTelemetry Protocol (OTLP) uses a single Protobuf schema for traces, metrics, and logs.
|
|
10
|
+
It defines three wire formats over two transports:
|
|
11
|
+
|
|
12
|
+
| Transport | Content-Type | Port (default) |
|
|
13
|
+
|----------------|------------------------------------|----------------|
|
|
14
|
+
| gRPC | `application/grpc` | **4317** |
|
|
15
|
+
| HTTP/Protobuf | `application/x-protobuf` | **4318** |
|
|
16
|
+
| HTTP/JSON | `application/json` | **4318** |
|
|
17
|
+
|
|
18
|
+
All three formats carry identical semantic data. Transport choice is an operational decision.
|
|
19
|
+
|
|
20
|
+
Sources:
|
|
21
|
+
- OTLP specification: opentelemetry.io/docs/specs/otlp/
|
|
22
|
+
- Collector configuration: opentelemetry.io/docs/collector/configuration/
|
|
23
|
+
- OTLP receiver README: github.com/open-telemetry/opentelemetry-collector (receiver/otlpreceiver)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 2. Decision Tree
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Is the sender a browser or a runtime without gRPC support?
|
|
31
|
+
YES → HTTP/protobuf (port 4318) — smallest payload, wide compatibility
|
|
32
|
+
HTTP/JSON if debugging or if protobuf encoding unavailable
|
|
33
|
+
|
|
34
|
+
NO → Does a corporate proxy or layer-7 firewall sit between sender and collector?
|
|
35
|
+
YES → HTTP (port 4318); proxies handle HTTP/1.1 and HTTP/2 cleartext reliably
|
|
36
|
+
Confirm with: curl -v http://<collector>:4318/v1/traces
|
|
37
|
+
|
|
38
|
+
NO → Is traffic internal to a Kubernetes cluster (pod-to-pod)?
|
|
39
|
+
YES → gRPC (port 4317): multiplexed streams, lower per-RPC overhead,
|
|
40
|
+
native health checking via grpc_health_probe
|
|
41
|
+
Use headless Service or client-side LB (see section 6)
|
|
42
|
+
|
|
43
|
+
NO → Is volume high (>50 K spans/sec) or latency critical?
|
|
44
|
+
YES → gRPC + gzip compression
|
|
45
|
+
NO → Either transport works; prefer gRPC for consistency
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
| Axis | Recommended transport | Reason |
|
|
49
|
+
|---------------------------|-----------------------|-------------------------------------------------|
|
|
50
|
+
| Browser / Electron | HTTP/JSON or HTTP/protobuf | No gRPC-Web support in standard fetch API |
|
|
51
|
+
| k8s pod-to-pod | gRPC 4317 | Multiplexing, streaming, native health check |
|
|
52
|
+
| Corporate proxy / firewall| HTTP 4318 | Proxies often terminate gRPC streams early |
|
|
53
|
+
| VPN with deep inspection | HTTP 4318 | gRPC ALPN negotiation blocked by some DPI |
|
|
54
|
+
| High-volume batch | gRPC + gzip | Header compression (HPACK), stream reuse |
|
|
55
|
+
| IoT / constrained device | HTTP/JSON | Simpler implementation, no Protobuf required |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 3. Port Conventions
|
|
60
|
+
|
|
61
|
+
| Port | Protocol | Notes |
|
|
62
|
+
|------|----------|--------------------------------------------------------|
|
|
63
|
+
| 4317 | gRPC | IANA-registered; TLS optional (recommended in prod) |
|
|
64
|
+
| 4318 | HTTP | IANA-registered; paths `/v1/traces`, `/v1/metrics`, `/v1/logs` |
|
|
65
|
+
|
|
66
|
+
Do not expose either port to the public internet without TLS and authentication.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 4. Server-Side Tuning (Collector Receiver)
|
|
71
|
+
|
|
72
|
+
### 4.1 gRPC Receiver
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
receivers:
|
|
76
|
+
otlp:
|
|
77
|
+
protocols:
|
|
78
|
+
grpc:
|
|
79
|
+
endpoint: "0.0.0.0:4317"
|
|
80
|
+
max_recv_msg_size_mib: 16 # default 4 MiB; raise for large trace batches
|
|
81
|
+
max_concurrent_streams: 100 # per-connection stream limit
|
|
82
|
+
read_buffer_size: 524288 # 512 KiB per stream
|
|
83
|
+
keepalive:
|
|
84
|
+
server_parameters:
|
|
85
|
+
time: 30s # ping interval when idle
|
|
86
|
+
timeout: 5s # wait before closing unresponsive connection
|
|
87
|
+
enforcement_policy:
|
|
88
|
+
min_time: 10s # reject client pings faster than this
|
|
89
|
+
permit_without_stream: true
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 4.2 HTTP Receiver
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
receivers:
|
|
96
|
+
otlp:
|
|
97
|
+
protocols:
|
|
98
|
+
http:
|
|
99
|
+
endpoint: "0.0.0.0:4318"
|
|
100
|
+
max_request_body_size: 16777216 # 16 MiB; matches gRPC max_recv_msg_size_mib
|
|
101
|
+
include_metadata: true # forward request headers as resource attributes
|
|
102
|
+
cors:
|
|
103
|
+
allowed_origins: ["https://app.example.com"]
|
|
104
|
+
allowed_headers: ["*"]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 4.3 Memory Limiter (Required)
|
|
108
|
+
|
|
109
|
+
Place `memory_limiter` first in every pipeline; it back-pressures receivers before OOM.
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
processors:
|
|
113
|
+
memory_limiter:
|
|
114
|
+
check_interval: 1s
|
|
115
|
+
limit_mib: 512
|
|
116
|
+
spike_limit_mib: 128 # refuse new data when usage > limit_mib - spike_limit_mib
|
|
117
|
+
|
|
118
|
+
batch:
|
|
119
|
+
send_batch_size: 8192
|
|
120
|
+
send_batch_max_size: 16384
|
|
121
|
+
timeout: 5s
|
|
122
|
+
|
|
123
|
+
service:
|
|
124
|
+
pipelines:
|
|
125
|
+
traces:
|
|
126
|
+
receivers: [otlp]
|
|
127
|
+
processors: [memory_limiter, batch]
|
|
128
|
+
exporters: [otlp/tier2]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 5. Client-Side Tuning (Exporter)
|
|
134
|
+
|
|
135
|
+
### 5.1 Compression
|
|
136
|
+
|
|
137
|
+
gzip is the default and should remain enabled (typically 70–85% payload reduction).
|
|
138
|
+
Do not disable it unless your TLS offload device double-compresses.
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
exporters:
|
|
142
|
+
otlp:
|
|
143
|
+
endpoint: "collector:4317"
|
|
144
|
+
compression: gzip # gzip | zstd | none
|
|
145
|
+
tls:
|
|
146
|
+
insecure: false
|
|
147
|
+
ca_file: /etc/ssl/certs/ca.crt
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 5.2 Sending Queue and Retry
|
|
151
|
+
|
|
152
|
+
```yaml
|
|
153
|
+
exporters:
|
|
154
|
+
otlp:
|
|
155
|
+
endpoint: "collector:4317"
|
|
156
|
+
compression: gzip
|
|
157
|
+
sending_queue:
|
|
158
|
+
enabled: true
|
|
159
|
+
num_consumers: 10
|
|
160
|
+
queue_size: 5000
|
|
161
|
+
storage: file_storage/otlp_queue # persist queue to disk across restarts
|
|
162
|
+
retry_on_failure:
|
|
163
|
+
enabled: true
|
|
164
|
+
initial_interval: 5s
|
|
165
|
+
max_interval: 30s
|
|
166
|
+
max_elapsed_time: 300s # give up after 5 min total
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**OTLP retry semantics** (opentelemetry.io/docs/specs/otlp/): `RESOURCE_EXHAUSTED` returns
|
|
170
|
+
`RetryInfo.retry_delay`; honor it. `UNAVAILABLE` → exponential backoff. `INVALID_ARGUMENT` →
|
|
171
|
+
permanent failure, do not retry.
|
|
172
|
+
|
|
173
|
+
### 5.3 Persistent Queue Extension
|
|
174
|
+
|
|
175
|
+
```yaml
|
|
176
|
+
extensions:
|
|
177
|
+
file_storage/otlp_queue:
|
|
178
|
+
directory: /var/otel/queue
|
|
179
|
+
timeout: 10s
|
|
180
|
+
compaction:
|
|
181
|
+
on_start: true
|
|
182
|
+
rebound_needed_threshold_mib: 100
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 6. Load Balancing
|
|
188
|
+
|
|
189
|
+
gRPC uses long-lived HTTP/2 connections, defeating L4 round-robin. Use client-side LB.
|
|
190
|
+
|
|
191
|
+
**Two-tier pattern** (recommended for tail sampling):
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
[SDK exporters]
|
|
195
|
+
| gRPC 4317
|
|
196
|
+
v
|
|
197
|
+
[Tier-1: loadbalancingexporter] ← routes by traceID for consistent routing
|
|
198
|
+
| gRPC 4317
|
|
199
|
+
v
|
|
200
|
+
[Tier-2: tailsamplingprocessor] ← sees full trace before sampling decision
|
|
201
|
+
| OTLP
|
|
202
|
+
v
|
|
203
|
+
[Backend / storage]
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```yaml
|
|
207
|
+
exporters:
|
|
208
|
+
loadbalancing:
|
|
209
|
+
protocol:
|
|
210
|
+
otlp:
|
|
211
|
+
tls:
|
|
212
|
+
insecure: false
|
|
213
|
+
timeout: 5s
|
|
214
|
+
resolver:
|
|
215
|
+
dns:
|
|
216
|
+
hostname: otel-collector-tier2-headless.monitoring.svc.cluster.local
|
|
217
|
+
port: 4317
|
|
218
|
+
interval: 5s
|
|
219
|
+
timeout: 1s
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
For Kubernetes: use a headless Service (`clusterIP: None`) for Tier-2. The `loadbalancingexporter`
|
|
223
|
+
resolves DNS and maintains one gRPC connection per pod.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 7. Security: TLS and mTLS
|
|
228
|
+
|
|
229
|
+
### Collector Receiver (server-side)
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
receivers:
|
|
233
|
+
otlp:
|
|
234
|
+
protocols:
|
|
235
|
+
grpc:
|
|
236
|
+
endpoint: "0.0.0.0:4317"
|
|
237
|
+
tls:
|
|
238
|
+
cert_file: /etc/ssl/certs/collector.crt
|
|
239
|
+
key_file: /etc/ssl/private/collector.key
|
|
240
|
+
client_ca_file: /etc/ssl/certs/ca.crt # enforce mTLS
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Exporter (client-side)
|
|
244
|
+
|
|
245
|
+
```yaml
|
|
246
|
+
exporters:
|
|
247
|
+
otlp:
|
|
248
|
+
endpoint: "collector:4317"
|
|
249
|
+
tls:
|
|
250
|
+
ca_file: /etc/ssl/certs/ca.crt
|
|
251
|
+
cert_file: /etc/ssl/certs/client.crt # mTLS client cert
|
|
252
|
+
key_file: /etc/ssl/private/client.key
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
For Kubernetes workloads, use cert-manager to auto-rotate TLS credentials (90-day TTL).
|
|
256
|
+
Use SPIFFE/SPIRE for zero-touch mTLS in multi-cluster scenarios.
|