container-superposition 0.1.1

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.
Files changed (327) hide show
  1. package/README.md +843 -0
  2. package/dist/scripts/init.d.ts +3 -0
  3. package/dist/scripts/init.d.ts.map +1 -0
  4. package/dist/scripts/init.js +1190 -0
  5. package/dist/scripts/init.js.map +1 -0
  6. package/dist/scripts/migrate-to-manifests.d.ts +12 -0
  7. package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
  8. package/dist/scripts/migrate-to-manifests.js +230 -0
  9. package/dist/scripts/migrate-to-manifests.js.map +1 -0
  10. package/dist/tool/questionnaire/composer.d.ts +6 -0
  11. package/dist/tool/questionnaire/composer.d.ts.map +1 -0
  12. package/dist/tool/questionnaire/composer.js +1232 -0
  13. package/dist/tool/questionnaire/composer.js.map +1 -0
  14. package/dist/tool/readme/markdown-parser.d.ts +30 -0
  15. package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
  16. package/dist/tool/readme/markdown-parser.js +139 -0
  17. package/dist/tool/readme/markdown-parser.js.map +1 -0
  18. package/dist/tool/readme/readme-generator.d.ts +9 -0
  19. package/dist/tool/readme/readme-generator.d.ts.map +1 -0
  20. package/dist/tool/readme/readme-generator.js +422 -0
  21. package/dist/tool/readme/readme-generator.js.map +1 -0
  22. package/dist/tool/schema/custom-loader.d.ts +17 -0
  23. package/dist/tool/schema/custom-loader.d.ts.map +1 -0
  24. package/dist/tool/schema/custom-loader.js +149 -0
  25. package/dist/tool/schema/custom-loader.js.map +1 -0
  26. package/dist/tool/schema/overlay-loader.d.ts +47 -0
  27. package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
  28. package/dist/tool/schema/overlay-loader.js +252 -0
  29. package/dist/tool/schema/overlay-loader.js.map +1 -0
  30. package/dist/tool/schema/types.d.ts +212 -0
  31. package/dist/tool/schema/types.d.ts.map +1 -0
  32. package/dist/tool/schema/types.js +5 -0
  33. package/dist/tool/schema/types.js.map +1 -0
  34. package/docs/README.md +308 -0
  35. package/docs/architecture.md +233 -0
  36. package/docs/creating-overlays.md +549 -0
  37. package/docs/custom-patches.md +540 -0
  38. package/docs/dependencies.md +279 -0
  39. package/docs/examples/custom-patches-example.md +85 -0
  40. package/docs/examples.md +576 -0
  41. package/docs/messaging-comparison.md +265 -0
  42. package/docs/messaging-quick-start.md +385 -0
  43. package/docs/observability-workflow.md +537 -0
  44. package/docs/overlay-manifest-refactoring.md +214 -0
  45. package/docs/overlay-metadata-archive.md +54 -0
  46. package/docs/overlays.md +523 -0
  47. package/docs/presets-architecture.md +498 -0
  48. package/docs/presets.md +366 -0
  49. package/docs/publishing.md +476 -0
  50. package/docs/quick-reference.md +326 -0
  51. package/docs/ux.md +170 -0
  52. package/features/README.md +85 -0
  53. package/features/cross-distro-packages/README.md +146 -0
  54. package/features/cross-distro-packages/devcontainer-feature.json +20 -0
  55. package/features/cross-distro-packages/install.sh +58 -0
  56. package/features/local-secrets-manager/devcontainer-feature.json +18 -0
  57. package/features/local-secrets-manager/install.sh +127 -0
  58. package/features/project-scaffolder/devcontainer-feature.json +24 -0
  59. package/features/project-scaffolder/install.sh +100 -0
  60. package/features/team-conventions/devcontainer-feature.json +24 -0
  61. package/features/team-conventions/install.sh +93 -0
  62. package/overlays/.registry/README.md +14 -0
  63. package/overlays/.registry/base-images.yml +26 -0
  64. package/overlays/.registry/base-templates.yml +7 -0
  65. package/overlays/README.md +155 -0
  66. package/overlays/alertmanager/.env.example +5 -0
  67. package/overlays/alertmanager/README.md +465 -0
  68. package/overlays/alertmanager/alert-rules.yml +56 -0
  69. package/overlays/alertmanager/alertmanager.yml +42 -0
  70. package/overlays/alertmanager/devcontainer.patch.json +12 -0
  71. package/overlays/alertmanager/docker-compose.yml +20 -0
  72. package/overlays/alertmanager/overlay.yml +17 -0
  73. package/overlays/alertmanager/setup.sh +53 -0
  74. package/overlays/alertmanager/verify.sh +31 -0
  75. package/overlays/aws-cli/README.md +473 -0
  76. package/overlays/aws-cli/devcontainer.patch.json +13 -0
  77. package/overlays/aws-cli/overlay.yml +13 -0
  78. package/overlays/azure-cli/README.md +551 -0
  79. package/overlays/azure-cli/devcontainer.patch.json +8 -0
  80. package/overlays/azure-cli/overlay.yml +13 -0
  81. package/overlays/bun/README.md +312 -0
  82. package/overlays/bun/devcontainer.patch.json +41 -0
  83. package/overlays/bun/overlay.yml +16 -0
  84. package/overlays/bun/setup.sh +79 -0
  85. package/overlays/bun/verify.sh +30 -0
  86. package/overlays/codex/README.md +128 -0
  87. package/overlays/codex/devcontainer.patch.json +3 -0
  88. package/overlays/codex/overlay.yml +14 -0
  89. package/overlays/codex/setup.sh +24 -0
  90. package/overlays/codex/verify.sh +30 -0
  91. package/overlays/commitlint/README.md +333 -0
  92. package/overlays/commitlint/devcontainer.patch.json +8 -0
  93. package/overlays/commitlint/overlay.yml +16 -0
  94. package/overlays/commitlint/setup.sh +234 -0
  95. package/overlays/direnv/README.md +504 -0
  96. package/overlays/direnv/devcontainer.patch.json +6 -0
  97. package/overlays/direnv/overlay.yml +13 -0
  98. package/overlays/direnv/setup.sh +139 -0
  99. package/overlays/docker-in-docker/README.md +534 -0
  100. package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
  101. package/overlays/docker-in-docker/overlay.yml +13 -0
  102. package/overlays/docker-sock/README.md +256 -0
  103. package/overlays/docker-sock/devcontainer.patch.json +9 -0
  104. package/overlays/docker-sock/docker-compose.yml +8 -0
  105. package/overlays/docker-sock/overlay.yml +13 -0
  106. package/overlays/dotnet/README.md +147 -0
  107. package/overlays/dotnet/devcontainer.patch.json +51 -0
  108. package/overlays/dotnet/global-tools.txt +24 -0
  109. package/overlays/dotnet/overlay.yml +13 -0
  110. package/overlays/dotnet/setup.sh +51 -0
  111. package/overlays/dotnet/verify.sh +26 -0
  112. package/overlays/gcloud/README.md +269 -0
  113. package/overlays/gcloud/devcontainer.patch.json +14 -0
  114. package/overlays/gcloud/overlay.yml +14 -0
  115. package/overlays/gcloud/verify.sh +52 -0
  116. package/overlays/git-helpers/README.md +168 -0
  117. package/overlays/git-helpers/devcontainer.patch.json +33 -0
  118. package/overlays/git-helpers/overlay.yml +15 -0
  119. package/overlays/git-helpers/setup.sh +91 -0
  120. package/overlays/go/README.md +293 -0
  121. package/overlays/go/devcontainer.patch.json +43 -0
  122. package/overlays/go/overlay.yml +15 -0
  123. package/overlays/go/setup.sh +33 -0
  124. package/overlays/go/verify.sh +40 -0
  125. package/overlays/grafana/.env.example +9 -0
  126. package/overlays/grafana/README.md +462 -0
  127. package/overlays/grafana/dashboard-provider.yml +11 -0
  128. package/overlays/grafana/dashboards/observability-overview.json +263 -0
  129. package/overlays/grafana/devcontainer.patch.json +12 -0
  130. package/overlays/grafana/docker-compose.yml +27 -0
  131. package/overlays/grafana/grafana-datasources.yml +57 -0
  132. package/overlays/grafana/overlay.yml +21 -0
  133. package/overlays/grafana/verify.sh +34 -0
  134. package/overlays/jaeger/.env.example +7 -0
  135. package/overlays/jaeger/README.md +867 -0
  136. package/overlays/jaeger/devcontainer.patch.json +12 -0
  137. package/overlays/jaeger/docker-compose.yml +17 -0
  138. package/overlays/jaeger/overlay.yml +19 -0
  139. package/overlays/java/README.md +267 -0
  140. package/overlays/java/devcontainer.patch.json +44 -0
  141. package/overlays/java/overlay.yml +16 -0
  142. package/overlays/java/setup.sh +41 -0
  143. package/overlays/java/verify.sh +42 -0
  144. package/overlays/just/README.md +443 -0
  145. package/overlays/just/devcontainer.patch.json +3 -0
  146. package/overlays/just/overlay.yml +13 -0
  147. package/overlays/just/setup.sh +182 -0
  148. package/overlays/kubectl-helm/README.md +660 -0
  149. package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
  150. package/overlays/kubectl-helm/overlay.yml +13 -0
  151. package/overlays/loki/.env.example +5 -0
  152. package/overlays/loki/README.md +1156 -0
  153. package/overlays/loki/devcontainer.patch.json +12 -0
  154. package/overlays/loki/docker-compose.yml +18 -0
  155. package/overlays/loki/loki-config.yaml +45 -0
  156. package/overlays/loki/overlay.yml +17 -0
  157. package/overlays/minio/.env.example +9 -0
  158. package/overlays/minio/README.md +639 -0
  159. package/overlays/minio/devcontainer.patch.json +30 -0
  160. package/overlays/minio/docker-compose.yml +28 -0
  161. package/overlays/minio/overlay.yml +18 -0
  162. package/overlays/minio/setup.sh +61 -0
  163. package/overlays/minio/verify.sh +64 -0
  164. package/overlays/mkdocs/README.md +309 -0
  165. package/overlays/mkdocs/devcontainer.patch.json +24 -0
  166. package/overlays/mkdocs/overlay.yml +15 -0
  167. package/overlays/modern-cli-tools/README.md +556 -0
  168. package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
  169. package/overlays/modern-cli-tools/overlay.yml +13 -0
  170. package/overlays/modern-cli-tools/setup.sh +153 -0
  171. package/overlays/mongodb/.env.example +9 -0
  172. package/overlays/mongodb/README.md +481 -0
  173. package/overlays/mongodb/devcontainer.patch.json +32 -0
  174. package/overlays/mongodb/docker-compose.yml +44 -0
  175. package/overlays/mongodb/overlay.yml +17 -0
  176. package/overlays/mongodb/verify.sh +48 -0
  177. package/overlays/mysql/.env.example +11 -0
  178. package/overlays/mysql/README.md +542 -0
  179. package/overlays/mysql/devcontainer.patch.json +34 -0
  180. package/overlays/mysql/docker-compose.yml +55 -0
  181. package/overlays/mysql/overlay.yml +16 -0
  182. package/overlays/mysql/verify.sh +48 -0
  183. package/overlays/nats/.env.example +5 -0
  184. package/overlays/nats/README.md +762 -0
  185. package/overlays/nats/devcontainer.patch.json +24 -0
  186. package/overlays/nats/docker-compose.yml +31 -0
  187. package/overlays/nats/overlay.yml +18 -0
  188. package/overlays/nats/verify.sh +50 -0
  189. package/overlays/ngrok/README.md +503 -0
  190. package/overlays/ngrok/devcontainer.patch.json +3 -0
  191. package/overlays/ngrok/overlay.yml +14 -0
  192. package/overlays/ngrok/setup.sh +125 -0
  193. package/overlays/nodejs/README.md +192 -0
  194. package/overlays/nodejs/devcontainer.patch.json +49 -0
  195. package/overlays/nodejs/global-packages.txt +16 -0
  196. package/overlays/nodejs/overlay.yml +14 -0
  197. package/overlays/nodejs/setup.sh +46 -0
  198. package/overlays/nodejs/verify.sh +32 -0
  199. package/overlays/otel-collector/.env.example +9 -0
  200. package/overlays/otel-collector/README.md +1257 -0
  201. package/overlays/otel-collector/devcontainer.patch.json +28 -0
  202. package/overlays/otel-collector/docker-compose.yml +22 -0
  203. package/overlays/otel-collector/otel-collector-config.yaml +68 -0
  204. package/overlays/otel-collector/overlay.yml +21 -0
  205. package/overlays/otel-collector/setup.sh +49 -0
  206. package/overlays/otel-demo-nodejs/.env.example +2 -0
  207. package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
  208. package/overlays/otel-demo-nodejs/README.md +409 -0
  209. package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
  210. package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
  211. package/overlays/otel-demo-nodejs/overlay.yml +23 -0
  212. package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
  213. package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
  214. package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
  215. package/overlays/otel-demo-nodejs/verify.sh +31 -0
  216. package/overlays/otel-demo-python/.env.example +2 -0
  217. package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
  218. package/overlays/otel-demo-python/README.md +82 -0
  219. package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
  220. package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
  221. package/overlays/otel-demo-python/docker-compose.yml +19 -0
  222. package/overlays/otel-demo-python/overlay.yml +23 -0
  223. package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
  224. package/overlays/otel-demo-python/verify.sh +31 -0
  225. package/overlays/playwright/README.md +629 -0
  226. package/overlays/playwright/devcontainer.patch.json +9 -0
  227. package/overlays/playwright/overlay.yml +13 -0
  228. package/overlays/postgres/.env.example +6 -0
  229. package/overlays/postgres/README.md +602 -0
  230. package/overlays/postgres/devcontainer.patch.json +21 -0
  231. package/overlays/postgres/docker-compose.yml +22 -0
  232. package/overlays/postgres/overlay.yml +15 -0
  233. package/overlays/postgres/verify.sh +45 -0
  234. package/overlays/powershell/README.md +314 -0
  235. package/overlays/powershell/devcontainer.patch.json +22 -0
  236. package/overlays/powershell/overlay.yml +13 -0
  237. package/overlays/powershell/setup.sh +29 -0
  238. package/overlays/powershell/verify.sh +38 -0
  239. package/overlays/pre-commit/README.md +263 -0
  240. package/overlays/pre-commit/devcontainer.patch.json +9 -0
  241. package/overlays/pre-commit/overlay.yml +16 -0
  242. package/overlays/pre-commit/setup.sh +129 -0
  243. package/overlays/presets/docs-site.yml +118 -0
  244. package/overlays/presets/fullstack.yml +181 -0
  245. package/overlays/presets/microservice.yml +118 -0
  246. package/overlays/presets/web-api.yml +109 -0
  247. package/overlays/prometheus/.env.example +5 -0
  248. package/overlays/prometheus/README.md +1246 -0
  249. package/overlays/prometheus/devcontainer.patch.json +12 -0
  250. package/overlays/prometheus/docker-compose.yml +22 -0
  251. package/overlays/prometheus/overlay.yml +17 -0
  252. package/overlays/prometheus/prometheus.yml +12 -0
  253. package/overlays/prometheus/verify.sh +34 -0
  254. package/overlays/promtail/.env.example +2 -0
  255. package/overlays/promtail/README.md +357 -0
  256. package/overlays/promtail/devcontainer.patch.json +5 -0
  257. package/overlays/promtail/docker-compose.yml +16 -0
  258. package/overlays/promtail/overlay.yml +17 -0
  259. package/overlays/promtail/promtail-config.yaml +60 -0
  260. package/overlays/promtail/verify.sh +31 -0
  261. package/overlays/pulumi/README.md +472 -0
  262. package/overlays/pulumi/devcontainer.patch.json +13 -0
  263. package/overlays/pulumi/overlay.yml +14 -0
  264. package/overlays/pulumi/verify.sh +31 -0
  265. package/overlays/python/README.md +919 -0
  266. package/overlays/python/devcontainer.patch.json +41 -0
  267. package/overlays/python/overlay.yml +12 -0
  268. package/overlays/python/requirements-overlay.txt +13 -0
  269. package/overlays/python/setup.sh +47 -0
  270. package/overlays/python/verify.sh +32 -0
  271. package/overlays/rabbitmq/.env.example +7 -0
  272. package/overlays/rabbitmq/README.md +680 -0
  273. package/overlays/rabbitmq/devcontainer.patch.json +28 -0
  274. package/overlays/rabbitmq/docker-compose.yml +30 -0
  275. package/overlays/rabbitmq/overlay.yml +18 -0
  276. package/overlays/rabbitmq/verify.sh +41 -0
  277. package/overlays/redis/.env.example +4 -0
  278. package/overlays/redis/README.md +776 -0
  279. package/overlays/redis/devcontainer.patch.json +21 -0
  280. package/overlays/redis/docker-compose.yml +21 -0
  281. package/overlays/redis/overlay.yml +15 -0
  282. package/overlays/redis/verify.sh +41 -0
  283. package/overlays/redpanda/.env.example +10 -0
  284. package/overlays/redpanda/README.md +703 -0
  285. package/overlays/redpanda/devcontainer.patch.json +37 -0
  286. package/overlays/redpanda/docker-compose.yml +67 -0
  287. package/overlays/redpanda/overlay.yml +21 -0
  288. package/overlays/redpanda/verify.sh +48 -0
  289. package/overlays/rust/README.md +299 -0
  290. package/overlays/rust/devcontainer.patch.json +39 -0
  291. package/overlays/rust/overlay.yml +15 -0
  292. package/overlays/rust/setup.sh +36 -0
  293. package/overlays/rust/verify.sh +51 -0
  294. package/overlays/sqlite/README.md +584 -0
  295. package/overlays/sqlite/devcontainer.patch.json +14 -0
  296. package/overlays/sqlite/overlay.yml +15 -0
  297. package/overlays/sqlite/setup.sh +27 -0
  298. package/overlays/sqlite/verify.sh +43 -0
  299. package/overlays/sqlserver/.env.example +6 -0
  300. package/overlays/sqlserver/README.md +592 -0
  301. package/overlays/sqlserver/devcontainer.patch.json +22 -0
  302. package/overlays/sqlserver/docker-compose.yml +32 -0
  303. package/overlays/sqlserver/overlay.yml +17 -0
  304. package/overlays/sqlserver/verify.sh +30 -0
  305. package/overlays/tempo/.env.example +5 -0
  306. package/overlays/tempo/README.md +273 -0
  307. package/overlays/tempo/devcontainer.patch.json +12 -0
  308. package/overlays/tempo/docker-compose.yml +20 -0
  309. package/overlays/tempo/overlay.yml +20 -0
  310. package/overlays/tempo/tempo-config.yaml +32 -0
  311. package/overlays/tempo/verify.sh +31 -0
  312. package/overlays/terraform/README.md +389 -0
  313. package/overlays/terraform/devcontainer.patch.json +15 -0
  314. package/overlays/terraform/overlay.yml +14 -0
  315. package/overlays/terraform/verify.sh +63 -0
  316. package/package.json +74 -0
  317. package/templates/README.md +285 -0
  318. package/templates/compose/.devcontainer/devcontainer.json +46 -0
  319. package/templates/compose/.devcontainer/docker-compose.yml +12 -0
  320. package/templates/compose/README.md +20 -0
  321. package/templates/plain/.devcontainer/devcontainer.json +35 -0
  322. package/templates/plain/README.md +21 -0
  323. package/tool/README.md +281 -0
  324. package/tool/schema/base-images.schema.json +43 -0
  325. package/tool/schema/base-templates.schema.json +34 -0
  326. package/tool/schema/config.schema.json +71 -0
  327. package/tool/schema/overlay-manifest.schema.json +86 -0
