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,273 @@
1
+ # Tempo Overlay
2
+
3
+ Modern distributed tracing backend from Grafana Labs - a lightweight alternative to Jaeger.
4
+
5
+ ## Features
6
+
7
+ - **Grafana Tempo** - Scalable distributed tracing backend
8
+ - **OTLP native** - Native OpenTelemetry Protocol support
9
+ - **Cost-efficient** - Minimal resource footprint
10
+ - **S3-compatible storage** - Works with local filesystem or object storage
11
+ - **TraceQL** - Powerful query language for traces
12
+ - **Grafana integration** - Seamless integration with Grafana dashboards
13
+
14
+ ## How It Works
15
+
16
+ Tempo is a high-volume, minimal-dependency distributed tracing backend designed to be cost-effective and easy to operate. Unlike Jaeger, Tempo doesn't require a database - it stores traces directly to object storage.
17
+
18
+ **Architecture:**
19
+
20
+ ```mermaid
21
+ graph TD
22
+ A[Your Application<br/>Instrumented with OTLP<br/>Sends spans to Tempo] -->|OTLP gRPC| B[Tempo<br/>Distributor receives<br/>Ingester buffers<br/>Compactor optimizes<br/>Querier serves queries<br/>Storage local/S3]
23
+ B -->|Query API| C[Grafana<br/>Tempo datasource<br/>TraceQL queries<br/>Trace visualization]
24
+ ```
25
+
26
+ **Key Differences from Jaeger:**
27
+
28
+ - **Storage:** Tempo uses object storage (S3/local) instead of in-memory/database
29
+ - **Resource Usage:** Lower memory footprint, better for high-volume tracing
30
+ - **Query Language:** TraceQL instead of UI-based filtering
31
+ - **Integration:** Built for Grafana ecosystem
32
+
33
+ ## Configuration
34
+
35
+ ### Ports
36
+
37
+ - `3200` - Tempo HTTP API and metrics endpoint
38
+ - `4317` - OTLP gRPC receiver
39
+
40
+ ### Environment Variables
41
+
42
+ The overlay includes a `.env.example` file. Copy it to `.env` and customize:
43
+
44
+ ```bash
45
+ cd .devcontainer
46
+ cp .env.example .env
47
+ ```
48
+
49
+ **Available variables:**
50
+
51
+ ```bash
52
+ # Tempo version
53
+ TEMPO_VERSION=latest
54
+
55
+ # Tempo ports
56
+ TEMPO_HTTP_PORT=3200
57
+ TEMPO_OTLP_GRPC_PORT=4317
58
+ ```
59
+
60
+ ### Port Configuration
61
+
62
+ Ports can be changed via `--port-offset`:
63
+
64
+ ```bash
65
+ # Offset all ports by 100
66
+ container-superposition --port-offset 100
67
+ # Tempo will be on ports 3300 (HTTP) and 4417 (OTLP)
68
+ ```
69
+
70
+ ## Common Commands
71
+
72
+ ### Sending Traces
73
+
74
+ **Using OpenTelemetry Collector:**
75
+
76
+ ```yaml
77
+ # otel-collector config
78
+ exporters:
79
+ otlp/tempo:
80
+ endpoint: tempo:4317
81
+ tls:
82
+ insecure: true
83
+
84
+ service:
85
+ pipelines:
86
+ traces:
87
+ exporters: [otlp/tempo]
88
+ ```
89
+
90
+ **Direct instrumentation (Node.js example):**
91
+
92
+ ```javascript
93
+ const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
94
+
95
+ const exporter = new OTLPTraceExporter({
96
+ url: 'grpc://tempo:4317',
97
+ });
98
+ ```
99
+
100
+ **Direct instrumentation (Python example):**
101
+
102
+ ```python
103
+ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
104
+
105
+ exporter = OTLPSpanExporter(
106
+ endpoint="tempo:4317",
107
+ insecure=True
108
+ )
109
+ ```
110
+
111
+ ### Querying Traces
112
+
113
+ **Using Grafana:**
114
+
115
+ 1. Open Grafana: http://localhost:3000
116
+ 2. Navigate to Explore
117
+ 3. Select "Tempo" datasource
118
+ 4. Use TraceQL queries:
119
+
120
+ ```traceql
121
+ # Find traces for a specific service
122
+ { service.name = "my-service" }
123
+
124
+ # Find slow traces (> 1 second)
125
+ { duration > 1s }
126
+
127
+ # Find traces with errors
128
+ { status = error }
129
+
130
+ # Complex query
131
+ { service.name = "api-gateway" && http.status_code >= 500 }
132
+ ```
133
+
134
+ **Using Tempo HTTP API:**
135
+
136
+ ```bash
137
+ # Search for recent traces by service name
138
+ curl "http://tempo:3200/api/search?tags=service.name%3Dmy-service&limit=10"
139
+
140
+ # Get specific trace by ID
141
+ curl "http://tempo:3200/api/traces/<trace-id>"
142
+
143
+ # Get trace in Jaeger format
144
+ curl "http://tempo:3200/api/traces/<trace-id>?format=jaeger"
145
+ ```
146
+
147
+ ### Health Checks
148
+
149
+ ```bash
150
+ # Check Tempo health
151
+ curl http://tempo:3200/ready
152
+
153
+ # Get Tempo metrics
154
+ curl http://tempo:3200/metrics
155
+
156
+ # Check ingestion rate
157
+ curl http://tempo:3200/metrics | grep tempo_ingester_bytes_received_total
158
+ ```
159
+
160
+ ## Use Cases
161
+
162
+ - **High-volume tracing** - Handle millions of spans per day
163
+ - **Cost-conscious environments** - Minimize infrastructure costs
164
+ - **Grafana users** - Native integration with Grafana ecosystem
165
+ - **Multi-tenant systems** - Built-in multi-tenancy support
166
+ - **Cloud-native apps** - Works seamlessly with Kubernetes and containers
167
+
168
+ **Integrates well with:**
169
+
170
+ - OpenTelemetry Collector (trace aggregation)
171
+ - Grafana (visualization)
172
+ - Prometheus (metrics correlation)
173
+ - Loki (logs correlation)
174
+
175
+ ## Benefits vs Jaeger
176
+
177
+ | Feature | Tempo | Jaeger |
178
+ | ----------------------- | ------------------------- | -------------------- |
179
+ | **Storage** | Object storage (S3/local) | In-memory/Database |
180
+ | **Memory Usage** | ✅ Low (streaming) | ⚠️ Higher (indexing) |
181
+ | **Query Speed** | ⚠️ Slower (scan) | ✅ Fast (indexed) |
182
+ | **Cost** | ✅ Low (no index) | ⚠️ Higher (storage) |
183
+ | **Grafana Integration** | ✅ Native | ⚠️ Datasource plugin |
184
+ | **TraceQL** | ✅ Yes | ❌ No |
185
+ | **UI** | Via Grafana | ✅ Built-in |
186
+ | **Setup Complexity** | ✅ Simple | ✅ Simple |
187
+
188
+ **When to use Tempo:**
189
+
190
+ - You're already using Grafana
191
+ - You need to store large volumes of traces
192
+ - You want minimal resource usage
193
+ - You prefer TraceQL over UI filtering
194
+
195
+ **When to use Jaeger:**
196
+
197
+ - You need fastest query performance
198
+ - You want a standalone UI
199
+ - You're not using Grafana
200
+ - You prefer UI-based trace exploration
201
+
202
+ ## Troubleshooting
203
+
204
+ ### Issue: Traces Not Appearing
205
+
206
+ **Symptoms:**
207
+
208
+ - Spans sent but not visible in Grafana
209
+
210
+ **Solutions:**
211
+
212
+ ```bash
213
+ # Check if Tempo is receiving spans
214
+ curl http://tempo:3200/metrics | grep tempo_distributor_spans_received_total
215
+
216
+ # Check Tempo logs
217
+ docker logs tempo
218
+
219
+ # Verify OTLP endpoint connectivity
220
+ curl -v http://tempo:4317
221
+ ```
222
+
223
+ ### Issue: "Context Deadline Exceeded"
224
+
225
+ **Symptoms:**
226
+
227
+ - Timeout errors when querying traces
228
+
229
+ **Solution:**
230
+
231
+ - Increase query timeout in Grafana datasource settings
232
+ - Add time range filters to TraceQL queries
233
+
234
+ ### Issue: High Memory Usage
235
+
236
+ **Symptoms:**
237
+
238
+ - Tempo consuming excessive memory
239
+
240
+ **Solutions:**
241
+
242
+ ```yaml
243
+ # Reduce ingester buffer in tempo-config.yaml
244
+ ingester:
245
+ max_block_bytes: 500_000 # Reduce from default
246
+ max_block_duration: 2m # Flush more frequently
247
+ ```
248
+
249
+ ## Security Considerations
250
+
251
+ ⚠️ **Development Only:** This configuration uses local filesystem storage and no authentication.
252
+
253
+ **For production:**
254
+
255
+ - Configure S3-compatible storage (MinIO, AWS S3)
256
+ - Enable multi-tenancy with authentication
257
+ - Use TLS for OTLP receivers
258
+ - Configure retention policies
259
+
260
+ ## References
261
+
262
+ - [Official Tempo Documentation](https://grafana.com/docs/tempo/latest/)
263
+ - [Tempo GitHub Repository](https://github.com/grafana/tempo)
264
+ - [TraceQL Documentation](https://grafana.com/docs/tempo/latest/traceql/)
265
+ - [OpenTelemetry Instrumentation](https://opentelemetry.io/docs/instrumentation/)
266
+
267
+ **Related Overlays:**
268
+
269
+ - `jaeger` - Alternative tracing backend with built-in UI
270
+ - `otel-collector` - Collect and route telemetry to Tempo
271
+ - `grafana` - Visualize traces with TraceQL
272
+ - `prometheus` - Correlate metrics with traces
273
+ - `loki` - Correlate logs with traces
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "runServices": ["tempo"],
4
+ "_serviceOrder": 1,
5
+ "forwardPorts": [3200],
6
+ "portsAttributes": {
7
+ "3200": {
8
+ "label": "Tempo HTTP",
9
+ "onAutoForward": "openBrowser"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,20 @@
1
+ version: '3.8'
2
+ services:
3
+ tempo:
4
+ image: grafana/tempo:${TEMPO_VERSION:-latest}
5
+ command: ['-config.file=/etc/tempo/tempo-config.yaml']
6
+ volumes:
7
+ - ./tempo-config-tempo.yaml:/etc/tempo/tempo-config.yaml
8
+ - tempo_data:/var/tempo
9
+ ports:
10
+ - '${TEMPO_HTTP_PORT:-3200}:3200' # HTTP API and UI
11
+ # Note: OTLP port 4317 not exposed to avoid conflict with otel-collector
12
+ # Apps should send traces to otel-collector, which forwards to Tempo
13
+ networks:
14
+ - devnet
15
+
16
+ volumes:
17
+ tempo_data:
18
+
19
+ networks:
20
+ devnet:
@@ -0,0 +1,20 @@
1
+ id: tempo
2
+ name: Tempo
3
+ description: Lightweight distributed tracing backend (alternative to Jaeger)
4
+ category: observability
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests:
9
+ - otel-collector
10
+ - grafana
11
+ conflicts:
12
+ - jaeger
13
+ tags:
14
+ - observability
15
+ - tracing
16
+ - tempo
17
+ - grafana
18
+ ports:
19
+ - 3200
20
+ order: 1
@@ -0,0 +1,32 @@
1
+ server:
2
+ http_listen_port: 3200
3
+
4
+ distributor:
5
+ receivers:
6
+ otlp:
7
+ protocols:
8
+ grpc:
9
+ endpoint: 0.0.0.0:4317
10
+
11
+ ingester:
12
+ trace_idle_period: 10s
13
+ max_block_bytes: 1000000
14
+ max_block_duration: 5m
15
+
16
+ compactor:
17
+ compaction:
18
+ compaction_window: 1h
19
+ max_compaction_objects: 1000000
20
+ block_retention: 1h
21
+ compacted_block_retention: 10m
22
+
23
+ storage:
24
+ trace:
25
+ backend: local
26
+ local:
27
+ path: /var/tempo/traces
28
+ wal:
29
+ path: /var/tempo/wal
30
+ pool:
31
+ max_workers: 100
32
+ queue_depth: 10000
@@ -0,0 +1,31 @@
1
+ #!/bin/bash
2
+ # Tempo verification script
3
+
4
+ echo "🔍 Verifying Tempo installation..."
5
+
6
+ # Track overall success
7
+ ALL_CHECKS_PASSED=true
8
+
9
+ # Check if Tempo service is running
10
+ if docker ps --format '{{.Names}}' | grep -q tempo; then
11
+ echo "✓ Tempo service is running"
12
+ else
13
+ echo "✗ Tempo service is not running"
14
+ ALL_CHECKS_PASSED=false
15
+ fi
16
+
17
+ # Check if Tempo HTTP API is accessible
18
+ if curl -s -o /dev/null -w "%{http_code}" http://tempo:3200/ready 2>/dev/null | grep -q "200"; then
19
+ echo "✓ Tempo HTTP API is accessible"
20
+ else
21
+ echo "⚠️ Tempo HTTP API not responding yet (may still be starting)"
22
+ fi
23
+
24
+ # Final result
25
+ if [ "$ALL_CHECKS_PASSED" = true ]; then
26
+ echo "✓ All critical checks passed"
27
+ exit 0
28
+ else
29
+ echo "✗ Some checks failed"
30
+ exit 1
31
+ fi