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.
- package/README.md +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Overlays
|
|
2
|
+
|
|
3
|
+
Overlays are composable configuration fragments that add specific capabilities to your base devcontainer template.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
Each overlay directory contains:
|
|
8
|
+
|
|
9
|
+
- `devcontainer.patch.json` - Partial devcontainer configuration to merge
|
|
10
|
+
- `docker-compose.yml` (optional) - Service definitions for Docker Compose
|
|
11
|
+
- `.env.example` (optional) - Environment variables for this overlay
|
|
12
|
+
- Additional configuration files as needed (e.g., `otel-collector.yml`, config directories)
|
|
13
|
+
|
|
14
|
+
## Available Overlays
|
|
15
|
+
|
|
16
|
+
### Language & Framework
|
|
17
|
+
|
|
18
|
+
- **dotnet** - .NET 10 SDK with C# DevKit, testing tools, and build essentials
|
|
19
|
+
- **nodejs** - Node.js LTS with TypeScript, ESLint, Prettier, and npm tools
|
|
20
|
+
- **python** - Python 3.12 with Pylance, Black formatter, and Ruff linter
|
|
21
|
+
- **mkdocs** - Python with MkDocs and Material theme for documentation
|
|
22
|
+
|
|
23
|
+
### Databases & Storage
|
|
24
|
+
|
|
25
|
+
- **postgres** - PostgreSQL 16 with client tools and environment variables
|
|
26
|
+
- **redis** - Redis 7 with redis-tools and persistence
|
|
27
|
+
- **mongodb** - MongoDB 8 with Mongo Express web UI
|
|
28
|
+
- **mysql** - MySQL 8 with phpMyAdmin web UI
|
|
29
|
+
- **sqlserver** - SQL Server 2022 for Linux
|
|
30
|
+
- **sqlite** - SQLite with litecli and VS Code extensions
|
|
31
|
+
- **minio** - S3-compatible object storage with web console
|
|
32
|
+
|
|
33
|
+
### Messaging & Streaming
|
|
34
|
+
|
|
35
|
+
- **rabbitmq** - RabbitMQ message broker with AMQP protocol and management UI
|
|
36
|
+
- **redpanda** - Kafka-compatible event streaming with web console (lighter than Kafka)
|
|
37
|
+
- **nats** - NATS messaging with JetStream for pub/sub and streaming
|
|
38
|
+
|
|
39
|
+
### Observability
|
|
40
|
+
|
|
41
|
+
- **otel-collector** - OpenTelemetry Collector for traces, metrics, and logs
|
|
42
|
+
- **jaeger** - Jaeger all-in-one for distributed tracing with OTLP support
|
|
43
|
+
- **prometheus** - Prometheus for metrics collection and monitoring
|
|
44
|
+
- **grafana** - Grafana for visualization with pre-configured data sources
|
|
45
|
+
- **loki** - Loki for log aggregation and querying
|
|
46
|
+
|
|
47
|
+
### Cloud Tools
|
|
48
|
+
|
|
49
|
+
- **aws-cli** - AWS command-line tools
|
|
50
|
+
- **azure-cli** - Azure command-line tools
|
|
51
|
+
- **kubectl-helm** - Kubernetes CLI and Helm package manager
|
|
52
|
+
|
|
53
|
+
### Dev Tools
|
|
54
|
+
|
|
55
|
+
- **docker-in-docker** - Docker daemon inside container (conflicts with docker-sock)
|
|
56
|
+
- **docker-sock** - Docker socket mounting (conflicts with docker-in-docker)
|
|
57
|
+
- **playwright** - Browser automation with Chromium installed
|
|
58
|
+
- **codex** - AI-powered code assistant
|
|
59
|
+
|
|
60
|
+
## Environment Variables
|
|
61
|
+
|
|
62
|
+
Each overlay can provide its own `.env.example` file with relevant environment variables. The init tool automatically merges all `.env.example` files from selected overlays into a single `.env.example` in your project.
|
|
63
|
+
|
|
64
|
+
### PostgreSQL Variables
|
|
65
|
+
|
|
66
|
+
- `POSTGRES_VERSION` - PostgreSQL version (default: 16)
|
|
67
|
+
- `POSTGRES_DB` - Database name (default: devdb)
|
|
68
|
+
- `POSTGRES_USER` - Database user (default: postgres)
|
|
69
|
+
- `POSTGRES_PASSWORD` - Database password (default: postgres)
|
|
70
|
+
- `POSTGRES_PORT` - Port mapping (default: 5432)
|
|
71
|
+
|
|
72
|
+
### Redis Variables
|
|
73
|
+
|
|
74
|
+
- `REDIS_VERSION` - Redis version (default: 7)
|
|
75
|
+
- `REDIS_PORT` - Port mapping (default: 6379)
|
|
76
|
+
- `REDIS_PASSWORD` - Optional password for Redis authentication
|
|
77
|
+
|
|
78
|
+
### Observability Variables
|
|
79
|
+
|
|
80
|
+
#### OpenTelemetry Collector
|
|
81
|
+
|
|
82
|
+
- `OTEL_COLLECTOR_VERSION` - Collector version (default: latest)
|
|
83
|
+
|
|
84
|
+
#### Jaeger
|
|
85
|
+
|
|
86
|
+
- `JAEGER_VERSION` - Jaeger version (default: latest)
|
|
87
|
+
|
|
88
|
+
#### Prometheus
|
|
89
|
+
|
|
90
|
+
- `PROMETHEUS_VERSION` - Prometheus version (default: latest)
|
|
91
|
+
|
|
92
|
+
#### Grafana
|
|
93
|
+
|
|
94
|
+
- `GRAFANA_VERSION` - Grafana version (default: latest)
|
|
95
|
+
- `GRAFANA_ADMIN_USER` - Admin username (default: admin)
|
|
96
|
+
- `GRAFANA_ADMIN_PASSWORD` - Admin password (default: admin)
|
|
97
|
+
|
|
98
|
+
#### Loki
|
|
99
|
+
|
|
100
|
+
- `LOKI_VERSION` - Loki version (default: latest)
|
|
101
|
+
|
|
102
|
+
### Using .env
|
|
103
|
+
|
|
104
|
+
1. Run the init tool to generate `.env.example` with your selected overlays
|
|
105
|
+
2. Copy `.env.example` to `.env` in your project root
|
|
106
|
+
3. Customize values as needed
|
|
107
|
+
4. Restart your dev container
|
|
108
|
+
|
|
109
|
+
Example `.env`:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
POSTGRES_PASSWORD=my-secure-password
|
|
113
|
+
REDIS_PASSWORD=another-secure-password
|
|
114
|
+
POSTGRES_VERSION=15
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The `.env` file should be added to `.gitignore` to keep secrets out of version control.
|
|
118
|
+
|
|
119
|
+
## How Overlays Work
|
|
120
|
+
|
|
121
|
+
The init tool merges overlay configurations with your base template:
|
|
122
|
+
|
|
123
|
+
1. **JSON Merging**: Features are deep-merged (package lists concatenated)
|
|
124
|
+
2. **Environment Variables**: Added to devcontainer configuration
|
|
125
|
+
3. **Port Configuration**: Ports appended to forwardPorts, attributes merged for labeled ports
|
|
126
|
+
4. **Docker Compose**: Service files copied as `docker-compose.{overlay}.yml`
|
|
127
|
+
5. **Additional Files**: Any extra files (configs, scripts) are copied to output directory
|
|
128
|
+
6. **Environment Examples**: All `.env.example` files merged into single file
|
|
129
|
+
|
|
130
|
+
### File Handling
|
|
131
|
+
|
|
132
|
+
- `devcontainer.patch.json` - Merged into devcontainer.json
|
|
133
|
+
- `docker-compose.yml` - Copied as `docker-compose.{overlay}.yml`
|
|
134
|
+
- `.env.example` - Merged into combined `.env.example`
|
|
135
|
+
- Other files/directories - Copied as-is to output (e.g., `otel-collector.yml`, config folders)
|
|
136
|
+
|
|
137
|
+
## Adding New Overlays
|
|
138
|
+
|
|
139
|
+
To add a new overlay:
|
|
140
|
+
|
|
141
|
+
1. Create a directory under `overlays/`
|
|
142
|
+
2. Add `overlay.yml` manifest with metadata (category, dependencies, conflicts)
|
|
143
|
+
3. Add `devcontainer.patch.json` with the partial configuration
|
|
144
|
+
4. Optionally add `docker-compose.yml` for services
|
|
145
|
+
5. Optionally add `.env.example` with environment variables
|
|
146
|
+
6. Optionally add `README.md` with usage documentation
|
|
147
|
+
7. Add any additional config files (e.g., `otel-collector.yml`, config directories)
|
|
148
|
+
|
|
149
|
+
See [Creating Overlays Guide](../docs/creating-overlays.md) for complete documentation.
|
|
150
|
+
|
|
151
|
+
## Presets (Meta-Overlays)
|
|
152
|
+
|
|
153
|
+
Presets are special meta-overlays that select combinations of overlays for common scenarios (web-api, microservice, docs-site, fullstack). They're located in `overlays/presets/*.yml`.
|
|
154
|
+
|
|
155
|
+
See [Presets Guide](../docs/presets.md) and [Presets Architecture](../docs/presets-architecture.md) for detailed documentation on creating and using presets.
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
# Alertmanager Overlay
|
|
2
|
+
|
|
3
|
+
Alert routing, grouping, and notification management for Prometheus alerts.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Prometheus Alertmanager** - Handles alerts from Prometheus server
|
|
8
|
+
- **Alert grouping** - Groups similar alerts to reduce noise
|
|
9
|
+
- **Alert routing** - Routes alerts to different receivers based on labels
|
|
10
|
+
- **Deduplication** - Prevents duplicate alert notifications
|
|
11
|
+
- **Silencing** - Temporarily mute specific alerts
|
|
12
|
+
- **Inhibition rules** - Suppress alerts based on other active alerts
|
|
13
|
+
- **Web UI** - Manage alerts, silences, and receivers
|
|
14
|
+
|
|
15
|
+
## How It Works
|
|
16
|
+
|
|
17
|
+
Alertmanager receives alerts from Prometheus, groups them, applies routing rules, and sends notifications to configured receivers (email, Slack, webhook, etc.).
|
|
18
|
+
|
|
19
|
+
**Architecture:**
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
graph TD
|
|
23
|
+
A[Prometheus<br/>Evaluates alert rules<br/>Sends alerts to AM] -->|HTTP POST| B[Alertmanager<br/>Receives alerts<br/>Groups similar alerts<br/>Deduplicates<br/>Applies routing rules<br/>Sends to receivers<br/>UI http://localhost:9093]
|
|
24
|
+
B --> C[Email]
|
|
25
|
+
B --> D[Slack]
|
|
26
|
+
B --> E[Webhook]
|
|
27
|
+
B --> F[PagerDuty]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Alert Flow:**
|
|
31
|
+
|
|
32
|
+
1. **Evaluation:** Prometheus evaluates alert rules every 15 seconds
|
|
33
|
+
2. **Firing:** When condition is true, Prometheus sends alert to Alertmanager
|
|
34
|
+
3. **Grouping:** Alertmanager groups alerts by labels (alertname, cluster, service)
|
|
35
|
+
4. **Routing:** Routes are matched against alert labels
|
|
36
|
+
5. **Notification:** Alerts sent to configured receivers
|
|
37
|
+
6. **Resolution:** When condition becomes false, resolved notification sent
|
|
38
|
+
|
|
39
|
+
## Configuration
|
|
40
|
+
|
|
41
|
+
### Ports
|
|
42
|
+
|
|
43
|
+
- `9093` - Alertmanager web UI and API
|
|
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
|
+
# Alertmanager version
|
|
58
|
+
ALERTMANAGER_VERSION=latest
|
|
59
|
+
|
|
60
|
+
# Alertmanager port
|
|
61
|
+
ALERTMANAGER_PORT=9093
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Prometheus Integration
|
|
65
|
+
|
|
66
|
+
The overlay includes a setup script that automatically configures Prometheus to send alerts to Alertmanager.
|
|
67
|
+
|
|
68
|
+
**Manual configuration (if needed):**
|
|
69
|
+
|
|
70
|
+
Edit `.devcontainer/prometheus-prometheus.yml`:
|
|
71
|
+
|
|
72
|
+
```yaml
|
|
73
|
+
# Add to Prometheus config
|
|
74
|
+
alerting:
|
|
75
|
+
alertmanagers:
|
|
76
|
+
- static_configs:
|
|
77
|
+
- targets: ['alertmanager:9093']
|
|
78
|
+
|
|
79
|
+
rule_files:
|
|
80
|
+
- '/etc/prometheus/alert-rules.yml'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Alert Rules
|
|
84
|
+
|
|
85
|
+
Sample alert rules are provided in `alert-rules.yml`. Copy to your Prometheus overlay and customize:
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
groups:
|
|
89
|
+
- name: my_alerts
|
|
90
|
+
interval: 30s
|
|
91
|
+
rules:
|
|
92
|
+
- alert: HighCPU
|
|
93
|
+
expr: cpu_usage > 80
|
|
94
|
+
for: 5m
|
|
95
|
+
labels:
|
|
96
|
+
severity: warning
|
|
97
|
+
annotations:
|
|
98
|
+
summary: 'High CPU on {{ $labels.instance }}'
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Mount in Prometheus docker-compose.yml:
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
services:
|
|
105
|
+
prometheus:
|
|
106
|
+
volumes:
|
|
107
|
+
- ./alert-rules-alertmanager.yml:/etc/prometheus/alert-rules.yml:ro
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Receivers Configuration
|
|
111
|
+
|
|
112
|
+
Edit `alertmanager.yml` to configure notification channels:
|
|
113
|
+
|
|
114
|
+
**Email receiver:**
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
receivers:
|
|
118
|
+
- name: 'email'
|
|
119
|
+
email_configs:
|
|
120
|
+
- to: 'team@example.com'
|
|
121
|
+
from: 'alertmanager@example.com'
|
|
122
|
+
smarthost: 'smtp.example.com:587'
|
|
123
|
+
auth_username: 'alertmanager'
|
|
124
|
+
auth_password: 'password'
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Slack receiver:**
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
receivers:
|
|
131
|
+
- name: 'slack'
|
|
132
|
+
slack_configs:
|
|
133
|
+
- api_url: 'https://hooks.slack.com/services/XXX'
|
|
134
|
+
channel: '#alerts'
|
|
135
|
+
title: 'Alert: {{ .GroupLabels.alertname }}'
|
|
136
|
+
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Webhook receiver:**
|
|
140
|
+
|
|
141
|
+
```yaml
|
|
142
|
+
receivers:
|
|
143
|
+
- name: 'webhook'
|
|
144
|
+
webhook_configs:
|
|
145
|
+
- url: 'http://my-webhook-server:5001/alerts'
|
|
146
|
+
send_resolved: true
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Common Commands
|
|
150
|
+
|
|
151
|
+
### Accessing Alertmanager UI
|
|
152
|
+
|
|
153
|
+
Open your browser to: http://localhost:9093
|
|
154
|
+
|
|
155
|
+
**UI Features:**
|
|
156
|
+
|
|
157
|
+
- **Alerts:** View active alerts
|
|
158
|
+
- **Silences:** Create/manage silences
|
|
159
|
+
- **Status:** View configuration and runtime info
|
|
160
|
+
|
|
161
|
+
### Creating Silences
|
|
162
|
+
|
|
163
|
+
**Via UI:**
|
|
164
|
+
|
|
165
|
+
1. Navigate to http://localhost:9093/#/silences
|
|
166
|
+
2. Click "New Silence"
|
|
167
|
+
3. Add matchers (e.g., `alertname="HighCPU"`)
|
|
168
|
+
4. Set duration and comment
|
|
169
|
+
5. Click "Create"
|
|
170
|
+
|
|
171
|
+
**Via API:**
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Create a silence for 1 hour
|
|
175
|
+
curl -X POST http://alertmanager:9093/api/v2/silences \
|
|
176
|
+
-H 'Content-Type: application/json' \
|
|
177
|
+
-d '{
|
|
178
|
+
"matchers": [
|
|
179
|
+
{
|
|
180
|
+
"name": "alertname",
|
|
181
|
+
"value": "HighCPU",
|
|
182
|
+
"isRegex": false
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
"startsAt": "2024-01-15T10:00:00Z",
|
|
186
|
+
"endsAt": "2024-01-15T11:00:00Z",
|
|
187
|
+
"createdBy": "admin",
|
|
188
|
+
"comment": "Planned maintenance"
|
|
189
|
+
}'
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Viewing Alerts
|
|
193
|
+
|
|
194
|
+
**Via UI:**
|
|
195
|
+
Navigate to http://localhost:9093/#/alerts
|
|
196
|
+
|
|
197
|
+
**Via API:**
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Get all alerts
|
|
201
|
+
curl http://alertmanager:9093/api/v2/alerts
|
|
202
|
+
|
|
203
|
+
# Get alerts with specific label
|
|
204
|
+
curl http://alertmanager:9093/api/v2/alerts?filter={severity="critical"}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Testing Alerts
|
|
208
|
+
|
|
209
|
+
**Trigger a test alert from Prometheus:**
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Send test alert to Alertmanager
|
|
213
|
+
curl -X POST http://prometheus:9090/-/reload
|
|
214
|
+
|
|
215
|
+
# Or manually POST an alert
|
|
216
|
+
curl -X POST http://alertmanager:9093/api/v1/alerts \
|
|
217
|
+
-H 'Content-Type: application/json' \
|
|
218
|
+
-d '[
|
|
219
|
+
{
|
|
220
|
+
"labels": {
|
|
221
|
+
"alertname": "TestAlert",
|
|
222
|
+
"severity": "warning"
|
|
223
|
+
},
|
|
224
|
+
"annotations": {
|
|
225
|
+
"summary": "This is a test alert"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
]'
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Managing Configuration
|
|
232
|
+
|
|
233
|
+
**Reload configuration without restart:**
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# Send SIGHUP to Alertmanager
|
|
237
|
+
docker exec alertmanager killall -HUP alertmanager
|
|
238
|
+
|
|
239
|
+
# Or use API
|
|
240
|
+
curl -X POST http://alertmanager:9093/-/reload
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Validate configuration:**
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Check config in running container
|
|
247
|
+
docker exec alertmanager amtool check-config /etc/alertmanager/alertmanager.yml
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Use Cases
|
|
251
|
+
|
|
252
|
+
- **Alert routing** - Send critical alerts to PagerDuty, warnings to Slack
|
|
253
|
+
- **Development testing** - Test alert rules and notification channels
|
|
254
|
+
- **Alert deduplication** - Prevent alert storms from overwhelming channels
|
|
255
|
+
- **Maintenance windows** - Silence alerts during planned maintenance
|
|
256
|
+
- **Multi-team notifications** - Route alerts to different teams based on labels
|
|
257
|
+
|
|
258
|
+
**Integrates well with:**
|
|
259
|
+
|
|
260
|
+
- Prometheus (required) - Source of alerts
|
|
261
|
+
- Grafana (optional) - View alerts in dashboards
|
|
262
|
+
- OTel Collector (optional) - Additional metrics sources
|
|
263
|
+
|
|
264
|
+
## Alert Best Practices
|
|
265
|
+
|
|
266
|
+
### Writing Alert Rules
|
|
267
|
+
|
|
268
|
+
**Good alerts are:**
|
|
269
|
+
|
|
270
|
+
1. **Actionable** - Alert on problems you can fix
|
|
271
|
+
2. **Meaningful** - Include context in annotations
|
|
272
|
+
3. **Tuned** - Set appropriate thresholds and durations
|
|
273
|
+
4. **Tested** - Verify alerts work before depending on them
|
|
274
|
+
|
|
275
|
+
**Example of good alert:**
|
|
276
|
+
|
|
277
|
+
```yaml
|
|
278
|
+
- alert: HighErrorRate
|
|
279
|
+
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
|
|
280
|
+
for: 5m
|
|
281
|
+
labels:
|
|
282
|
+
severity: critical
|
|
283
|
+
service: '{{ $labels.service }}'
|
|
284
|
+
annotations:
|
|
285
|
+
summary: 'High error rate on {{ $labels.service }}'
|
|
286
|
+
description: '{{ $labels.service }} has {{ $value | humanizePercentage }} error rate'
|
|
287
|
+
runbook_url: 'https://wiki.example.com/runbooks/high-error-rate'
|
|
288
|
+
dashboard_url: 'http://grafana:3000/d/errors?var-service={{ $labels.service }}'
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Grouping Strategy
|
|
292
|
+
|
|
293
|
+
**Group related alerts:**
|
|
294
|
+
|
|
295
|
+
```yaml
|
|
296
|
+
route:
|
|
297
|
+
group_by: ['alertname', 'cluster', 'service']
|
|
298
|
+
group_wait: 10s # Wait before sending first notification
|
|
299
|
+
group_interval: 5m # Wait before sending updates
|
|
300
|
+
repeat_interval: 4h # Wait before resending same alert
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Separate critical from warnings:**
|
|
304
|
+
|
|
305
|
+
```yaml
|
|
306
|
+
routes:
|
|
307
|
+
- match:
|
|
308
|
+
severity: critical
|
|
309
|
+
receiver: pagerduty
|
|
310
|
+
group_interval: 1m
|
|
311
|
+
|
|
312
|
+
- match:
|
|
313
|
+
severity: warning
|
|
314
|
+
receiver: slack
|
|
315
|
+
group_interval: 10m
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Inhibition Rules
|
|
319
|
+
|
|
320
|
+
**Suppress child alerts when parent is firing:**
|
|
321
|
+
|
|
322
|
+
```yaml
|
|
323
|
+
inhibit_rules:
|
|
324
|
+
# Don't alert on service down if entire cluster is down
|
|
325
|
+
- source_match:
|
|
326
|
+
alertname: 'ClusterDown'
|
|
327
|
+
target_match:
|
|
328
|
+
alertname: 'ServiceDown'
|
|
329
|
+
equal: ['cluster']
|
|
330
|
+
|
|
331
|
+
# Don't warn about high latency if service has errors
|
|
332
|
+
- source_match:
|
|
333
|
+
severity: 'critical'
|
|
334
|
+
target_match:
|
|
335
|
+
severity: 'warning'
|
|
336
|
+
equal: ['service']
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## Troubleshooting
|
|
340
|
+
|
|
341
|
+
### Issue: Alerts Not Appearing
|
|
342
|
+
|
|
343
|
+
**Symptoms:**
|
|
344
|
+
|
|
345
|
+
- Prometheus firing alerts but not in Alertmanager
|
|
346
|
+
|
|
347
|
+
**Solutions:**
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
# Check Prometheus is sending to Alertmanager
|
|
351
|
+
curl http://prometheus:9090/api/v1/alertmanagers
|
|
352
|
+
|
|
353
|
+
# Check Alertmanager received alerts
|
|
354
|
+
curl http://alertmanager:9093/api/v2/alerts
|
|
355
|
+
|
|
356
|
+
# Check Prometheus logs
|
|
357
|
+
docker logs prometheus | grep alertmanager
|
|
358
|
+
|
|
359
|
+
# Check Alertmanager logs
|
|
360
|
+
docker logs alertmanager
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Issue: Notifications Not Sent
|
|
364
|
+
|
|
365
|
+
**Symptoms:**
|
|
366
|
+
|
|
367
|
+
- Alerts in Alertmanager but no notifications received
|
|
368
|
+
|
|
369
|
+
**Solutions:**
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
# Check receiver configuration
|
|
373
|
+
curl http://alertmanager:9093/api/v2/status
|
|
374
|
+
|
|
375
|
+
# Check for silences
|
|
376
|
+
curl http://alertmanager:9093/api/v2/silences
|
|
377
|
+
|
|
378
|
+
# Test receiver manually (for webhook)
|
|
379
|
+
curl -X POST http://my-webhook:5001/alerts \
|
|
380
|
+
-H 'Content-Type: application/json' \
|
|
381
|
+
-d '{"alerts": [{"labels": {"test": "true"}}]}'
|
|
382
|
+
|
|
383
|
+
# Check Alertmanager logs for errors
|
|
384
|
+
docker logs alertmanager | grep -i error
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Issue: Too Many Notifications
|
|
388
|
+
|
|
389
|
+
**Symptoms:**
|
|
390
|
+
|
|
391
|
+
- Getting flooded with alert notifications
|
|
392
|
+
|
|
393
|
+
**Solutions:**
|
|
394
|
+
|
|
395
|
+
```yaml
|
|
396
|
+
# Increase group_interval in alertmanager.yml
|
|
397
|
+
route:
|
|
398
|
+
group_interval: 10m # Increase from default
|
|
399
|
+
repeat_interval: 12h # Reduce notification frequency
|
|
400
|
+
|
|
401
|
+
# Add inhibition rules to suppress related alerts
|
|
402
|
+
inhibit_rules:
|
|
403
|
+
- source_match:
|
|
404
|
+
severity: critical
|
|
405
|
+
target_match:
|
|
406
|
+
severity: warning
|
|
407
|
+
equal: ['service']
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Issue: Configuration Errors
|
|
411
|
+
|
|
412
|
+
**Symptoms:**
|
|
413
|
+
|
|
414
|
+
- Alertmanager fails to start or reload
|
|
415
|
+
|
|
416
|
+
**Solution:**
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
# Validate configuration
|
|
420
|
+
docker exec alertmanager amtool check-config /etc/alertmanager/alertmanager.yml
|
|
421
|
+
|
|
422
|
+
# Check for YAML syntax errors
|
|
423
|
+
yamllint .devcontainer/alertmanager-alertmanager.yml
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## Security Considerations
|
|
427
|
+
|
|
428
|
+
⚠️ **Development Configuration:** This overlay uses basic configuration suitable for development.
|
|
429
|
+
|
|
430
|
+
**For production:**
|
|
431
|
+
|
|
432
|
+
- **Enable TLS** for Alertmanager API
|
|
433
|
+
- **Protect secrets** in receiver configs (use environment variables or secret management)
|
|
434
|
+
- **Restrict access** to Alertmanager UI (add authentication)
|
|
435
|
+
- **Secure webhooks** with HMAC signatures or mutual TLS
|
|
436
|
+
- **Rate limit** API endpoints to prevent abuse
|
|
437
|
+
|
|
438
|
+
**Webhook security example:**
|
|
439
|
+
|
|
440
|
+
```yaml
|
|
441
|
+
receivers:
|
|
442
|
+
- name: 'secure-webhook'
|
|
443
|
+
webhook_configs:
|
|
444
|
+
- url: 'https://webhook:443/alerts'
|
|
445
|
+
http_config:
|
|
446
|
+
tls_config:
|
|
447
|
+
ca_file: /etc/ssl/certs/ca.crt
|
|
448
|
+
basic_auth:
|
|
449
|
+
username: alertmanager
|
|
450
|
+
password_file: /run/secrets/webhook_password
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
## References
|
|
454
|
+
|
|
455
|
+
- [Official Alertmanager Documentation](https://prometheus.io/docs/alerting/latest/alertmanager/)
|
|
456
|
+
- [Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/)
|
|
457
|
+
- [Alert Routing](https://prometheus.io/docs/alerting/latest/alertmanager/#route)
|
|
458
|
+
- [Prometheus Alerting Rules](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/)
|
|
459
|
+
- [amtool CLI](https://github.com/prometheus/alertmanager#amtool)
|
|
460
|
+
|
|
461
|
+
**Related Overlays:**
|
|
462
|
+
|
|
463
|
+
- `prometheus` - Required alert source
|
|
464
|
+
- `grafana` - Optional visualization of alerts
|
|
465
|
+
- `otel-collector` - Optional additional metrics
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Sample Prometheus alert rules
|
|
2
|
+
# Copy this file to prometheus overlay and reference in prometheus.yml
|
|
3
|
+
|
|
4
|
+
groups:
|
|
5
|
+
- name: example_alerts
|
|
6
|
+
interval: 30s
|
|
7
|
+
rules:
|
|
8
|
+
# Container down alert
|
|
9
|
+
- alert: ContainerDown
|
|
10
|
+
expr: up == 0
|
|
11
|
+
for: 1m
|
|
12
|
+
labels:
|
|
13
|
+
severity: critical
|
|
14
|
+
annotations:
|
|
15
|
+
summary: 'Container {{ $labels.instance }} is down'
|
|
16
|
+
description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute.'
|
|
17
|
+
|
|
18
|
+
# High CPU usage
|
|
19
|
+
- alert: HighCPUUsage
|
|
20
|
+
expr: rate(container_cpu_usage_seconds_total[5m]) > 0.8
|
|
21
|
+
for: 5m
|
|
22
|
+
labels:
|
|
23
|
+
severity: warning
|
|
24
|
+
annotations:
|
|
25
|
+
summary: 'High CPU usage on {{ $labels.container }}'
|
|
26
|
+
description: 'Container {{ $labels.container }} CPU usage is above 80% for 5 minutes.'
|
|
27
|
+
|
|
28
|
+
# High memory usage
|
|
29
|
+
- alert: HighMemoryUsage
|
|
30
|
+
expr: (container_memory_usage_bytes / container_spec_memory_limit_bytes) > 0.9
|
|
31
|
+
for: 5m
|
|
32
|
+
labels:
|
|
33
|
+
severity: warning
|
|
34
|
+
annotations:
|
|
35
|
+
summary: 'High memory usage on {{ $labels.container }}'
|
|
36
|
+
description: 'Container {{ $labels.container }} memory usage is above 90% for 5 minutes.'
|
|
37
|
+
|
|
38
|
+
# Too many HTTP 500 errors
|
|
39
|
+
- alert: HighErrorRate
|
|
40
|
+
expr: rate(http_requests_total{status="500"}[5m]) > 0.05
|
|
41
|
+
for: 5m
|
|
42
|
+
labels:
|
|
43
|
+
severity: critical
|
|
44
|
+
annotations:
|
|
45
|
+
summary: 'High error rate on {{ $labels.service }}'
|
|
46
|
+
description: 'Service {{ $labels.service }} has more than 5% 5xx errors for 5 minutes.'
|
|
47
|
+
|
|
48
|
+
# Slow HTTP requests
|
|
49
|
+
- alert: SlowRequests
|
|
50
|
+
expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) > 1.0
|
|
51
|
+
for: 10m
|
|
52
|
+
labels:
|
|
53
|
+
severity: warning
|
|
54
|
+
annotations:
|
|
55
|
+
summary: 'Slow requests on {{ $labels.service }}'
|
|
56
|
+
description: 'Service {{ $labels.service }} p99 latency is above 1 second for 10 minutes.'
|