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