@@ -0,0 +1,1257 @@
1
+ # OpenTelemetry Collector Overlay
2
+
3
+ Vendor-agnostic telemetry collection agent that receives, processes, and exports traces, metrics, and logs.
4
+
5
+ ## Features
6
+
7
+ - **OpenTelemetry Collector Contrib** - Extended collector with 200+ components
8
+ - **Multiple receivers** - OTLP (gRPC/HTTP), Jaeger, Prometheus, and more
9
+ - **Flexible processors** - Batch, filter, transform, sample telemetry
10
+ - **Multi-backend export** - Send to Jaeger, Prometheus, Loki simultaneously
11
+ - **Pipeline architecture** - Separate processing for traces, metrics, logs
12
+ - **Resource detection** - Automatic environment attribute detection
13
+ - **Health check endpoint** - Monitor collector status
14
+
15
+ ## How It Works
16
+
17
+ The OpenTelemetry Collector acts as a centralized agent that receives telemetry from your applications, processes it (batching, filtering, enriching), and exports it to various backends.
18
+
19
+ **Architecture:**
20
+
21
+ ```mermaid
22
+ graph TD
23
+ A1[Application 1<br/>Sends OTLP traces/metrics] -->|OTLP gRPC/HTTP| B[OpenTelemetry Collector<br/>Receivers → Processors → Exporters<br/>Batch processing<br/>Memory limiting<br/>Attribute enrichment<br/>Sampling]
24
+ A2[Application 2<br/>Sends OTLP logs] -->|OTLP gRPC/HTTP| B
25
+ B --> C[Jaeger<br/>traces]
26
+ B --> D[Prometheus<br/>metrics]
27
+ B --> E[Loki<br/>logs]
28
+ ```
29
+
30
+ **Benefits:**
31
+
32
+ - **Decoupling** - Change backends without modifying application code
33
+ - **Centralized processing** - Transform/filter data once, not in every app
34
+ - **Reduced overhead** - Offload heavy processing from applications
35
+ - **Multi-backend** - Send same data to multiple destinations
36
+ - **Protocol translation** - Convert between different telemetry formats
37
+
38
+ ## Configuration
39
+
40
+ ### Ports
41
+
42
+ - `4317` - OTLP gRPC receiver (primary)
43
+ - `4318` - OTLP HTTP receiver
44
+ - `8888` - Collector's own metrics (internal health)
45
+ - `8889` - Prometheus exporter endpoint (scrape target)
46
+ - `13133` - Health check extension
47
+
48
+ ### Environment Variables
49
+
50
+ The overlay includes a `.env.example` file. Copy it to `.env` and customize:
51
+
52
+ ```bash
53
+ cd .devcontainer
54
+ cp .env.example .env
55
+ ```
56
+
57
+ **Available variables:**
58
+
59
+ ```bash
60
+ # Collector version
61
+ OTEL_COLLECTOR_VERSION=latest
62
+
63
+ # Port configuration
64
+ OTEL_GRPC_PORT=4317
65
+ OTEL_HTTP_PORT=4318
66
+ OTEL_METRICS_PORT=8888
67
+ OTEL_EXPORTER_PORT=8889
68
+ OTEL_HEALTH_PORT=13133
69
+ ```
70
+
71
+ ### Collector Configuration File
72
+
73
+ The collector is configured via `otel-collector-config.yaml`:
74
+
75
+ **Structure:**
76
+
77
+ ```yaml
78
+ receivers: # How telemetry enters the collector
79
+ otlp:
80
+ protocols:
81
+ grpc:
82
+ http:
83
+
84
+ processors: # How telemetry is transformed
85
+ batch:
86
+ memory_limiter:
87
+
88
+ exporters: # Where telemetry is sent
89
+ otlp/jaeger:
90
+ prometheus:
91
+ loki:
92
+
93
+ service: # Pipeline definitions
94
+ pipelines:
95
+ traces:
96
+ receivers: [otlp]
97
+ processors: [memory_limiter, batch]
98
+ exporters: [otlp/jaeger]
99
+ metrics:
100
+ receivers: [otlp]
101
+ processors: [memory_limiter, batch]
102
+ exporters: [prometheus]
103
+ logs:
104
+ receivers: [otlp]
105
+ processors: [memory_limiter, batch]
106
+ exporters: [loki]
107
+ ```
108
+
109
+ ### Port Configuration
110
+
111
+ Ports can be changed via `--port-offset`:
112
+
113
+ ```bash
114
+ # Offset all ports by 100
115
+ container-superposition --port-offset 100
116
+
117
+ # Collector ports become:
118
+ # 4417 (gRPC), 4418 (HTTP), 8988 (metrics), 8989 (prometheus), 13233 (health)
119
+ ```
120
+
121
+ ## Receivers Configuration
122
+
123
+ ### OTLP Receiver (Default)
124
+
125
+ Receives telemetry in OpenTelemetry Protocol format:
126
+
127
+ ```yaml
128
+ receivers:
129
+ otlp:
130
+ protocols:
131
+ grpc:
132
+ endpoint: 0.0.0.0:4317
133
+ http:
134
+ endpoint: 0.0.0.0:4318
135
+ cors:
136
+ allowed_origins:
137
+ - http://*
138
+ - https://*
139
+ ```
140
+
141
+ ### Jaeger Receiver
142
+
143
+ Receive traces in Jaeger format:
144
+
145
+ ```yaml
146
+ receivers:
147
+ jaeger:
148
+ protocols:
149
+ grpc:
150
+ endpoint: 0.0.0.0:14250
151
+ thrift_http:
152
+ endpoint: 0.0.0.0:14268
153
+ thrift_compact:
154
+ endpoint: 0.0.0.0:6831
155
+ ```
156
+
157
+ ### Prometheus Receiver
158
+
159
+ Scrape metrics from Prometheus endpoints:
160
+
161
+ ```yaml
162
+ receivers:
163
+ prometheus:
164
+ config:
165
+ scrape_configs:
166
+ - job_name: 'my-app'
167
+ scrape_interval: 10s
168
+ static_configs:
169
+ - targets: ['my-app:8080']
170
+ ```
171
+
172
+ ### Filelog Receiver
173
+
174
+ Read logs from files:
175
+
176
+ ```yaml
177
+ receivers:
178
+ filelog:
179
+ include:
180
+ - /var/log/myapp/*.log
181
+ start_at: end
182
+ operators:
183
+ - type: json_parser
184
+ timestamp:
185
+ parse_from: attributes.time
186
+ layout: '%Y-%m-%d %H:%M:%S'
187
+ ```
188
+
189
+ ### Hostmetrics Receiver
190
+
191
+ Collect system metrics:
192
+
193
+ ```yaml
194
+ receivers:
195
+ hostmetrics:
196
+ collection_interval: 30s
197
+ scrapers:
198
+ cpu:
199
+ memory:
200
+ disk:
201
+ network:
202
+ filesystem:
203
+ ```
204
+
205
+ ## Processors Configuration
206
+
207
+ ### Batch Processor (Recommended)
208
+
209
+ Batches telemetry for efficient export:
210
+
211
+ ```yaml
212
+ processors:
213
+ batch:
214
+ timeout: 10s # Send batch every 10s
215
+ send_batch_size: 1024 # Or when 1024 items collected
216
+ send_batch_max_size: 2048 # Hard limit on batch size
217
+ ```
218
+
219
+ **Benefits:**
220
+
221
+ - Reduces network overhead
222
+ - Better compression
223
+ - More efficient backend writes
224
+
225
+ ### Memory Limiter Processor (Critical)
226
+
227
+ Prevents OOM by limiting memory usage:
228
+
229
+ ```yaml
230
+ processors:
231
+ memory_limiter:
232
+ check_interval: 1s # How often to check memory
233
+ limit_mib: 512 # Hard limit (triggers data drop)
234
+ spike_limit_mib: 128 # Temporary spike allowance
235
+ ```
236
+
237
+ **When limit is reached:**
238
+
239
+ 1. Stops accepting new data
240
+ 2. Flushes existing batches
241
+ 3. Resumes when memory drops below limit
242
+
243
+ ### Attributes Processor
244
+
245
+ Add, update, or delete attributes:
246
+
247
+ ```yaml
248
+ processors:
249
+ attributes:
250
+ actions:
251
+ - key: environment
252
+ value: development
253
+ action: insert
254
+ - key: sensitive_data
255
+ action: delete
256
+ - key: http.url
257
+ pattern: ^(.*)(\?.*)$
258
+ action: extract
259
+ from_attribute: http.url
260
+ ```
261
+
262
+ ### Resource Processor
263
+
264
+ Modify resource attributes:
265
+
266
+ ```yaml
267
+ processors:
268
+ resource:
269
+ attributes:
270
+ - key: deployment.environment
271
+ value: development
272
+ action: upsert
273
+ - key: service.namespace
274
+ value: mycompany
275
+ action: insert
276
+ ```
277
+
278
+ ### Filter Processor
279
+
280
+ Drop spans/metrics based on conditions:
281
+
282
+ ```yaml
283
+ processors:
284
+ filter:
285
+ traces:
286
+ span:
287
+ - 'attributes["http.url"] == "/health"'
288
+ - 'name == "health-check"'
289
+ metrics:
290
+ metric:
291
+ - 'name == "noisy_metric"'
292
+ ```
293
+
294
+ ### Span Processor
295
+
296
+ Modify span names and attributes:
297
+
298
+ ```yaml
299
+ processors:
300
+ span:
301
+ name:
302
+ from_attributes: ['http.method', 'http.route']
303
+ separator: ' '
304
+ include:
305
+ match_type: regexp
306
+ services: ['my-service']
307
+ ```
308
+
309
+ ### Tail Sampling Processor
310
+
311
+ Intelligent sampling based on trace properties:
312
+
313
+ ```yaml
314
+ processors:
315
+ tail_sampling:
316
+ decision_wait: 10s
317
+ num_traces: 100
318
+ expected_new_traces_per_sec: 10
319
+ policies:
320
+ - name: errors
321
+ type: status_code
322
+ status_code:
323
+ status_codes: [ERROR]
324
+ - name: slow-traces
325
+ type: latency
326
+ latency:
327
+ threshold_ms: 1000
328
+ - name: probabilistic
329
+ type: probabilistic
330
+ probabilistic:
331
+ sampling_percentage: 10
332
+ ```
333
+
334
+ ### Transform Processor
335
+
336
+ Advanced transformations with OTTL:
337
+
338
+ ```yaml
339
+ processors:
340
+ transform:
341
+ trace_statements:
342
+ - context: span
343
+ statements:
344
+ - set(attributes["http.status_class"], "2xx") where attributes["http.status_code"] >= 200 and attributes["http.status_code"] < 300
345
+ - set(attributes["error"], true) where status.code == STATUS_CODE_ERROR
346
+ ```
347
+
348
+ ## Exporters Configuration
349
+
350
+ ### OTLP Exporter (Jaeger)
351
+
352
+ Export traces to Jaeger via OTLP:
353
+
354
+ ```yaml
355
+ exporters:
356
+ otlp/jaeger:
357
+ endpoint: jaeger:4317
358
+ tls:
359
+ insecure: true
360
+ sending_queue:
361
+ enabled: true
362
+ num_consumers: 10
363
+ queue_size: 1000
364
+ retry_on_failure:
365
+ enabled: true
366
+ initial_interval: 5s
367
+ max_interval: 30s
368
+ max_elapsed_time: 300s
369
+ ```
370
+
371
+ ### Prometheus Exporter
372
+
373
+ Expose metrics for Prometheus to scrape:
374
+
375
+ ```yaml
376
+ exporters:
377
+ prometheus:
378
+ endpoint: '0.0.0.0:8889'
379
+ namespace: otelcol
380
+ const_labels:
381
+ environment: development
382
+ send_timestamps: true
383
+ metric_expiration: 5m
384
+ ```
385
+
386
+ ### Loki Exporter
387
+
388
+ Export logs to Grafana Loki:
389
+
390
+ ```yaml
391
+ exporters:
392
+ loki:
393
+ endpoint: http://loki:3100/loki/api/v1/push
394
+ labels:
395
+ attributes:
396
+ service.name: 'service_name'
397
+ severity: 'severity'
398
+ host.name: 'host_name'
399
+ tenant_id: 'dev'
400
+ ```
401
+
402
+ ### OTLP HTTP Exporter
403
+
404
+ Export to OTLP-compatible backends:
405
+
406
+ ```yaml
407
+ exporters:
408
+ otlphttp:
409
+ endpoint: https://ingest.example.com
410
+ headers:
411
+ api-key: '${API_KEY}'
412
+ compression: gzip
413
+ timeout: 30s
414
+ ```
415
+
416
+ ### File Exporter (Debug)
417
+
418
+ Write telemetry to file:
419
+
420
+ ```yaml
421
+ exporters:
422
+ file:
423
+ path: /tmp/otel-output.json
424
+ rotation:
425
+ max_megabytes: 100
426
+ max_days: 3
427
+ max_backups: 3
428
+ ```
429
+
430
+ ### Debug Exporter
431
+
432
+ Log telemetry to console (development only):
433
+
434
+ ```yaml
435
+ exporters:
436
+ debug:
437
+ verbosity: detailed # or: basic, normal
438
+ sampling_initial: 5
439
+ sampling_thereafter: 200
440
+ ```
441
+
442
+ ## Pipeline Examples
443
+
444
+ ### Traces Pipeline
445
+
446
+ ```yaml
447
+ service:
448
+ pipelines:
449
+ traces:
450
+ receivers: [otlp, jaeger]
451
+ processors:
452
+ - memory_limiter
453
+ - resource
454
+ - batch
455
+ - tail_sampling
456
+ exporters: [otlp/jaeger, debug]
457
+ ```
458
+
459
+ ### Metrics Pipeline
460
+
461
+ ```yaml
462
+ service:
463
+ pipelines:
464
+ metrics:
465
+ receivers: [otlp, prometheus, hostmetrics]
466
+ processors:
467
+ - memory_limiter
468
+ - resource
469
+ - attributes
470
+ - batch
471
+ exporters: [prometheus, debug]
472
+ ```
473
+
474
+ ### Logs Pipeline
475
+
476
+ ```yaml
477
+ service:
478
+ pipelines:
479
+ logs:
480
+ receivers: [otlp, filelog]
481
+ processors:
482
+ - memory_limiter
483
+ - resource
484
+ - attributes
485
+ - batch
486
+ exporters: [loki, debug]
487
+ ```
488
+
489
+ ### Multi-Signal Pipeline
490
+
491
+ Process different signals independently:
492
+
493
+ ```yaml
494
+ service:
495
+ pipelines:
496
+ # Production traces (sampled)
497
+ traces/prod:
498
+ receivers: [otlp]
499
+ processors: [tail_sampling, batch]
500
+ exporters: [otlp/jaeger]
501
+
502
+ # Debug traces (all)
503
+ traces/debug:
504
+ receivers: [otlp]
505
+ processors: [batch]
506
+ exporters: [debug]
507
+
508
+ # Application metrics
509
+ metrics/app:
510
+ receivers: [otlp]
511
+ processors: [batch]
512
+ exporters: [prometheus]
513
+
514
+ # System metrics
515
+ metrics/system:
516
+ receivers: [hostmetrics]
517
+ processors: [resource, batch]
518
+ exporters: [prometheus]
519
+
520
+ # Application logs
521
+ logs/app:
522
+ receivers: [otlp]
523
+ processors: [attributes, batch]
524
+ exporters: [loki]
525
+
526
+ # File logs
527
+ logs/files:
528
+ receivers: [filelog]
529
+ processors: [resource, batch]
530
+ exporters: [loki]
531
+ ```
532
+
533
+ ## Application Integration
534
+
535
+ ### Node.js (All Signals)
536
+
537
+ Install dependencies:
538
+
539
+ ```bash
540
+ npm install @opentelemetry/sdk-node \
541
+ @opentelemetry/auto-instrumentations-node \
542
+ @opentelemetry/exporter-trace-otlp-grpc \
543
+ @opentelemetry/exporter-metrics-otlp-grpc \
544
+ @opentelemetry/exporter-logs-otlp-grpc
545
+ ```
546
+
547
+ **Comprehensive setup:**
548
+
549
+ ```javascript
550
+ // tracing.js
551
+ const { NodeSDK } = require('@opentelemetry/sdk-node');
552
+ const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
553
+ const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
554
+ const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
555
+ const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-grpc');
556
+ const { Resource } = require('@opentelemetry/resources');
557
+ const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
558
+ const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
559
+
560
+ const resource = new Resource({
561
+ [SemanticResourceAttributes.SERVICE_NAME]: 'my-service',
562
+ [SemanticResourceAttributes.SERVICE_VERSION]: '1.0.0',
563
+ [SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: 'development',
564
+ });
565
+
566
+ const sdk = new NodeSDK({
567
+ resource,
568
+ traceExporter: new OTLPTraceExporter({
569
+ url: 'http://otel-collector:4317',
570
+ }),
571
+ metricReader: new PeriodicExportingMetricReader({
572
+ exporter: new OTLPMetricExporter({
573
+ url: 'http://otel-collector:4317',
574
+ }),
575
+ exportIntervalMillis: 60000, // Export every minute
576
+ }),
577
+ logRecordProcessor: new BatchLogRecordProcessor(
578
+ new OTLPLogExporter({
579
+ url: 'http://otel-collector:4317',
580
+ })
581
+ ),
582
+ instrumentations: [getNodeAutoInstrumentations()],
583
+ });
584
+
585
+ sdk.start();
586
+
587
+ process.on('SIGTERM', () => {
588
+ sdk.shutdown().finally(() => process.exit(0));
589
+ });
590
+ ```
591
+
592
+ ### Python (All Signals)
593
+
594
+ Install dependencies:
595
+
596
+ ```bash
597
+ pip install opentelemetry-distro \
598
+ opentelemetry-exporter-otlp-proto-grpc \
599
+ opentelemetry-instrumentation
600
+ ```
601
+
602
+ **Comprehensive setup:**
603
+
604
+ ```python
605
+ from opentelemetry import trace, metrics, _logs
606
+ from opentelemetry.sdk.trace import TracerProvider
607
+ from opentelemetry.sdk.metrics import MeterProvider
608
+ from opentelemetry.sdk._logs import LoggerProvider
609
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
610
+ from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
611
+ from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
612
+ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
613
+ from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
614
+ from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
615
+ from opentelemetry.sdk.resources import Resource, SERVICE_NAME, SERVICE_VERSION
616
+
617
+ # Configure resource
618
+ resource = Resource.create({
619
+ SERVICE_NAME: "my-service",
620
+ SERVICE_VERSION: "1.0.0",
621
+ "deployment.environment": "development",
622
+ })
623
+
624
+ # Setup tracing
625
+ trace.set_tracer_provider(TracerProvider(resource=resource))
626
+ trace.get_tracer_provider().add_span_processor(
627
+ BatchSpanProcessor(OTLPSpanExporter(endpoint="http://otel-collector:4317", insecure=True))
628
+ )
629
+
630
+ # Setup metrics
631
+ metrics.set_meter_provider(
632
+ MeterProvider(
633
+ resource=resource,
634
+ metric_readers=[
635
+ PeriodicExportingMetricReader(
636
+ OTLPMetricExporter(endpoint="http://otel-collector:4317", insecure=True),
637
+ export_interval_millis=60000,
638
+ )
639
+ ],
640
+ )
641
+ )
642
+
643
+ # Setup logging
644
+ _logs.set_logger_provider(LoggerProvider(resource=resource))
645
+ _logs.get_logger_provider().add_log_record_processor(
646
+ BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://otel-collector:4317", insecure=True))
647
+ )
648
+ ```
649
+
650
+ ### .NET (All Signals)
651
+
652
+ Install packages:
653
+
654
+ ```bash
655
+ dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
656
+ dotnet add package OpenTelemetry.Extensions.Hosting
657
+ dotnet add package OpenTelemetry.Instrumentation.AspNetCore
658
+ dotnet add package OpenTelemetry.Instrumentation.Http
659
+ ```
660
+
661
+ **ASP.NET Core configuration:**
662
+
663
+ ```csharp
664
+ using OpenTelemetry.Logs;
665
+ using OpenTelemetry.Metrics;
666
+ using OpenTelemetry.Resources;
667
+ using OpenTelemetry.Trace;
668
+
669
+ var builder = WebApplication.CreateBuilder(args);
670
+
671
+ var resourceBuilder = ResourceBuilder.CreateDefault()
672
+ .AddService("my-service", serviceVersion: "1.0.0")
673
+ .AddAttributes(new Dictionary<string, object>
674
+ {
675
+ ["deployment.environment"] = "development"
676
+ });
677
+
678
+ // Configure OpenTelemetry
679
+ builder.Services.AddOpenTelemetry()
680
+ .ConfigureResource(resource => resource = resourceBuilder)
681
+ .WithTracing(tracing => tracing
682
+ .AddAspNetCoreInstrumentation()
683
+ .AddHttpClientInstrumentation()
684
+ .AddOtlpExporter(options =>
685
+ {
686
+ options.Endpoint = new Uri("http://otel-collector:4317");
687
+ }))
688
+ .WithMetrics(metrics => metrics
689
+ .AddAspNetCoreInstrumentation()
690
+ .AddHttpClientInstrumentation()
691
+ .AddOtlpExporter(options =>
692
+ {
693
+ options.Endpoint = new Uri("http://otel-collector:4317");
694
+ }));
695
+
696
+ // Configure logging
697
+ builder.Logging.AddOpenTelemetry(logging =>
698
+ {
699
+ logging.SetResourceBuilder(resourceBuilder);
700
+ logging.AddOtlpExporter(options =>
701
+ {
702
+ options.Endpoint = new Uri("http://otel-collector:4317");
703
+ });
704
+ });
705
+
706
+ var app = builder.Build();
707
+ app.Run();
708
+ ```
709
+
710
+ ### Go (All Signals)
711
+
712
+ Install dependencies:
713
+
714
+ ```bash
715
+ go get go.opentelemetry.io/otel
716
+ go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
717
+ go get go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc
718
+ go get go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc
719
+ ```
720
+
721
+ **Complete setup:**
722
+
723
+ ```go
724
+ package main
725
+
726
+ import (
727
+ "context"
728
+ "log"
729
+ "time"
730
+
731
+ "go.opentelemetry.io/otel"
732
+ "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
733
+ "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
734
+ "go.opentelemetry.io/otel/sdk/metric"
735
+ "go.opentelemetry.io/otel/sdk/resource"
736
+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
737
+ semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
738
+ )
739
+
740
+ func initProvider() func() {
741
+ ctx := context.Background()
742
+
743
+ res, err := resource.New(ctx,
744
+ resource.WithAttributes(
745
+ semconv.ServiceName("my-service"),
746
+ semconv.ServiceVersion("1.0.0"),
747
+ ),
748
+ )
749
+ if err != nil {
750
+ log.Fatal(err)
751
+ }
752
+
753
+ // Setup tracing
754
+ traceExporter, err := otlptracegrpc.New(ctx,
755
+ otlptracegrpc.WithEndpoint("otel-collector:4317"),
756
+ otlptracegrpc.WithInsecure(),
757
+ )
758
+ if err != nil {
759
+ log.Fatal(err)
760
+ }
761
+
762
+ tp := sdktrace.NewTracerProvider(
763
+ sdktrace.WithBatcher(traceExporter),
764
+ sdktrace.WithResource(res),
765
+ )
766
+ otel.SetTracerProvider(tp)
767
+
768
+ // Setup metrics
769
+ metricExporter, err := otlpmetricgrpc.New(ctx,
770
+ otlpmetricgrpc.WithEndpoint("otel-collector:4317"),
771
+ otlpmetricgrpc.WithInsecure(),
772
+ )
773
+ if err != nil {
774
+ log.Fatal(err)
775
+ }
776
+
777
+ mp := metric.NewMeterProvider(
778
+ metric.WithReader(metric.NewPeriodicReader(metricExporter,
779
+ metric.WithInterval(60*time.Second),
780
+ )),
781
+ metric.WithResource(res),
782
+ )
783
+ otel.SetMeterProvider(mp)
784
+
785
+ return func() {
786
+ _ = tp.Shutdown(ctx)
787
+ _ = mp.Shutdown(ctx)
788
+ }
789
+ }
790
+ ```
791
+
792
+ ## Sampling Strategies
793
+
794
+ ### Head Sampling (At Collection)
795
+
796
+ Sample at the receiver before processing:
797
+
798
+ ```yaml
799
+ processors:
800
+ probabilistic_sampler:
801
+ hash_seed: 22
802
+ sampling_percentage: 10 # 10% of traces
803
+
804
+ service:
805
+ pipelines:
806
+ traces:
807
+ processors: [probabilistic_sampler, batch]
808
+ ```
809
+
810
+ ### Tail Sampling (After Collection)
811
+
812
+ Make sampling decisions after seeing complete trace:
813
+
814
+ ```yaml
815
+ processors:
816
+ tail_sampling:
817
+ decision_wait: 10s
818
+ num_traces: 100
819
+ expected_new_traces_per_sec: 10
820
+ policies:
821
+ # Always sample errors
822
+ - name: error-traces
823
+ type: status_code
824
+ status_code:
825
+ status_codes: [ERROR]
826
+
827
+ # Always sample slow requests
828
+ - name: slow-traces
829
+ type: latency
830
+ latency:
831
+ threshold_ms: 1000
832
+
833
+ # Sample 10% of other traces
834
+ - name: probabilistic-policy
835
+ type: probabilistic
836
+ probabilistic:
837
+ sampling_percentage: 10
838
+
839
+ # Sample by specific attributes
840
+ - name: important-service
841
+ type: string_attribute
842
+ string_attribute:
843
+ key: service.name
844
+ values: [critical-service, payment-service]
845
+ ```
846
+
847
+ ## Batching and Retry Configuration
848
+
849
+ ### Optimal Batch Settings
850
+
851
+ ```yaml
852
+ processors:
853
+ batch:
854
+ # Time to wait before sending (whichever comes first)
855
+ timeout: 10s
856
+
857
+ # Preferred batch size
858
+ send_batch_size: 1024
859
+
860
+ # Maximum batch size
861
+ send_batch_max_size: 2048
862
+
863
+ exporters:
864
+ otlp/jaeger:
865
+ endpoint: jaeger:4317
866
+ tls:
867
+ insecure: true
868
+
869
+ # Queue configuration
870
+ sending_queue:
871
+ enabled: true
872
+ num_consumers: 10 # Concurrent exporters
873
+ queue_size: 5000 # Max items in queue
874
+
875
+ # Retry on failure
876
+ retry_on_failure:
877
+ enabled: true
878
+ initial_interval: 5s # First retry after 5s
879
+ max_interval: 30s # Max backoff time
880
+ max_elapsed_time: 300s # Give up after 5 minutes
881
+ ```
882
+
883
+ ## Best Practices
884
+
885
+ ### Resource Attributes
886
+
887
+ Always set resource attributes:
888
+
889
+ ```yaml
890
+ processors:
891
+ resource:
892
+ attributes:
893
+ - key: deployment.environment
894
+ value: development
895
+ action: upsert
896
+ - key: service.namespace
897
+ value: mycompany
898
+ action: upsert
899
+ - key: cloud.provider
900
+ value: aws
901
+ action: insert
902
+ ```
903
+
904
+ ### Memory Management
905
+
906
+ Always use memory_limiter as first processor:
907
+
908
+ ```yaml
909
+ processors:
910
+ memory_limiter:
911
+ check_interval: 1s
912
+ limit_mib: 512
913
+ spike_limit_mib: 128
914
+
915
+ service:
916
+ pipelines:
917
+ traces:
918
+ processors: [memory_limiter, batch, ...] # memory_limiter FIRST
919
+ ```
920
+
921
+ ### Pipeline Ordering
922
+
923
+ Correct processor order matters:
924
+
925
+ ```yaml
926
+ service:
927
+ pipelines:
928
+ traces:
929
+ processors:
930
+ - memory_limiter # 1. Prevent OOM (always first)
931
+ - resource # 2. Add resource attributes
932
+ - attributes # 3. Add/modify span attributes
933
+ - filter # 4. Drop unwanted spans
934
+ - tail_sampling # 5. Sample traces
935
+ - batch # 6. Batch for export (always last)
936
+ ```
937
+
938
+ ### Health Checks
939
+
940
+ Always enable health check extension:
941
+
942
+ ```yaml
943
+ extensions:
944
+ health_check:
945
+ endpoint: 0.0.0.0:13133
946
+ check_collector_pipeline:
947
+ enabled: true
948
+ interval: 5s
949
+ exporter_failure_threshold: 5
950
+
951
+ service:
952
+ extensions: [health_check]
953
+ ```
954
+
955
+ **Check health:**
956
+
957
+ ```bash
958
+ curl http://localhost:13133
959
+ # Returns 200 OK if healthy
960
+ ```
961
+
962
+ ### Avoid Data Loss
963
+
964
+ Configure persistent queues for critical data:
965
+
966
+ ```yaml
967
+ exporters:
968
+ otlp:
969
+ endpoint: backend:4317
970
+ sending_queue:
971
+ enabled: true
972
+ storage: file_storage/otlp
973
+ retry_on_failure:
974
+ enabled: true
975
+
976
+ extensions:
977
+ file_storage:
978
+ directory: /var/lib/otelcol/storage
979
+ timeout: 10s
980
+
981
+ service:
982
+ extensions: [file_storage]
983
+ ```
984
+
985
+ ## Performance Optimization
986
+
987
+ ### Tune Batch Sizes
988
+
989
+ ```yaml
990
+ processors:
991
+ batch:
992
+ # For high throughput
993
+ timeout: 1s
994
+ send_batch_size: 8192
995
+ send_batch_max_size: 16384
996
+
997
+ # For low latency
998
+ # timeout: 100ms
999
+ # send_batch_size: 128
1000
+ # send_batch_max_size: 256
1001
+ ```
1002
+
1003
+ ### Increase Concurrency
1004
+
1005
+ ```yaml
1006
+ exporters:
1007
+ otlp/jaeger:
1008
+ endpoint: jaeger:4317
1009
+ sending_queue:
1010
+ num_consumers: 20 # More concurrent exports
1011
+ queue_size: 10000
1012
+ ```
1013
+
1014
+ ### Use Persistent Queue
1015
+
1016
+ ```yaml
1017
+ exporters:
1018
+ otlp:
1019
+ sending_queue:
1020
+ enabled: true
1021
+ storage: file_storage
1022
+
1023
+ extensions:
1024
+ file_storage:
1025
+ directory: /var/lib/otelcol
1026
+ ```
1027
+
1028
+ ### Resource Detection
1029
+
1030
+ Auto-detect environment attributes:
1031
+
1032
+ ```yaml
1033
+ processors:
1034
+ resourcedetection:
1035
+ detectors: [env, system, docker]
1036
+ timeout: 5s
1037
+ ```
1038
+
1039
+ ## Troubleshooting
1040
+
1041
+ ### No telemetry appearing
1042
+
1043
+ **Check collector is running:**
1044
+
1045
+ ```bash
1046
+ docker-compose ps otel-collector
1047
+ docker-compose logs otel-collector
1048
+ ```
1049
+
1050
+ **Check health endpoint:**
1051
+
1052
+ ```bash
1053
+ curl http://localhost:13133
1054
+ ```
1055
+
1056
+ **Verify application endpoint:**
1057
+
1058
+ ```javascript
1059
+ // Check your app sends to correct URL
1060
+ console.log('OTLP endpoint:', 'http://otel-collector:4317');
1061
+ ```
1062
+
1063
+ **Check pipeline configuration:**
1064
+
1065
+ ```bash
1066
+ # Ensure pipelines are defined
1067
+ docker-compose exec otel-collector cat /etc/otel-collector-config.yaml
1068
+ ```
1069
+
1070
+ ### Collector crashes or OOM
1071
+
1072
+ **Check memory limiter:**
1073
+
1074
+ ```yaml
1075
+ processors:
1076
+ memory_limiter:
1077
+ limit_mib: 1024 # Increase limit
1078
+ spike_limit_mib: 256
1079
+ ```
1080
+
1081
+ **Reduce batch sizes:**
1082
+
1083
+ ```yaml
1084
+ processors:
1085
+ batch:
1086
+ send_batch_size: 512 # Reduce from 1024
1087
+ send_batch_max_size: 1024 # Reduce from 2048
1088
+ ```
1089
+
1090
+ **Check memory usage:**
1091
+
1092
+ ```bash
1093
+ docker stats otel-collector
1094
+ ```
1095
+
1096
+ ### Data not reaching backends
1097
+
1098
+ **Check exporter configuration:**
1099
+
1100
+ ```bash
1101
+ # Verify backend endpoints
1102
+ docker-compose logs otel-collector | grep -i "exporter"
1103
+ ```
1104
+
1105
+ **Test backend connectivity:**
1106
+
1107
+ ```bash
1108
+ docker-compose exec otel-collector wget -O- http://jaeger:4317
1109
+ docker-compose exec otel-collector curl http://prometheus:9090
1110
+ docker-compose exec otel-collector curl http://loki:3100/ready
1111
+ ```
1112
+
1113
+ **Enable debug exporter:**
1114
+
1115
+ ```yaml
1116
+ exporters:
1117
+ debug:
1118
+ verbosity: detailed
1119
+
1120
+ service:
1121
+ pipelines:
1122
+ traces:
1123
+ exporters: [otlp/jaeger, debug] # Add debug
1124
+ ```
1125
+
1126
+ **Check logs for export errors:**
1127
+
1128
+ ```bash
1129
+ docker-compose logs otel-collector | grep -i "error\|failed"
1130
+ ```
1131
+
1132
+ ### High CPU usage
1133
+
1134
+ **Reduce sampling:**
1135
+
1136
+ ```yaml
1137
+ processors:
1138
+ probabilistic_sampler:
1139
+ sampling_percentage: 10 # Sample less
1140
+ ```
1141
+
1142
+ **Increase batch timeout:**
1143
+
1144
+ ```yaml
1145
+ processors:
1146
+ batch:
1147
+ timeout: 30s # Batch for longer
1148
+ ```
1149
+
1150
+ **Disable expensive processors:**
1151
+
1152
+ ```yaml
1153
+ # Comment out tail_sampling if not needed
1154
+ # processors:
1155
+ # tail_sampling: ...
1156
+ ```
1157
+
1158
+ ### Pipeline backed up
1159
+
1160
+ **Increase queue size:**
1161
+
1162
+ ```yaml
1163
+ exporters:
1164
+ otlp/jaeger:
1165
+ sending_queue:
1166
+ queue_size: 10000 # Increase from 5000
1167
+ ```
1168
+
1169
+ **Add more consumers:**
1170
+
1171
+ ```yaml
1172
+ exporters:
1173
+ otlp/jaeger:
1174
+ sending_queue:
1175
+ num_consumers: 20 # Increase from 10
1176
+ ```
1177
+
1178
+ **Monitor queue metrics:**
1179
+
1180
+ ```promql
1181
+ otelcol_exporter_queue_size
1182
+ otelcol_exporter_queue_capacity
1183
+ ```
1184
+
1185
+ ### Configuration errors
1186
+
1187
+ **Validate configuration:**
1188
+
1189
+ ```bash
1190
+ # Check for YAML syntax errors
1191
+ docker-compose exec otel-collector \
1192
+ otelcol validate --config=/etc/otel-collector-config.yaml
1193
+ ```
1194
+
1195
+ **Check logs on startup:**
1196
+
1197
+ ```bash
1198
+ docker-compose logs otel-collector | head -50
1199
+ ```
1200
+
1201
+ ## Use Cases
1202
+
1203
+ ### Centralized Telemetry Collection
1204
+
1205
+ - Collect from multiple applications
1206
+ - Single point for configuration changes
1207
+ - Consistent data enrichment
1208
+ - Unified export to multiple backends
1209
+
1210
+ ### Protocol Translation
1211
+
1212
+ - Receive Jaeger, export to OTLP
1213
+ - Receive Prometheus, export to Cloud Monitoring
1214
+ - Convert legacy formats to OpenTelemetry
1215
+
1216
+ ### Data Processing
1217
+
1218
+ - Filter PII/sensitive data
1219
+ - Add environment/deployment metadata
1220
+ - Sample high-volume traces
1221
+ - Aggregate metrics
1222
+
1223
+ ### Multi-Tenant Environments
1224
+
1225
+ - Route telemetry by tenant ID
1226
+ - Apply different sampling per tenant
1227
+ - Export to tenant-specific backends
1228
+
1229
+ ## Related Overlays
1230
+
1231
+ - **jaeger** - Distributed tracing backend (receives traces from collector)
1232
+ - **prometheus** - Metrics backend (scrapes metrics from collector)
1233
+ - **loki** - Log aggregation backend (receives logs from collector)
1234
+ - **grafana** - Unified visualization for all three signals
1235
+ - **nodejs/python/dotnet/go** - Application frameworks instrumented with OpenTelemetry
1236
+
1237
+ ## Additional Resources
1238
+
1239
+ - [OpenTelemetry Collector Documentation](https://opentelemetry.io/docs/collector/)
1240
+ - [Collector Configuration](https://opentelemetry.io/docs/collector/configuration/)
1241
+ - [Available Receivers](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver)
1242
+ - [Available Processors](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor)
1243
+ - [Available Exporters](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter)
1244
+ - [Performance Best Practices](https://opentelemetry.io/docs/collector/scaling/)
1245
+ - [Troubleshooting Guide](https://opentelemetry.io/docs/collector/troubleshooting/)
1246
+
1247
+ ## Notes
1248
+
1249
+ - This overlay **requires compose stack** (uses docker-compose)
1250
+ - Collector receives on ports **4317** (gRPC) and **4318** (HTTP)
1251
+ - Prometheus scrapes metrics from port **8889**
1252
+ - Health check available on port **13133**
1253
+ - Depends on **jaeger**, **prometheus**, and **loki** overlays
1254
+ - Use hostname **`otel-collector`** from applications
1255
+ - Configuration file is **`otel-collector-config.yaml`**
1256
+ - Always use **memory_limiter** processor to prevent OOM
1257
+ - Always use **batch** processor for performance