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,12 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "runServices": ["prometheus"],
4
+ "_serviceOrder": 1,
5
+ "forwardPorts": [9090],
6
+ "portsAttributes": {
7
+ "9090": {
8
+ "label": "Prometheus",
9
+ "onAutoForward": "openBrowser"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,22 @@
1
+ version: '3.8'
2
+ services:
3
+ prometheus:
4
+ image: prom/prometheus:${PROMETHEUS_VERSION:-latest}
5
+ command:
6
+ - '--config.file=/etc/prometheus/prometheus.yml'
7
+ - '--storage.tsdb.path=/prometheus'
8
+ - '--web.console.libraries=/usr/share/prometheus/console_libraries'
9
+ - '--web.console.templates=/usr/share/prometheus/consoles'
10
+ volumes:
11
+ - ./prometheus-prometheus.yml:/etc/prometheus/prometheus.yml
12
+ - prometheus_data:/prometheus
13
+ ports:
14
+ - '${PROMETHEUS_PORT:-9090}:9090'
15
+ networks:
16
+ - devnet
17
+
18
+ volumes:
19
+ prometheus_data:
20
+
21
+ networks:
22
+ devnet:
@@ -0,0 +1,17 @@
1
+ id: prometheus
2
+ name: Prometheus
3
+ description: Metrics collection and monitoring
4
+ category: observability
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests:
9
+ - alertmanager
10
+ conflicts: []
11
+ tags:
12
+ - observability
13
+ - metrics
14
+ - prometheus
15
+ ports:
16
+ - 9090
17
+ order: 1
@@ -0,0 +1,12 @@
1
+ global:
2
+ scrape_interval: 15s
3
+ evaluation_interval: 15s
4
+
5
+ scrape_configs:
6
+ - job_name: 'prometheus'
7
+ static_configs:
8
+ - targets: ['localhost:9090']
9
+
10
+ - job_name: 'otel-collector'
11
+ static_configs:
12
+ - targets: ['otel-collector:8889']
@@ -0,0 +1,34 @@
1
+ #!/bin/bash
2
+ # Verification script for Prometheus overlay
3
+ # Confirms Prometheus service is accessible
4
+
5
+ set -e
6
+
7
+ echo "🔍 Verifying Prometheus overlay..."
8
+ echo ""
9
+
10
+ # Check if Prometheus service is running
11
+ echo "1️⃣ Checking Prometheus service..."
12
+ # Wait up to 15 seconds for prometheus to be ready
13
+ PROMETHEUS_READY=false
14
+ for i in {1..15}; do
15
+ if curl -sf http://prometheus:9090/-/healthy &> /dev/null; then
16
+ echo " ✅ Prometheus service is ready"
17
+ curl -s http://prometheus:9090/-/healthy
18
+ PROMETHEUS_READY=true
19
+ break
20
+ fi
21
+ sleep 1
22
+ done
23
+
24
+ if [ "$PROMETHEUS_READY" = false ]; then
25
+ echo " ❌ Prometheus service not ready after 15 seconds"
26
+ exit 1
27
+ fi
28
+
29
+ echo ""
30
+ echo "2️⃣ Checking Prometheus version..."
31
+ echo " Prometheus is accessible at http://prometheus:9090"
32
+
33
+ echo ""
34
+ echo "✅ Prometheus overlay verification complete"
@@ -0,0 +1,2 @@
1
+ # Promtail version
2
+ PROMTAIL_VERSION=latest
@@ -0,0 +1,357 @@
1
+ # Promtail Overlay
2
+
3
+ Log shipping agent that collects container logs and sends them to Loki for centralized log aggregation.
4
+
5
+ ## Features
6
+
7
+ - **Promtail agent** - Grafana's official log shipping agent
8
+ - **Docker auto-discovery** - Automatically discovers and tails all container logs
9
+ - **Label extraction** - Extracts service names, container names, and custom labels
10
+ - **JSON parsing** - Automatically parses structured logs
11
+ - **Zero configuration** - Works out-of-box with minimal setup
12
+ - **Loki integration** - Ships logs directly to Loki
13
+
14
+ ## How It Works
15
+
16
+ Promtail is a log shipping agent designed to collect logs from various sources and send them to Loki. In this overlay, Promtail monitors Docker containers and automatically ships their logs to Loki.
17
+
18
+ **Architecture:**
19
+
20
+ ```mermaid
21
+ graph TD
22
+ A[Docker Containers<br/>Application logs<br/>Service logs<br/>System logs] -->|Docker socket| B[Promtail<br/>Discovers containers<br/>Tails log files<br/>Parses JSON logs<br/>Adds labels<br/>Buffers & batches]
23
+ B -->|HTTP Push| C[Loki<br/>Indexes labels<br/>Stores log data<br/>Serves queries]
24
+ ```
25
+
26
+ **What It Does:**
27
+
28
+ 1. **Discovers Containers:** Uses Docker service discovery to find running containers
29
+ 2. **Extracts Metadata:** Pulls container name, image, compose service, and project labels
30
+ 3. **Tails Logs:** Streams logs from `/var/lib/docker/containers/`
31
+ 4. **Parses Content:** Attempts JSON parsing for structured logs
32
+ 5. **Ships to Loki:** Sends logs with rich labels to Loki for storage and querying
33
+
34
+ ## Configuration
35
+
36
+ ### Docker Socket Access
37
+
38
+ Promtail requires access to:
39
+
40
+ - **Docker socket** (`/var/run/docker.sock`) - For service discovery
41
+ - **Container logs** (`/var/lib/docker/containers`) - For reading log files
42
+
43
+ Both are mounted read-only for security.
44
+
45
+ ### Environment Variables
46
+
47
+ The overlay includes a `.env.example` file. Copy it to `.env` and customize:
48
+
49
+ ```bash
50
+ cd .devcontainer
51
+ cp .env.example .env
52
+ ```
53
+
54
+ **Available variables:**
55
+
56
+ ```bash
57
+ # Promtail version
58
+ PROMTAIL_VERSION=latest
59
+ ```
60
+
61
+ ### Label Extraction
62
+
63
+ Promtail automatically extracts these labels from containers:
64
+
65
+ | Label | Source | Example |
66
+ | ----------- | ---------------- | ---------------- |
67
+ | `container` | Container name | `my-app-1` |
68
+ | `image` | Container image | `node:18-alpine` |
69
+ | `service` | Compose service | `api` |
70
+ | `project` | Compose project | `my-project` |
71
+ | `job` | Fixed value | `docker` |
72
+ | `level` | Parsed from JSON | `info`, `error` |
73
+
74
+ ### Customizing Configuration
75
+
76
+ Edit `promtail-config.yaml` in `.devcontainer/`:
77
+
78
+ ```yaml
79
+ # Add custom pipeline stages
80
+ pipeline_stages:
81
+ - match:
82
+ selector: '{service="api"}'
83
+ stages:
84
+ - regex:
85
+ expression: '(?P<timestamp>\S+) (?P<level>\S+) (?P<message>.*)'
86
+ - labels:
87
+ level:
88
+ ```
89
+
90
+ ## Common Commands
91
+
92
+ ### Viewing Logs in Grafana
93
+
94
+ **Simple queries:**
95
+
96
+ ```logql
97
+ # All logs from a specific service
98
+ {service="api"}
99
+
100
+ # Logs from a specific container
101
+ {container="my-app-1"}
102
+
103
+ # Error logs only
104
+ {level="error"}
105
+
106
+ # Logs from a specific image
107
+ {image=~"node:.*"}
108
+ ```
109
+
110
+ **Advanced queries:**
111
+
112
+ ```logql
113
+ # Rate of errors per minute
114
+ rate({level="error"}[1m])
115
+
116
+ # Logs containing specific text
117
+ {service="api"} |= "database connection"
118
+
119
+ # JSON field filtering
120
+ {service="api"} | json | userId="12345"
121
+
122
+ # Count logs by service
123
+ sum by(service) (count_over_time({job="docker"}[5m]))
124
+ ```
125
+
126
+ ### Checking Promtail Status
127
+
128
+ ```bash
129
+ # Check if Promtail is running
130
+ docker ps | grep promtail
131
+
132
+ # View Promtail logs
133
+ docker logs promtail
134
+
135
+ # Check Promtail metrics (from inside dev container)
136
+ curl http://promtail:9080/metrics
137
+
138
+ # See which targets are being scraped
139
+ curl http://promtail:9080/targets
140
+ ```
141
+
142
+ ### Testing Log Collection
143
+
144
+ **Generate test logs:**
145
+
146
+ ```bash
147
+ # Run a test container with logs
148
+ docker run --rm alpine sh -c "echo 'Test log message'"
149
+
150
+ # View in Grafana within seconds:
151
+ # {container="alpine"} |= "Test log"
152
+ ```
153
+
154
+ **Verify logs are reaching Loki:**
155
+
156
+ ```bash
157
+ # Check Loki ingestion
158
+ curl "http://loki:3100/loki/api/v1/query" \
159
+ --data-urlencode 'query={job="docker"}' \
160
+ --data-urlencode 'limit=10'
161
+ ```
162
+
163
+ ## Use Cases
164
+
165
+ - **Centralized logging** - Aggregate logs from all containers in one place
166
+ - **Debugging** - Track application behavior across services
167
+ - **Monitoring** - Alert on error patterns in logs
168
+ - **Audit trails** - Maintain searchable log history
169
+ - **Development** - Real-time log streaming during development
170
+
171
+ **Integrates well with:**
172
+
173
+ - Loki (required) - Log storage and querying
174
+ - Grafana (recommended) - Log visualization and exploration
175
+ - Prometheus (optional) - Correlate metrics with logs
176
+ - Tempo/Jaeger (optional) - Correlate traces with logs
177
+
178
+ ## Log Format Support
179
+
180
+ ### JSON Logs
181
+
182
+ **Application logging (Node.js):**
183
+
184
+ ```javascript
185
+ const logger = require('pino')();
186
+
187
+ logger.info({ userId: '123', action: 'login' }, 'User logged in');
188
+ // Promtail extracts: level=info, userId=123
189
+ ```
190
+
191
+ **Application logging (Python):**
192
+
193
+ ```python
194
+ import logging
195
+ import json
196
+
197
+ logger = logging.getLogger(__name__)
198
+ logger.info(json.dumps({"userId": "123", "action": "login"}))
199
+ ```
200
+
201
+ ### Plain Text Logs
202
+
203
+ **Standard output:**
204
+
205
+ ```bash
206
+ echo "2024-01-15 10:30:00 INFO User logged in"
207
+ # Promtail ships as-is with container labels
208
+ ```
209
+
210
+ ### Custom Parsing
211
+
212
+ Add regex patterns in `promtail-config.yaml`:
213
+
214
+ ```yaml
215
+ pipeline_stages:
216
+ - regex:
217
+ expression: '^(?P<timestamp>\S+) (?P<level>\S+) (?P<message>.*)$'
218
+ - labels:
219
+ level:
220
+ - timestamp:
221
+ source: timestamp
222
+ format: '2006-01-02 15:04:05'
223
+ ```
224
+
225
+ ## Troubleshooting
226
+
227
+ ### Issue: No Logs Appearing
228
+
229
+ **Symptoms:**
230
+
231
+ - Promtail running but logs not in Loki
232
+
233
+ **Solutions:**
234
+
235
+ ```bash
236
+ # Check Promtail can access Docker socket
237
+ docker exec promtail ls -la /var/run/docker.sock
238
+
239
+ # Check Promtail is discovering containers
240
+ docker logs promtail | grep "discovered targets"
241
+
242
+ # Verify Loki is reachable
243
+ docker exec promtail wget -O- http://loki:3100/ready
244
+
245
+ # Check Promtail positions file
246
+ docker exec promtail cat /tmp/positions.yaml
247
+ ```
248
+
249
+ ### Issue: "Permission Denied" on Docker Socket
250
+
251
+ **Symptoms:**
252
+
253
+ - Promtail logs show permission errors
254
+
255
+ **Solution:**
256
+
257
+ ```yaml
258
+ # Update docker-compose.yml to add Promtail to docker group
259
+ services:
260
+ promtail:
261
+ user: '0:0' # Run as root (development only)
262
+ ```
263
+
264
+ ⚠️ **Security Note:** Running as root is acceptable for development but not for production.
265
+
266
+ ### Issue: High Memory Usage
267
+
268
+ **Symptoms:**
269
+
270
+ - Promtail consuming excessive memory
271
+
272
+ **Solutions:**
273
+
274
+ ```yaml
275
+ # Reduce batch size in promtail-config.yaml
276
+ clients:
277
+ - url: http://loki:3100/loki/api/v1/push
278
+ batchwait: 1s
279
+ batchsize: 102400 # Reduce from default 1MB
280
+ ```
281
+
282
+ ### Issue: Logs Not Parsed as JSON
283
+
284
+ **Symptoms:**
285
+
286
+ - JSON logs appear as plain text in Loki
287
+
288
+ **Solution:**
289
+
290
+ - Ensure application logs to stdout in JSON format
291
+ - Check `pipeline_stages` includes `json` stage
292
+ - Some apps need explicit JSON logging configuration
293
+
294
+ ## Security Considerations
295
+
296
+ ⚠️ **Docker Socket Access:** Promtail has read access to the Docker socket, which allows it to discover containers and read logs.
297
+
298
+ **Risks:**
299
+
300
+ - Read access to all container logs (may contain sensitive data)
301
+ - Docker API access (read-only)
302
+
303
+ **Mitigation:**
304
+
305
+ - Mounted as read-only (`:ro`)
306
+ - Development environment only
307
+ - Filter sensitive fields in pipeline stages:
308
+
309
+ ```yaml
310
+ pipeline_stages:
311
+ - replace:
312
+ expression: 'password=\S+'
313
+ replace: 'password=***'
314
+ ```
315
+
316
+ ## Performance Tuning
317
+
318
+ **For high-volume logging:**
319
+
320
+ ```yaml
321
+ # promtail-config.yaml
322
+ clients:
323
+ - url: http://loki:3100/loki/api/v1/push
324
+ batchwait: 500ms # Batch more frequently
325
+ batchsize: 1048576 # Larger batches
326
+ max_backoff: 5m # Retry backoff
327
+ max_retries: 10 # Retry attempts
328
+ ```
329
+
330
+ **Limit log collection:**
331
+
332
+ ```yaml
333
+ # Only collect logs from specific services
334
+ scrape_configs:
335
+ - job_name: docker
336
+ docker_sd_configs:
337
+ - host: unix:///var/run/docker.sock
338
+ relabel_configs:
339
+ # Drop logs from monitoring containers
340
+ - source_labels: ['__meta_docker_container_label_com_docker_compose_service']
341
+ regex: '(promtail|loki|prometheus)'
342
+ action: drop
343
+ ```
344
+
345
+ ## References
346
+
347
+ - [Official Promtail Documentation](https://grafana.com/docs/loki/latest/clients/promtail/)
348
+ - [Promtail Configuration](https://grafana.com/docs/loki/latest/clients/promtail/configuration/)
349
+ - [LogQL Query Language](https://grafana.com/docs/loki/latest/logql/)
350
+ - [Docker Service Discovery](https://grafana.com/docs/loki/latest/clients/promtail/configuration/#docker_sd_configs)
351
+
352
+ **Related Overlays:**
353
+
354
+ - `loki` - Required log storage backend
355
+ - `grafana` - Recommended for log visualization
356
+ - `prometheus` - Optional for metrics correlation
357
+ - `tempo` - Optional for trace-log correlation
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "runServices": ["promtail"],
4
+ "_serviceOrder": 2
5
+ }
@@ -0,0 +1,16 @@
1
+ version: '3.8'
2
+ services:
3
+ promtail:
4
+ image: grafana/promtail:${PROMTAIL_VERSION:-latest}
5
+ command: -config.file=/etc/promtail/promtail-config.yaml
6
+ volumes:
7
+ - ./promtail-config-promtail.yaml:/etc/promtail/promtail-config.yaml
8
+ - /var/lib/docker/containers:/var/lib/docker/containers:ro
9
+ - /var/run/docker.sock:/var/run/docker.sock:ro
10
+ depends_on:
11
+ - loki
12
+ networks:
13
+ - devnet
14
+
15
+ networks:
16
+ devnet:
@@ -0,0 +1,17 @@
1
+ id: promtail
2
+ name: Promtail
3
+ description: Log shipping agent for Loki with Docker auto-discovery
4
+ category: observability
5
+ supports:
6
+ - compose
7
+ requires:
8
+ - loki
9
+ suggests: []
10
+ conflicts: []
11
+ tags:
12
+ - observability
13
+ - logs
14
+ - promtail
15
+ - loki
16
+ ports: []
17
+ order: 2
@@ -0,0 +1,60 @@
1
+ server:
2
+ http_listen_port: 9080
3
+ grpc_listen_port: 0
4
+
5
+ positions:
6
+ filename: /tmp/positions.yaml
7
+
8
+ clients:
9
+ - url: http://loki:3100/loki/api/v1/push
10
+
11
+ scrape_configs:
12
+ # Docker container logs auto-discovery
13
+ - job_name: docker
14
+ docker_sd_configs:
15
+ - host: unix:///var/run/docker.sock
16
+ refresh_interval: 5s
17
+
18
+ relabel_configs:
19
+ # Extract container name
20
+ - source_labels: ['__meta_docker_container_name']
21
+ regex: '/(.*)'
22
+ target_label: 'container'
23
+
24
+ # Extract container image
25
+ - source_labels: ['__meta_docker_container_image']
26
+ target_label: 'image'
27
+
28
+ # Extract compose service name
29
+ - source_labels: ['__meta_docker_container_label_com_docker_compose_service']
30
+ target_label: 'service'
31
+
32
+ # Extract compose project
33
+ - source_labels: ['__meta_docker_container_label_com_docker_compose_project']
34
+ target_label: 'project'
35
+
36
+ # Add job label
37
+ - replacement: 'docker'
38
+ target_label: 'job'
39
+
40
+ pipeline_stages:
41
+ # Docker logs are wrapped in JSON: {log, stream, time}
42
+ # First parse the Docker wrapper
43
+ - docker: {}
44
+
45
+ # Then parse application JSON from the log field
46
+ - json:
47
+ expressions:
48
+ level: level
49
+ msg: message
50
+ trace_id: trace.id
51
+ span_id: span.id
52
+
53
+ # Extract log level as label
54
+ - labels:
55
+ level:
56
+
57
+ # Use Docker's timestamp
58
+ - timestamp:
59
+ source: timestamp
60
+ format: RFC3339Nano
@@ -0,0 +1,31 @@
1
+ #!/bin/bash
2
+ # Promtail verification script
3
+
4
+ echo "🔍 Verifying Promtail installation..."
5
+
6
+ # Track overall success
7
+ ALL_CHECKS_PASSED=true
8
+
9
+ # Check if Promtail service is running
10
+ if docker ps --format '{{.Names}}' | grep -q promtail; then
11
+ echo "✓ Promtail service is running"
12
+ else
13
+ echo "✗ Promtail service is not running"
14
+ ALL_CHECKS_PASSED=false
15
+ fi
16
+
17
+ # Check if Promtail can access Docker socket
18
+ if docker exec promtail test -S /var/run/docker.sock 2>/dev/null; then
19
+ echo "✓ Promtail has access to Docker socket"
20
+ else
21
+ echo "⚠️ Promtail cannot access Docker socket"
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