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