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,537 @@
1
+ # Complete Observability Stack Workflow
2
+
3
+ This guide demonstrates how to use the complete observability stack with all the enhanced components.
4
+
5
+ ## Overview
6
+
7
+ The enhanced observability stack provides a complete solution for monitoring, tracing, and logging in development environments.
8
+
9
+ ### Components
10
+
11
+ **Data Collection:**
12
+
13
+ - **OpenTelemetry Collector** - Centralized telemetry collection and routing
14
+ - **Promtail** - Log shipping with Docker auto-discovery
15
+
16
+ **Storage Backends:**
17
+
18
+ - **Tempo** - Lightweight distributed tracing (alternative to Jaeger)
19
+ - **Jaeger** - Traditional distributed tracing with built-in UI
20
+ - **Prometheus** - Metrics storage and querying
21
+ - **Alertmanager** - Alert routing and notification management
22
+ - **Loki** - Log aggregation and querying
23
+
24
+ **Visualization:**
25
+
26
+ - **Grafana** - Unified observability dashboard with auto-provisioning
27
+
28
+ **Demo Applications:**
29
+
30
+ - **OTel Demo (Node.js)** - Sample app with full OTel instrumentation
31
+ - **OTel Demo (Python)** - Flask app with OTel instrumentation
32
+
33
+ ## Quick Start
34
+
35
+ ### 1. Create a Complete Observability Stack
36
+
37
+ ```bash
38
+ npm run init -- \
39
+ --stack compose \
40
+ --observability otel-collector,tempo,prometheus,alertmanager,loki,promtail,grafana,otel-demo-nodejs
41
+ ```
42
+
43
+ This creates a development environment with:
44
+
45
+ - ✅ Distributed tracing (Tempo)
46
+ - ✅ Metrics collection (Prometheus)
47
+ - ✅ Alert management (Alertmanager)
48
+ - ✅ Log aggregation (Loki)
49
+ - ✅ Automated log shipping (Promtail)
50
+ - ✅ Unified dashboard (Grafana)
51
+ - ✅ Sample instrumented app (Node.js demo)
52
+
53
+ ### 2. Start the Environment
54
+
55
+ ```bash
56
+ cd your-project-name
57
+ code .
58
+ # Dev Containers: Rebuild and Reopen in Container
59
+ ```
60
+
61
+ ### 3. Access the Tools
62
+
63
+ Once started, you can access:
64
+
65
+ - **Grafana** - <http://localhost:3000> (admin/admin)
66
+ - **Prometheus** - <http://localhost:9090>
67
+ - **Tempo** - <http://localhost:3200>
68
+ - **Alertmanager** - <http://localhost:9093>
69
+ - **Loki** - <http://localhost:3100>
70
+ - **Demo App (Node.js)** - <http://localhost:8080>
71
+
72
+ ## Complete Workflow
73
+
74
+ ### Step 1: Generate Telemetry Data
75
+
76
+ **Access the demo app:**
77
+
78
+ ```bash
79
+ # Open in browser
80
+ http://localhost:8080
81
+
82
+ # Or use curl
83
+ curl http://localhost:8080/api/data
84
+ curl http://localhost:8080/api/slow
85
+ curl http://localhost:8080/api/error
86
+ ```
87
+
88
+ **Generate load:**
89
+
90
+ ```bash
91
+ # Normal requests
92
+ for i in {1..50}; do curl -s http://localhost:8080/api/data > /dev/null; done
93
+
94
+ # Slow requests (for latency testing)
95
+ for i in {1..10}; do curl -s http://localhost:8080/api/slow > /dev/null; done
96
+
97
+ # Error requests (for alert testing)
98
+ for i in {1..5}; do curl -s http://localhost:8080/api/error > /dev/null; done
99
+ ```
100
+
101
+ ### Step 2: View Traces in Grafana
102
+
103
+ 1. **Open Grafana:** <http://localhost:3000>
104
+ 2. **Navigate to Explore** (compass icon)
105
+ 3. **Select Tempo datasource** (top dropdown)
106
+ 4. **Search for traces:**
107
+ ```traceql
108
+ { service.name = "otel-demo-nodejs" }
109
+ ```
110
+ 5. **Click on a trace** to see:
111
+ - Request timeline
112
+ - Span details
113
+ - HTTP metadata
114
+ - Custom attributes
115
+ - Related logs (click "Logs for this span")
116
+
117
+ **Advanced queries:**
118
+
119
+ ```traceql
120
+ # Find slow traces
121
+ { duration > 1s }
122
+
123
+ # Find error traces
124
+ { status = error }
125
+
126
+ # Find specific endpoint
127
+ { service.name = "otel-demo-nodejs" && name = "GET /api/data" }
128
+
129
+ # Complex query
130
+ { service.name = "otel-demo-nodejs" && http.status_code >= 500 && duration > 100ms }
131
+ ```
132
+
133
+ ### Step 3: View Metrics in Grafana
134
+
135
+ 1. **Navigate to Explore**
136
+ 2. **Select Prometheus datasource**
137
+ 3. **Run queries:**
138
+
139
+ **Request rate:**
140
+
141
+ ```promql
142
+ rate(http_requests_total{service="otel-demo-nodejs"}[5m])
143
+ ```
144
+
145
+ **Request duration (p99):**
146
+
147
+ ```promql
148
+ histogram_quantile(0.99,
149
+ rate(http_request_duration_seconds_bucket{service="otel-demo-nodejs"}[5m])
150
+ )
151
+ ```
152
+
153
+ **Error rate:**
154
+
155
+ ```promql
156
+ rate(http_requests_total{service="otel-demo-nodejs", status="500"}[5m])
157
+ ```
158
+
159
+ **Active requests:**
160
+
161
+ ```promql
162
+ http_requests_active{service="otel-demo-nodejs"}
163
+ ```
164
+
165
+ 4. **Create dashboard panels:**
166
+ - Click **Add to dashboard**
167
+ - Customize visualization (Graph, Gauge, Stat)
168
+ - Add multiple panels
169
+ - Save dashboard
170
+
171
+ ### Step 4: View Logs in Grafana
172
+
173
+ 1. **Navigate to Explore**
174
+ 2. **Select Loki datasource**
175
+ 3. **Query logs:**
176
+
177
+ **All logs from demo app:**
178
+
179
+ ```logql
180
+ {service="otel-demo-nodejs"}
181
+ ```
182
+
183
+ **Error logs only:**
184
+
185
+ ```logql
186
+ {service="otel-demo-nodejs"} | json | level="error"
187
+ ```
188
+
189
+ **Logs for specific trace:**
190
+
191
+ ```logql
192
+ {service="otel-demo-nodejs"} | json | `trace.id`="<trace-id-from-tempo>"
193
+ ```
194
+
195
+ **Log patterns:**
196
+
197
+ ```logql
198
+ {service="otel-demo-nodejs"} | json | unwrap duration | __error__=""
199
+ ```
200
+
201
+ 4. **Correlate logs with traces:**
202
+ - Find a trace ID in logs
203
+ - Click the trace ID link
204
+ - Grafana jumps to trace view in Tempo
205
+
206
+ ### Step 5: Use Pre-loaded Dashboard
207
+
208
+ 1. **Navigate to Dashboards** (four squares icon)
209
+ 2. **Open "Observability" folder**
210
+ 3. **Click "Observability Overview"**
211
+
212
+ **What's included:**
213
+
214
+ - HTTP request rate by service and status
215
+ - Request duration percentiles (p50, p95, p99)
216
+ - Application logs stream
217
+
218
+ **Customize:**
219
+
220
+ - Click **Dashboard settings** (gear icon)
221
+ - Click **JSON Model** to see structure
222
+ - Modify panels and queries
223
+ - Save as new dashboard
224
+
225
+ ### Step 6: Test Alerting
226
+
227
+ **View sample alert rules:**
228
+
229
+ ```bash
230
+ cat .devcontainer/alert-rules-alertmanager.yml
231
+ ```
232
+
233
+ **Configure Prometheus to use alert rules:**
234
+
235
+ 1. **Edit `.devcontainer/prometheus-prometheus.yml`:**
236
+
237
+ ```yaml
238
+ # Add after existing config
239
+ alerting:
240
+ alertmanagers:
241
+ - static_configs:
242
+ - targets: ['alertmanager:9093']
243
+
244
+ rule_files:
245
+ - '/etc/prometheus/alert-rules.yml'
246
+ ```
247
+
248
+ 2. **Mount alert rules in docker-compose:**
249
+
250
+ ```yaml
251
+ # In .devcontainer/docker-compose.yml, prometheus service
252
+ volumes:
253
+ - ./alert-rules-alertmanager.yml:/etc/prometheus/alert-rules.yml:ro
254
+ ```
255
+
256
+ 3. **Restart Prometheus:**
257
+
258
+ ```bash
259
+ docker restart prometheus
260
+ ```
261
+
262
+ 4. **View alerts in Prometheus:**
263
+ - Open <http://localhost:9090/alerts>
264
+ - See firing alerts
265
+
266
+ 5. **View alerts in Alertmanager:**
267
+ - Open <http://localhost:9093>
268
+ - See grouped alerts
269
+ - Create silences
270
+ - Configure receivers
271
+
272
+ ### Step 7: Multi-Language Tracing
273
+
274
+ **Add Python demo for multi-language testing:**
275
+
276
+ ```bash
277
+ # Update your project with Python demo
278
+ npm run init -- \
279
+ --stack compose \
280
+ --observability otel-demo-python
281
+ ```
282
+
283
+ **Generate traces from both services:**
284
+
285
+ ```bash
286
+ # Node.js
287
+ curl http://localhost:8080/api/data
288
+
289
+ # Python
290
+ curl http://localhost:8081/api/data
291
+ ```
292
+
293
+ **View in Tempo:**
294
+
295
+ - Search for `{ service.name =~ "otel-demo-.*" }`
296
+ - See traces from both services
297
+ - Compare instrumentation approaches
298
+
299
+ ## Advanced Scenarios
300
+
301
+ ### Scenario 1: Debugging Slow Requests
302
+
303
+ 1. **Generate slow traffic:**
304
+
305
+ ```bash
306
+ for i in {1..10}; do curl http://localhost:8080/api/slow; done
307
+ ```
308
+
309
+ 2. **Find slow traces in Tempo:**
310
+
311
+ ```traceql
312
+ { service.name = "otel-demo-nodejs" && duration > 1s }
313
+ ```
314
+
315
+ 3. **Analyze span timing:**
316
+ - Click on trace
317
+ - See which spans took longest
318
+ - Check span events and attributes
319
+
320
+ 4. **Correlate with metrics:**
321
+
322
+ ```promql
323
+ histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
324
+ ```
325
+
326
+ 5. **Check logs for context:**
327
+ ```logql
328
+ {service="otel-demo-nodejs"} | json | url="/api/slow"
329
+ ```
330
+
331
+ ### Scenario 2: Investigating Errors
332
+
333
+ 1. **Generate errors:**
334
+
335
+ ```bash
336
+ for i in {1..5}; do curl http://localhost:8080/api/error; done
337
+ ```
338
+
339
+ 2. **Find error traces:**
340
+
341
+ ```traceql
342
+ { status = error }
343
+ ```
344
+
345
+ 3. **View error rate:**
346
+
347
+ ```promql
348
+ rate(http_requests_total{status="500"}[5m])
349
+ ```
350
+
351
+ 4. **Check error logs:**
352
+
353
+ ```logql
354
+ {service="otel-demo-nodejs"} | json | level="error"
355
+ ```
356
+
357
+ 5. **Create alert rule:**
358
+ ```yaml
359
+ - alert: HighErrorRate
360
+ expr: rate(http_requests_total{status="500"}[5m]) > 0.05
361
+ for: 5m
362
+ labels:
363
+ severity: critical
364
+ ```
365
+
366
+ ### Scenario 3: Service Dependency Mapping
367
+
368
+ 1. **View service map in Grafana:**
369
+ - Open Tempo trace
370
+ - Click "Service graph" tab
371
+ - See service dependencies
372
+
373
+ 2. **Analyze request flow:**
374
+ - See which services call others
375
+ - View request rates between services
376
+ - Identify bottlenecks
377
+
378
+ ### Scenario 4: Log-Driven Development
379
+
380
+ 1. **Watch logs in real-time:**
381
+
382
+ ```logql
383
+ {job="docker"} | json
384
+ ```
385
+
386
+ 2. **Filter by service:**
387
+
388
+ ```logql
389
+ {service="otel-demo-nodejs"}
390
+ ```
391
+
392
+ 3. **Search for specific messages:**
393
+
394
+ ```logql
395
+ {service="otel-demo-nodejs"} |= "User logged in"
396
+ ```
397
+
398
+ 4. **Jump to traces from logs:**
399
+ - Click trace ID in log line
400
+ - See full request context
401
+
402
+ ## Best Practices
403
+
404
+ ### 1. Instrumentation
405
+
406
+ **Do:**
407
+
408
+ - ✅ Use auto-instrumentation when available
409
+ - ✅ Add custom spans for business logic
410
+ - ✅ Include trace context in logs
411
+ - ✅ Use consistent service naming
412
+
413
+ **Don't:**
414
+
415
+ - ❌ Over-instrument (creates noise)
416
+ - ❌ Log sensitive data
417
+ - ❌ Create excessive custom metrics
418
+
419
+ ### 2. Querying
420
+
421
+ **Do:**
422
+
423
+ - ✅ Use TraceQL for complex trace queries
424
+ - ✅ Use PromQL for metric aggregations
425
+ - ✅ Use LogQL for log pattern matching
426
+ - ✅ Save frequent queries as dashboards
427
+
428
+ **Don't:**
429
+
430
+ - ❌ Query unbounded time ranges
431
+ - ❌ Create dashboards with too many panels
432
+ - ❌ Ignore query performance
433
+
434
+ ### 3. Alerting
435
+
436
+ **Do:**
437
+
438
+ - ✅ Alert on SLOs (error rate, latency)
439
+ - ✅ Use meaningful severity levels
440
+ - ✅ Include runbook links in alerts
441
+ - ✅ Test alert rules regularly
442
+
443
+ **Don't:**
444
+
445
+ - ❌ Alert on everything
446
+ - ❌ Create alert fatigue
447
+ - ❌ Ignore alert context
448
+
449
+ ### 4. Dashboard Design
450
+
451
+ **Do:**
452
+
453
+ - ✅ Group related metrics together
454
+ - ✅ Use consistent time ranges
455
+ - ✅ Add panel descriptions
456
+ - ✅ Use variables for filtering
457
+
458
+ **Don't:**
459
+
460
+ - ❌ Create single-purpose dashboards
461
+ - ❌ Overload with too many panels
462
+ - ❌ Use unclear metric names
463
+
464
+ ## Troubleshooting
465
+
466
+ ### No Data in Grafana
467
+
468
+ **Check each component:**
469
+
470
+ ```bash
471
+ # Verify services are running
472
+ docker ps
473
+
474
+ # Check otel-collector is receiving data
475
+ docker logs otel-collector | grep -i received
476
+
477
+ # Check Tempo has traces
478
+ curl http://tempo:3200/api/search
479
+
480
+ # Check Prometheus has metrics
481
+ curl http://prometheus:9090/api/v1/targets
482
+
483
+ # Check Loki has logs
484
+ curl "http://loki:3100/loki/api/v1/query" --data-urlencode 'query={job="docker"}'
485
+ ```
486
+
487
+ ### Traces Not Correlated with Logs
488
+
489
+ **Ensure trace context in logs:**
490
+
491
+ ```javascript
492
+ // Node.js
493
+ logger.info({
494
+ msg: 'User action',
495
+ 'trace.id': span.spanContext().traceId,
496
+ 'span.id': span.spanContext().spanId,
497
+ });
498
+ ```
499
+
500
+ **Check Loki derived fields:**
501
+
502
+ - Open Grafana → Configuration → Data Sources → Loki
503
+ - Verify derived fields match your log format
504
+
505
+ ### Alerts Not Firing
506
+
507
+ **Verify Prometheus config:**
508
+
509
+ ```bash
510
+ # Check alertmanager targets
511
+ curl http://prometheus:9090/api/v1/alertmanagers
512
+
513
+ # Check alert rules
514
+ curl http://prometheus:9090/api/v1/rules
515
+
516
+ # Check if alerts are evaluating
517
+ # Open http://prometheus:9090/alerts
518
+ ```
519
+
520
+ ## Next Steps
521
+
522
+ 1. **Add custom dashboards** for your specific use cases
523
+ 2. **Configure alert receivers** (email, Slack, PagerDuty)
524
+ 3. **Instrument your own applications** with OpenTelemetry
525
+ 4. **Create SLOs and SLIs** for service reliability
526
+ 5. **Explore advanced TraceQL** for complex trace analysis
527
+
528
+ ## Resources
529
+
530
+ - [OpenTelemetry Documentation](https://opentelemetry.io/docs/)
531
+ - [Grafana Documentation](https://grafana.com/docs/grafana/latest/)
532
+ - [Tempo Documentation](https://grafana.com/docs/tempo/latest/)
533
+ - [Prometheus Documentation](https://prometheus.io/docs/)
534
+ - [Loki Documentation](https://grafana.com/docs/loki/latest/)
535
+ - [TraceQL Guide](https://grafana.com/docs/tempo/latest/traceql/)
536
+ - [PromQL Guide](https://prometheus.io/docs/prometheus/latest/querying/basics/)
537
+ - [LogQL Guide](https://grafana.com/docs/loki/latest/logql/)