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,1257 @@
|
|
|
1
|
+
# OpenTelemetry Collector Overlay
|
|
2
|
+
|
|
3
|
+
Vendor-agnostic telemetry collection agent that receives, processes, and exports traces, metrics, and logs.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **OpenTelemetry Collector Contrib** - Extended collector with 200+ components
|
|
8
|
+
- **Multiple receivers** - OTLP (gRPC/HTTP), Jaeger, Prometheus, and more
|
|
9
|
+
- **Flexible processors** - Batch, filter, transform, sample telemetry
|
|
10
|
+
- **Multi-backend export** - Send to Jaeger, Prometheus, Loki simultaneously
|
|
11
|
+
- **Pipeline architecture** - Separate processing for traces, metrics, logs
|
|
12
|
+
- **Resource detection** - Automatic environment attribute detection
|
|
13
|
+
- **Health check endpoint** - Monitor collector status
|
|
14
|
+
|
|
15
|
+
## How It Works
|
|
16
|
+
|
|
17
|
+
The OpenTelemetry Collector acts as a centralized agent that receives telemetry from your applications, processes it (batching, filtering, enriching), and exports it to various backends.
|
|
18
|
+
|
|
19
|
+
**Architecture:**
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
graph TD
|
|
23
|
+
A1[Application 1<br/>Sends OTLP traces/metrics] -->|OTLP gRPC/HTTP| B[OpenTelemetry Collector<br/>Receivers → Processors → Exporters<br/>Batch processing<br/>Memory limiting<br/>Attribute enrichment<br/>Sampling]
|
|
24
|
+
A2[Application 2<br/>Sends OTLP logs] -->|OTLP gRPC/HTTP| B
|
|
25
|
+
B --> C[Jaeger<br/>traces]
|
|
26
|
+
B --> D[Prometheus<br/>metrics]
|
|
27
|
+
B --> E[Loki<br/>logs]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Benefits:**
|
|
31
|
+
|
|
32
|
+
- **Decoupling** - Change backends without modifying application code
|
|
33
|
+
- **Centralized processing** - Transform/filter data once, not in every app
|
|
34
|
+
- **Reduced overhead** - Offload heavy processing from applications
|
|
35
|
+
- **Multi-backend** - Send same data to multiple destinations
|
|
36
|
+
- **Protocol translation** - Convert between different telemetry formats
|
|
37
|
+
|
|
38
|
+
## Configuration
|
|
39
|
+
|
|
40
|
+
### Ports
|
|
41
|
+
|
|
42
|
+
- `4317` - OTLP gRPC receiver (primary)
|
|
43
|
+
- `4318` - OTLP HTTP receiver
|
|
44
|
+
- `8888` - Collector's own metrics (internal health)
|
|
45
|
+
- `8889` - Prometheus exporter endpoint (scrape target)
|
|
46
|
+
- `13133` - Health check extension
|
|
47
|
+
|
|
48
|
+
### Environment Variables
|
|
49
|
+
|
|
50
|
+
The overlay includes a `.env.example` file. Copy it to `.env` and customize:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cd .devcontainer
|
|
54
|
+
cp .env.example .env
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Available variables:**
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Collector version
|
|
61
|
+
OTEL_COLLECTOR_VERSION=latest
|
|
62
|
+
|
|
63
|
+
# Port configuration
|
|
64
|
+
OTEL_GRPC_PORT=4317
|
|
65
|
+
OTEL_HTTP_PORT=4318
|
|
66
|
+
OTEL_METRICS_PORT=8888
|
|
67
|
+
OTEL_EXPORTER_PORT=8889
|
|
68
|
+
OTEL_HEALTH_PORT=13133
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Collector Configuration File
|
|
72
|
+
|
|
73
|
+
The collector is configured via `otel-collector-config.yaml`:
|
|
74
|
+
|
|
75
|
+
**Structure:**
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
receivers: # How telemetry enters the collector
|
|
79
|
+
otlp:
|
|
80
|
+
protocols:
|
|
81
|
+
grpc:
|
|
82
|
+
http:
|
|
83
|
+
|
|
84
|
+
processors: # How telemetry is transformed
|
|
85
|
+
batch:
|
|
86
|
+
memory_limiter:
|
|
87
|
+
|
|
88
|
+
exporters: # Where telemetry is sent
|
|
89
|
+
otlp/jaeger:
|
|
90
|
+
prometheus:
|
|
91
|
+
loki:
|
|
92
|
+
|
|
93
|
+
service: # Pipeline definitions
|
|
94
|
+
pipelines:
|
|
95
|
+
traces:
|
|
96
|
+
receivers: [otlp]
|
|
97
|
+
processors: [memory_limiter, batch]
|
|
98
|
+
exporters: [otlp/jaeger]
|
|
99
|
+
metrics:
|
|
100
|
+
receivers: [otlp]
|
|
101
|
+
processors: [memory_limiter, batch]
|
|
102
|
+
exporters: [prometheus]
|
|
103
|
+
logs:
|
|
104
|
+
receivers: [otlp]
|
|
105
|
+
processors: [memory_limiter, batch]
|
|
106
|
+
exporters: [loki]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Port Configuration
|
|
110
|
+
|
|
111
|
+
Ports can be changed via `--port-offset`:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Offset all ports by 100
|
|
115
|
+
container-superposition --port-offset 100
|
|
116
|
+
|
|
117
|
+
# Collector ports become:
|
|
118
|
+
# 4417 (gRPC), 4418 (HTTP), 8988 (metrics), 8989 (prometheus), 13233 (health)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Receivers Configuration
|
|
122
|
+
|
|
123
|
+
### OTLP Receiver (Default)
|
|
124
|
+
|
|
125
|
+
Receives telemetry in OpenTelemetry Protocol format:
|
|
126
|
+
|
|
127
|
+
```yaml
|
|
128
|
+
receivers:
|
|
129
|
+
otlp:
|
|
130
|
+
protocols:
|
|
131
|
+
grpc:
|
|
132
|
+
endpoint: 0.0.0.0:4317
|
|
133
|
+
http:
|
|
134
|
+
endpoint: 0.0.0.0:4318
|
|
135
|
+
cors:
|
|
136
|
+
allowed_origins:
|
|
137
|
+
- http://*
|
|
138
|
+
- https://*
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Jaeger Receiver
|
|
142
|
+
|
|
143
|
+
Receive traces in Jaeger format:
|
|
144
|
+
|
|
145
|
+
```yaml
|
|
146
|
+
receivers:
|
|
147
|
+
jaeger:
|
|
148
|
+
protocols:
|
|
149
|
+
grpc:
|
|
150
|
+
endpoint: 0.0.0.0:14250
|
|
151
|
+
thrift_http:
|
|
152
|
+
endpoint: 0.0.0.0:14268
|
|
153
|
+
thrift_compact:
|
|
154
|
+
endpoint: 0.0.0.0:6831
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Prometheus Receiver
|
|
158
|
+
|
|
159
|
+
Scrape metrics from Prometheus endpoints:
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
receivers:
|
|
163
|
+
prometheus:
|
|
164
|
+
config:
|
|
165
|
+
scrape_configs:
|
|
166
|
+
- job_name: 'my-app'
|
|
167
|
+
scrape_interval: 10s
|
|
168
|
+
static_configs:
|
|
169
|
+
- targets: ['my-app:8080']
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Filelog Receiver
|
|
173
|
+
|
|
174
|
+
Read logs from files:
|
|
175
|
+
|
|
176
|
+
```yaml
|
|
177
|
+
receivers:
|
|
178
|
+
filelog:
|
|
179
|
+
include:
|
|
180
|
+
- /var/log/myapp/*.log
|
|
181
|
+
start_at: end
|
|
182
|
+
operators:
|
|
183
|
+
- type: json_parser
|
|
184
|
+
timestamp:
|
|
185
|
+
parse_from: attributes.time
|
|
186
|
+
layout: '%Y-%m-%d %H:%M:%S'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Hostmetrics Receiver
|
|
190
|
+
|
|
191
|
+
Collect system metrics:
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
receivers:
|
|
195
|
+
hostmetrics:
|
|
196
|
+
collection_interval: 30s
|
|
197
|
+
scrapers:
|
|
198
|
+
cpu:
|
|
199
|
+
memory:
|
|
200
|
+
disk:
|
|
201
|
+
network:
|
|
202
|
+
filesystem:
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Processors Configuration
|
|
206
|
+
|
|
207
|
+
### Batch Processor (Recommended)
|
|
208
|
+
|
|
209
|
+
Batches telemetry for efficient export:
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
processors:
|
|
213
|
+
batch:
|
|
214
|
+
timeout: 10s # Send batch every 10s
|
|
215
|
+
send_batch_size: 1024 # Or when 1024 items collected
|
|
216
|
+
send_batch_max_size: 2048 # Hard limit on batch size
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Benefits:**
|
|
220
|
+
|
|
221
|
+
- Reduces network overhead
|
|
222
|
+
- Better compression
|
|
223
|
+
- More efficient backend writes
|
|
224
|
+
|
|
225
|
+
### Memory Limiter Processor (Critical)
|
|
226
|
+
|
|
227
|
+
Prevents OOM by limiting memory usage:
|
|
228
|
+
|
|
229
|
+
```yaml
|
|
230
|
+
processors:
|
|
231
|
+
memory_limiter:
|
|
232
|
+
check_interval: 1s # How often to check memory
|
|
233
|
+
limit_mib: 512 # Hard limit (triggers data drop)
|
|
234
|
+
spike_limit_mib: 128 # Temporary spike allowance
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**When limit is reached:**
|
|
238
|
+
|
|
239
|
+
1. Stops accepting new data
|
|
240
|
+
2. Flushes existing batches
|
|
241
|
+
3. Resumes when memory drops below limit
|
|
242
|
+
|
|
243
|
+
### Attributes Processor
|
|
244
|
+
|
|
245
|
+
Add, update, or delete attributes:
|
|
246
|
+
|
|
247
|
+
```yaml
|
|
248
|
+
processors:
|
|
249
|
+
attributes:
|
|
250
|
+
actions:
|
|
251
|
+
- key: environment
|
|
252
|
+
value: development
|
|
253
|
+
action: insert
|
|
254
|
+
- key: sensitive_data
|
|
255
|
+
action: delete
|
|
256
|
+
- key: http.url
|
|
257
|
+
pattern: ^(.*)(\?.*)$
|
|
258
|
+
action: extract
|
|
259
|
+
from_attribute: http.url
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Resource Processor
|
|
263
|
+
|
|
264
|
+
Modify resource attributes:
|
|
265
|
+
|
|
266
|
+
```yaml
|
|
267
|
+
processors:
|
|
268
|
+
resource:
|
|
269
|
+
attributes:
|
|
270
|
+
- key: deployment.environment
|
|
271
|
+
value: development
|
|
272
|
+
action: upsert
|
|
273
|
+
- key: service.namespace
|
|
274
|
+
value: mycompany
|
|
275
|
+
action: insert
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Filter Processor
|
|
279
|
+
|
|
280
|
+
Drop spans/metrics based on conditions:
|
|
281
|
+
|
|
282
|
+
```yaml
|
|
283
|
+
processors:
|
|
284
|
+
filter:
|
|
285
|
+
traces:
|
|
286
|
+
span:
|
|
287
|
+
- 'attributes["http.url"] == "/health"'
|
|
288
|
+
- 'name == "health-check"'
|
|
289
|
+
metrics:
|
|
290
|
+
metric:
|
|
291
|
+
- 'name == "noisy_metric"'
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Span Processor
|
|
295
|
+
|
|
296
|
+
Modify span names and attributes:
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
processors:
|
|
300
|
+
span:
|
|
301
|
+
name:
|
|
302
|
+
from_attributes: ['http.method', 'http.route']
|
|
303
|
+
separator: ' '
|
|
304
|
+
include:
|
|
305
|
+
match_type: regexp
|
|
306
|
+
services: ['my-service']
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Tail Sampling Processor
|
|
310
|
+
|
|
311
|
+
Intelligent sampling based on trace properties:
|
|
312
|
+
|
|
313
|
+
```yaml
|
|
314
|
+
processors:
|
|
315
|
+
tail_sampling:
|
|
316
|
+
decision_wait: 10s
|
|
317
|
+
num_traces: 100
|
|
318
|
+
expected_new_traces_per_sec: 10
|
|
319
|
+
policies:
|
|
320
|
+
- name: errors
|
|
321
|
+
type: status_code
|
|
322
|
+
status_code:
|
|
323
|
+
status_codes: [ERROR]
|
|
324
|
+
- name: slow-traces
|
|
325
|
+
type: latency
|
|
326
|
+
latency:
|
|
327
|
+
threshold_ms: 1000
|
|
328
|
+
- name: probabilistic
|
|
329
|
+
type: probabilistic
|
|
330
|
+
probabilistic:
|
|
331
|
+
sampling_percentage: 10
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Transform Processor
|
|
335
|
+
|
|
336
|
+
Advanced transformations with OTTL:
|
|
337
|
+
|
|
338
|
+
```yaml
|
|
339
|
+
processors:
|
|
340
|
+
transform:
|
|
341
|
+
trace_statements:
|
|
342
|
+
- context: span
|
|
343
|
+
statements:
|
|
344
|
+
- set(attributes["http.status_class"], "2xx") where attributes["http.status_code"] >= 200 and attributes["http.status_code"] < 300
|
|
345
|
+
- set(attributes["error"], true) where status.code == STATUS_CODE_ERROR
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Exporters Configuration
|
|
349
|
+
|
|
350
|
+
### OTLP Exporter (Jaeger)
|
|
351
|
+
|
|
352
|
+
Export traces to Jaeger via OTLP:
|
|
353
|
+
|
|
354
|
+
```yaml
|
|
355
|
+
exporters:
|
|
356
|
+
otlp/jaeger:
|
|
357
|
+
endpoint: jaeger:4317
|
|
358
|
+
tls:
|
|
359
|
+
insecure: true
|
|
360
|
+
sending_queue:
|
|
361
|
+
enabled: true
|
|
362
|
+
num_consumers: 10
|
|
363
|
+
queue_size: 1000
|
|
364
|
+
retry_on_failure:
|
|
365
|
+
enabled: true
|
|
366
|
+
initial_interval: 5s
|
|
367
|
+
max_interval: 30s
|
|
368
|
+
max_elapsed_time: 300s
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Prometheus Exporter
|
|
372
|
+
|
|
373
|
+
Expose metrics for Prometheus to scrape:
|
|
374
|
+
|
|
375
|
+
```yaml
|
|
376
|
+
exporters:
|
|
377
|
+
prometheus:
|
|
378
|
+
endpoint: '0.0.0.0:8889'
|
|
379
|
+
namespace: otelcol
|
|
380
|
+
const_labels:
|
|
381
|
+
environment: development
|
|
382
|
+
send_timestamps: true
|
|
383
|
+
metric_expiration: 5m
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Loki Exporter
|
|
387
|
+
|
|
388
|
+
Export logs to Grafana Loki:
|
|
389
|
+
|
|
390
|
+
```yaml
|
|
391
|
+
exporters:
|
|
392
|
+
loki:
|
|
393
|
+
endpoint: http://loki:3100/loki/api/v1/push
|
|
394
|
+
labels:
|
|
395
|
+
attributes:
|
|
396
|
+
service.name: 'service_name'
|
|
397
|
+
severity: 'severity'
|
|
398
|
+
host.name: 'host_name'
|
|
399
|
+
tenant_id: 'dev'
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### OTLP HTTP Exporter
|
|
403
|
+
|
|
404
|
+
Export to OTLP-compatible backends:
|
|
405
|
+
|
|
406
|
+
```yaml
|
|
407
|
+
exporters:
|
|
408
|
+
otlphttp:
|
|
409
|
+
endpoint: https://ingest.example.com
|
|
410
|
+
headers:
|
|
411
|
+
api-key: '${API_KEY}'
|
|
412
|
+
compression: gzip
|
|
413
|
+
timeout: 30s
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### File Exporter (Debug)
|
|
417
|
+
|
|
418
|
+
Write telemetry to file:
|
|
419
|
+
|
|
420
|
+
```yaml
|
|
421
|
+
exporters:
|
|
422
|
+
file:
|
|
423
|
+
path: /tmp/otel-output.json
|
|
424
|
+
rotation:
|
|
425
|
+
max_megabytes: 100
|
|
426
|
+
max_days: 3
|
|
427
|
+
max_backups: 3
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Debug Exporter
|
|
431
|
+
|
|
432
|
+
Log telemetry to console (development only):
|
|
433
|
+
|
|
434
|
+
```yaml
|
|
435
|
+
exporters:
|
|
436
|
+
debug:
|
|
437
|
+
verbosity: detailed # or: basic, normal
|
|
438
|
+
sampling_initial: 5
|
|
439
|
+
sampling_thereafter: 200
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
## Pipeline Examples
|
|
443
|
+
|
|
444
|
+
### Traces Pipeline
|
|
445
|
+
|
|
446
|
+
```yaml
|
|
447
|
+
service:
|
|
448
|
+
pipelines:
|
|
449
|
+
traces:
|
|
450
|
+
receivers: [otlp, jaeger]
|
|
451
|
+
processors:
|
|
452
|
+
- memory_limiter
|
|
453
|
+
- resource
|
|
454
|
+
- batch
|
|
455
|
+
- tail_sampling
|
|
456
|
+
exporters: [otlp/jaeger, debug]
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Metrics Pipeline
|
|
460
|
+
|
|
461
|
+
```yaml
|
|
462
|
+
service:
|
|
463
|
+
pipelines:
|
|
464
|
+
metrics:
|
|
465
|
+
receivers: [otlp, prometheus, hostmetrics]
|
|
466
|
+
processors:
|
|
467
|
+
- memory_limiter
|
|
468
|
+
- resource
|
|
469
|
+
- attributes
|
|
470
|
+
- batch
|
|
471
|
+
exporters: [prometheus, debug]
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Logs Pipeline
|
|
475
|
+
|
|
476
|
+
```yaml
|
|
477
|
+
service:
|
|
478
|
+
pipelines:
|
|
479
|
+
logs:
|
|
480
|
+
receivers: [otlp, filelog]
|
|
481
|
+
processors:
|
|
482
|
+
- memory_limiter
|
|
483
|
+
- resource
|
|
484
|
+
- attributes
|
|
485
|
+
- batch
|
|
486
|
+
exporters: [loki, debug]
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### Multi-Signal Pipeline
|
|
490
|
+
|
|
491
|
+
Process different signals independently:
|
|
492
|
+
|
|
493
|
+
```yaml
|
|
494
|
+
service:
|
|
495
|
+
pipelines:
|
|
496
|
+
# Production traces (sampled)
|
|
497
|
+
traces/prod:
|
|
498
|
+
receivers: [otlp]
|
|
499
|
+
processors: [tail_sampling, batch]
|
|
500
|
+
exporters: [otlp/jaeger]
|
|
501
|
+
|
|
502
|
+
# Debug traces (all)
|
|
503
|
+
traces/debug:
|
|
504
|
+
receivers: [otlp]
|
|
505
|
+
processors: [batch]
|
|
506
|
+
exporters: [debug]
|
|
507
|
+
|
|
508
|
+
# Application metrics
|
|
509
|
+
metrics/app:
|
|
510
|
+
receivers: [otlp]
|
|
511
|
+
processors: [batch]
|
|
512
|
+
exporters: [prometheus]
|
|
513
|
+
|
|
514
|
+
# System metrics
|
|
515
|
+
metrics/system:
|
|
516
|
+
receivers: [hostmetrics]
|
|
517
|
+
processors: [resource, batch]
|
|
518
|
+
exporters: [prometheus]
|
|
519
|
+
|
|
520
|
+
# Application logs
|
|
521
|
+
logs/app:
|
|
522
|
+
receivers: [otlp]
|
|
523
|
+
processors: [attributes, batch]
|
|
524
|
+
exporters: [loki]
|
|
525
|
+
|
|
526
|
+
# File logs
|
|
527
|
+
logs/files:
|
|
528
|
+
receivers: [filelog]
|
|
529
|
+
processors: [resource, batch]
|
|
530
|
+
exporters: [loki]
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
## Application Integration
|
|
534
|
+
|
|
535
|
+
### Node.js (All Signals)
|
|
536
|
+
|
|
537
|
+
Install dependencies:
|
|
538
|
+
|
|
539
|
+
```bash
|
|
540
|
+
npm install @opentelemetry/sdk-node \
|
|
541
|
+
@opentelemetry/auto-instrumentations-node \
|
|
542
|
+
@opentelemetry/exporter-trace-otlp-grpc \
|
|
543
|
+
@opentelemetry/exporter-metrics-otlp-grpc \
|
|
544
|
+
@opentelemetry/exporter-logs-otlp-grpc
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
**Comprehensive setup:**
|
|
548
|
+
|
|
549
|
+
```javascript
|
|
550
|
+
// tracing.js
|
|
551
|
+
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
552
|
+
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
|
|
553
|
+
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
|
|
554
|
+
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
|
|
555
|
+
const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-grpc');
|
|
556
|
+
const { Resource } = require('@opentelemetry/resources');
|
|
557
|
+
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
|
|
558
|
+
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
|
|
559
|
+
|
|
560
|
+
const resource = new Resource({
|
|
561
|
+
[SemanticResourceAttributes.SERVICE_NAME]: 'my-service',
|
|
562
|
+
[SemanticResourceAttributes.SERVICE_VERSION]: '1.0.0',
|
|
563
|
+
[SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: 'development',
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
const sdk = new NodeSDK({
|
|
567
|
+
resource,
|
|
568
|
+
traceExporter: new OTLPTraceExporter({
|
|
569
|
+
url: 'http://otel-collector:4317',
|
|
570
|
+
}),
|
|
571
|
+
metricReader: new PeriodicExportingMetricReader({
|
|
572
|
+
exporter: new OTLPMetricExporter({
|
|
573
|
+
url: 'http://otel-collector:4317',
|
|
574
|
+
}),
|
|
575
|
+
exportIntervalMillis: 60000, // Export every minute
|
|
576
|
+
}),
|
|
577
|
+
logRecordProcessor: new BatchLogRecordProcessor(
|
|
578
|
+
new OTLPLogExporter({
|
|
579
|
+
url: 'http://otel-collector:4317',
|
|
580
|
+
})
|
|
581
|
+
),
|
|
582
|
+
instrumentations: [getNodeAutoInstrumentations()],
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
sdk.start();
|
|
586
|
+
|
|
587
|
+
process.on('SIGTERM', () => {
|
|
588
|
+
sdk.shutdown().finally(() => process.exit(0));
|
|
589
|
+
});
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
### Python (All Signals)
|
|
593
|
+
|
|
594
|
+
Install dependencies:
|
|
595
|
+
|
|
596
|
+
```bash
|
|
597
|
+
pip install opentelemetry-distro \
|
|
598
|
+
opentelemetry-exporter-otlp-proto-grpc \
|
|
599
|
+
opentelemetry-instrumentation
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
**Comprehensive setup:**
|
|
603
|
+
|
|
604
|
+
```python
|
|
605
|
+
from opentelemetry import trace, metrics, _logs
|
|
606
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
607
|
+
from opentelemetry.sdk.metrics import MeterProvider
|
|
608
|
+
from opentelemetry.sdk._logs import LoggerProvider
|
|
609
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
610
|
+
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
|
|
611
|
+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
|
|
612
|
+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
613
|
+
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
|
|
614
|
+
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
|
|
615
|
+
from opentelemetry.sdk.resources import Resource, SERVICE_NAME, SERVICE_VERSION
|
|
616
|
+
|
|
617
|
+
# Configure resource
|
|
618
|
+
resource = Resource.create({
|
|
619
|
+
SERVICE_NAME: "my-service",
|
|
620
|
+
SERVICE_VERSION: "1.0.0",
|
|
621
|
+
"deployment.environment": "development",
|
|
622
|
+
})
|
|
623
|
+
|
|
624
|
+
# Setup tracing
|
|
625
|
+
trace.set_tracer_provider(TracerProvider(resource=resource))
|
|
626
|
+
trace.get_tracer_provider().add_span_processor(
|
|
627
|
+
BatchSpanProcessor(OTLPSpanExporter(endpoint="http://otel-collector:4317", insecure=True))
|
|
628
|
+
)
|
|
629
|
+
|
|
630
|
+
# Setup metrics
|
|
631
|
+
metrics.set_meter_provider(
|
|
632
|
+
MeterProvider(
|
|
633
|
+
resource=resource,
|
|
634
|
+
metric_readers=[
|
|
635
|
+
PeriodicExportingMetricReader(
|
|
636
|
+
OTLPMetricExporter(endpoint="http://otel-collector:4317", insecure=True),
|
|
637
|
+
export_interval_millis=60000,
|
|
638
|
+
)
|
|
639
|
+
],
|
|
640
|
+
)
|
|
641
|
+
)
|
|
642
|
+
|
|
643
|
+
# Setup logging
|
|
644
|
+
_logs.set_logger_provider(LoggerProvider(resource=resource))
|
|
645
|
+
_logs.get_logger_provider().add_log_record_processor(
|
|
646
|
+
BatchLogRecordProcessor(OTLPLogExporter(endpoint="http://otel-collector:4317", insecure=True))
|
|
647
|
+
)
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
### .NET (All Signals)
|
|
651
|
+
|
|
652
|
+
Install packages:
|
|
653
|
+
|
|
654
|
+
```bash
|
|
655
|
+
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
|
|
656
|
+
dotnet add package OpenTelemetry.Extensions.Hosting
|
|
657
|
+
dotnet add package OpenTelemetry.Instrumentation.AspNetCore
|
|
658
|
+
dotnet add package OpenTelemetry.Instrumentation.Http
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
**ASP.NET Core configuration:**
|
|
662
|
+
|
|
663
|
+
```csharp
|
|
664
|
+
using OpenTelemetry.Logs;
|
|
665
|
+
using OpenTelemetry.Metrics;
|
|
666
|
+
using OpenTelemetry.Resources;
|
|
667
|
+
using OpenTelemetry.Trace;
|
|
668
|
+
|
|
669
|
+
var builder = WebApplication.CreateBuilder(args);
|
|
670
|
+
|
|
671
|
+
var resourceBuilder = ResourceBuilder.CreateDefault()
|
|
672
|
+
.AddService("my-service", serviceVersion: "1.0.0")
|
|
673
|
+
.AddAttributes(new Dictionary<string, object>
|
|
674
|
+
{
|
|
675
|
+
["deployment.environment"] = "development"
|
|
676
|
+
});
|
|
677
|
+
|
|
678
|
+
// Configure OpenTelemetry
|
|
679
|
+
builder.Services.AddOpenTelemetry()
|
|
680
|
+
.ConfigureResource(resource => resource = resourceBuilder)
|
|
681
|
+
.WithTracing(tracing => tracing
|
|
682
|
+
.AddAspNetCoreInstrumentation()
|
|
683
|
+
.AddHttpClientInstrumentation()
|
|
684
|
+
.AddOtlpExporter(options =>
|
|
685
|
+
{
|
|
686
|
+
options.Endpoint = new Uri("http://otel-collector:4317");
|
|
687
|
+
}))
|
|
688
|
+
.WithMetrics(metrics => metrics
|
|
689
|
+
.AddAspNetCoreInstrumentation()
|
|
690
|
+
.AddHttpClientInstrumentation()
|
|
691
|
+
.AddOtlpExporter(options =>
|
|
692
|
+
{
|
|
693
|
+
options.Endpoint = new Uri("http://otel-collector:4317");
|
|
694
|
+
}));
|
|
695
|
+
|
|
696
|
+
// Configure logging
|
|
697
|
+
builder.Logging.AddOpenTelemetry(logging =>
|
|
698
|
+
{
|
|
699
|
+
logging.SetResourceBuilder(resourceBuilder);
|
|
700
|
+
logging.AddOtlpExporter(options =>
|
|
701
|
+
{
|
|
702
|
+
options.Endpoint = new Uri("http://otel-collector:4317");
|
|
703
|
+
});
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
var app = builder.Build();
|
|
707
|
+
app.Run();
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
### Go (All Signals)
|
|
711
|
+
|
|
712
|
+
Install dependencies:
|
|
713
|
+
|
|
714
|
+
```bash
|
|
715
|
+
go get go.opentelemetry.io/otel
|
|
716
|
+
go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
|
|
717
|
+
go get go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc
|
|
718
|
+
go get go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
**Complete setup:**
|
|
722
|
+
|
|
723
|
+
```go
|
|
724
|
+
package main
|
|
725
|
+
|
|
726
|
+
import (
|
|
727
|
+
"context"
|
|
728
|
+
"log"
|
|
729
|
+
"time"
|
|
730
|
+
|
|
731
|
+
"go.opentelemetry.io/otel"
|
|
732
|
+
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
|
733
|
+
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
|
|
734
|
+
"go.opentelemetry.io/otel/sdk/metric"
|
|
735
|
+
"go.opentelemetry.io/otel/sdk/resource"
|
|
736
|
+
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
|
737
|
+
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
|
|
738
|
+
)
|
|
739
|
+
|
|
740
|
+
func initProvider() func() {
|
|
741
|
+
ctx := context.Background()
|
|
742
|
+
|
|
743
|
+
res, err := resource.New(ctx,
|
|
744
|
+
resource.WithAttributes(
|
|
745
|
+
semconv.ServiceName("my-service"),
|
|
746
|
+
semconv.ServiceVersion("1.0.0"),
|
|
747
|
+
),
|
|
748
|
+
)
|
|
749
|
+
if err != nil {
|
|
750
|
+
log.Fatal(err)
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
// Setup tracing
|
|
754
|
+
traceExporter, err := otlptracegrpc.New(ctx,
|
|
755
|
+
otlptracegrpc.WithEndpoint("otel-collector:4317"),
|
|
756
|
+
otlptracegrpc.WithInsecure(),
|
|
757
|
+
)
|
|
758
|
+
if err != nil {
|
|
759
|
+
log.Fatal(err)
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
tp := sdktrace.NewTracerProvider(
|
|
763
|
+
sdktrace.WithBatcher(traceExporter),
|
|
764
|
+
sdktrace.WithResource(res),
|
|
765
|
+
)
|
|
766
|
+
otel.SetTracerProvider(tp)
|
|
767
|
+
|
|
768
|
+
// Setup metrics
|
|
769
|
+
metricExporter, err := otlpmetricgrpc.New(ctx,
|
|
770
|
+
otlpmetricgrpc.WithEndpoint("otel-collector:4317"),
|
|
771
|
+
otlpmetricgrpc.WithInsecure(),
|
|
772
|
+
)
|
|
773
|
+
if err != nil {
|
|
774
|
+
log.Fatal(err)
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
mp := metric.NewMeterProvider(
|
|
778
|
+
metric.WithReader(metric.NewPeriodicReader(metricExporter,
|
|
779
|
+
metric.WithInterval(60*time.Second),
|
|
780
|
+
)),
|
|
781
|
+
metric.WithResource(res),
|
|
782
|
+
)
|
|
783
|
+
otel.SetMeterProvider(mp)
|
|
784
|
+
|
|
785
|
+
return func() {
|
|
786
|
+
_ = tp.Shutdown(ctx)
|
|
787
|
+
_ = mp.Shutdown(ctx)
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
## Sampling Strategies
|
|
793
|
+
|
|
794
|
+
### Head Sampling (At Collection)
|
|
795
|
+
|
|
796
|
+
Sample at the receiver before processing:
|
|
797
|
+
|
|
798
|
+
```yaml
|
|
799
|
+
processors:
|
|
800
|
+
probabilistic_sampler:
|
|
801
|
+
hash_seed: 22
|
|
802
|
+
sampling_percentage: 10 # 10% of traces
|
|
803
|
+
|
|
804
|
+
service:
|
|
805
|
+
pipelines:
|
|
806
|
+
traces:
|
|
807
|
+
processors: [probabilistic_sampler, batch]
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
### Tail Sampling (After Collection)
|
|
811
|
+
|
|
812
|
+
Make sampling decisions after seeing complete trace:
|
|
813
|
+
|
|
814
|
+
```yaml
|
|
815
|
+
processors:
|
|
816
|
+
tail_sampling:
|
|
817
|
+
decision_wait: 10s
|
|
818
|
+
num_traces: 100
|
|
819
|
+
expected_new_traces_per_sec: 10
|
|
820
|
+
policies:
|
|
821
|
+
# Always sample errors
|
|
822
|
+
- name: error-traces
|
|
823
|
+
type: status_code
|
|
824
|
+
status_code:
|
|
825
|
+
status_codes: [ERROR]
|
|
826
|
+
|
|
827
|
+
# Always sample slow requests
|
|
828
|
+
- name: slow-traces
|
|
829
|
+
type: latency
|
|
830
|
+
latency:
|
|
831
|
+
threshold_ms: 1000
|
|
832
|
+
|
|
833
|
+
# Sample 10% of other traces
|
|
834
|
+
- name: probabilistic-policy
|
|
835
|
+
type: probabilistic
|
|
836
|
+
probabilistic:
|
|
837
|
+
sampling_percentage: 10
|
|
838
|
+
|
|
839
|
+
# Sample by specific attributes
|
|
840
|
+
- name: important-service
|
|
841
|
+
type: string_attribute
|
|
842
|
+
string_attribute:
|
|
843
|
+
key: service.name
|
|
844
|
+
values: [critical-service, payment-service]
|
|
845
|
+
```
|
|
846
|
+
|
|
847
|
+
## Batching and Retry Configuration
|
|
848
|
+
|
|
849
|
+
### Optimal Batch Settings
|
|
850
|
+
|
|
851
|
+
```yaml
|
|
852
|
+
processors:
|
|
853
|
+
batch:
|
|
854
|
+
# Time to wait before sending (whichever comes first)
|
|
855
|
+
timeout: 10s
|
|
856
|
+
|
|
857
|
+
# Preferred batch size
|
|
858
|
+
send_batch_size: 1024
|
|
859
|
+
|
|
860
|
+
# Maximum batch size
|
|
861
|
+
send_batch_max_size: 2048
|
|
862
|
+
|
|
863
|
+
exporters:
|
|
864
|
+
otlp/jaeger:
|
|
865
|
+
endpoint: jaeger:4317
|
|
866
|
+
tls:
|
|
867
|
+
insecure: true
|
|
868
|
+
|
|
869
|
+
# Queue configuration
|
|
870
|
+
sending_queue:
|
|
871
|
+
enabled: true
|
|
872
|
+
num_consumers: 10 # Concurrent exporters
|
|
873
|
+
queue_size: 5000 # Max items in queue
|
|
874
|
+
|
|
875
|
+
# Retry on failure
|
|
876
|
+
retry_on_failure:
|
|
877
|
+
enabled: true
|
|
878
|
+
initial_interval: 5s # First retry after 5s
|
|
879
|
+
max_interval: 30s # Max backoff time
|
|
880
|
+
max_elapsed_time: 300s # Give up after 5 minutes
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
## Best Practices
|
|
884
|
+
|
|
885
|
+
### Resource Attributes
|
|
886
|
+
|
|
887
|
+
Always set resource attributes:
|
|
888
|
+
|
|
889
|
+
```yaml
|
|
890
|
+
processors:
|
|
891
|
+
resource:
|
|
892
|
+
attributes:
|
|
893
|
+
- key: deployment.environment
|
|
894
|
+
value: development
|
|
895
|
+
action: upsert
|
|
896
|
+
- key: service.namespace
|
|
897
|
+
value: mycompany
|
|
898
|
+
action: upsert
|
|
899
|
+
- key: cloud.provider
|
|
900
|
+
value: aws
|
|
901
|
+
action: insert
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
### Memory Management
|
|
905
|
+
|
|
906
|
+
Always use memory_limiter as first processor:
|
|
907
|
+
|
|
908
|
+
```yaml
|
|
909
|
+
processors:
|
|
910
|
+
memory_limiter:
|
|
911
|
+
check_interval: 1s
|
|
912
|
+
limit_mib: 512
|
|
913
|
+
spike_limit_mib: 128
|
|
914
|
+
|
|
915
|
+
service:
|
|
916
|
+
pipelines:
|
|
917
|
+
traces:
|
|
918
|
+
processors: [memory_limiter, batch, ...] # memory_limiter FIRST
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
### Pipeline Ordering
|
|
922
|
+
|
|
923
|
+
Correct processor order matters:
|
|
924
|
+
|
|
925
|
+
```yaml
|
|
926
|
+
service:
|
|
927
|
+
pipelines:
|
|
928
|
+
traces:
|
|
929
|
+
processors:
|
|
930
|
+
- memory_limiter # 1. Prevent OOM (always first)
|
|
931
|
+
- resource # 2. Add resource attributes
|
|
932
|
+
- attributes # 3. Add/modify span attributes
|
|
933
|
+
- filter # 4. Drop unwanted spans
|
|
934
|
+
- tail_sampling # 5. Sample traces
|
|
935
|
+
- batch # 6. Batch for export (always last)
|
|
936
|
+
```
|
|
937
|
+
|
|
938
|
+
### Health Checks
|
|
939
|
+
|
|
940
|
+
Always enable health check extension:
|
|
941
|
+
|
|
942
|
+
```yaml
|
|
943
|
+
extensions:
|
|
944
|
+
health_check:
|
|
945
|
+
endpoint: 0.0.0.0:13133
|
|
946
|
+
check_collector_pipeline:
|
|
947
|
+
enabled: true
|
|
948
|
+
interval: 5s
|
|
949
|
+
exporter_failure_threshold: 5
|
|
950
|
+
|
|
951
|
+
service:
|
|
952
|
+
extensions: [health_check]
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
**Check health:**
|
|
956
|
+
|
|
957
|
+
```bash
|
|
958
|
+
curl http://localhost:13133
|
|
959
|
+
# Returns 200 OK if healthy
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
### Avoid Data Loss
|
|
963
|
+
|
|
964
|
+
Configure persistent queues for critical data:
|
|
965
|
+
|
|
966
|
+
```yaml
|
|
967
|
+
exporters:
|
|
968
|
+
otlp:
|
|
969
|
+
endpoint: backend:4317
|
|
970
|
+
sending_queue:
|
|
971
|
+
enabled: true
|
|
972
|
+
storage: file_storage/otlp
|
|
973
|
+
retry_on_failure:
|
|
974
|
+
enabled: true
|
|
975
|
+
|
|
976
|
+
extensions:
|
|
977
|
+
file_storage:
|
|
978
|
+
directory: /var/lib/otelcol/storage
|
|
979
|
+
timeout: 10s
|
|
980
|
+
|
|
981
|
+
service:
|
|
982
|
+
extensions: [file_storage]
|
|
983
|
+
```
|
|
984
|
+
|
|
985
|
+
## Performance Optimization
|
|
986
|
+
|
|
987
|
+
### Tune Batch Sizes
|
|
988
|
+
|
|
989
|
+
```yaml
|
|
990
|
+
processors:
|
|
991
|
+
batch:
|
|
992
|
+
# For high throughput
|
|
993
|
+
timeout: 1s
|
|
994
|
+
send_batch_size: 8192
|
|
995
|
+
send_batch_max_size: 16384
|
|
996
|
+
|
|
997
|
+
# For low latency
|
|
998
|
+
# timeout: 100ms
|
|
999
|
+
# send_batch_size: 128
|
|
1000
|
+
# send_batch_max_size: 256
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
### Increase Concurrency
|
|
1004
|
+
|
|
1005
|
+
```yaml
|
|
1006
|
+
exporters:
|
|
1007
|
+
otlp/jaeger:
|
|
1008
|
+
endpoint: jaeger:4317
|
|
1009
|
+
sending_queue:
|
|
1010
|
+
num_consumers: 20 # More concurrent exports
|
|
1011
|
+
queue_size: 10000
|
|
1012
|
+
```
|
|
1013
|
+
|
|
1014
|
+
### Use Persistent Queue
|
|
1015
|
+
|
|
1016
|
+
```yaml
|
|
1017
|
+
exporters:
|
|
1018
|
+
otlp:
|
|
1019
|
+
sending_queue:
|
|
1020
|
+
enabled: true
|
|
1021
|
+
storage: file_storage
|
|
1022
|
+
|
|
1023
|
+
extensions:
|
|
1024
|
+
file_storage:
|
|
1025
|
+
directory: /var/lib/otelcol
|
|
1026
|
+
```
|
|
1027
|
+
|
|
1028
|
+
### Resource Detection
|
|
1029
|
+
|
|
1030
|
+
Auto-detect environment attributes:
|
|
1031
|
+
|
|
1032
|
+
```yaml
|
|
1033
|
+
processors:
|
|
1034
|
+
resourcedetection:
|
|
1035
|
+
detectors: [env, system, docker]
|
|
1036
|
+
timeout: 5s
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
## Troubleshooting
|
|
1040
|
+
|
|
1041
|
+
### No telemetry appearing
|
|
1042
|
+
|
|
1043
|
+
**Check collector is running:**
|
|
1044
|
+
|
|
1045
|
+
```bash
|
|
1046
|
+
docker-compose ps otel-collector
|
|
1047
|
+
docker-compose logs otel-collector
|
|
1048
|
+
```
|
|
1049
|
+
|
|
1050
|
+
**Check health endpoint:**
|
|
1051
|
+
|
|
1052
|
+
```bash
|
|
1053
|
+
curl http://localhost:13133
|
|
1054
|
+
```
|
|
1055
|
+
|
|
1056
|
+
**Verify application endpoint:**
|
|
1057
|
+
|
|
1058
|
+
```javascript
|
|
1059
|
+
// Check your app sends to correct URL
|
|
1060
|
+
console.log('OTLP endpoint:', 'http://otel-collector:4317');
|
|
1061
|
+
```
|
|
1062
|
+
|
|
1063
|
+
**Check pipeline configuration:**
|
|
1064
|
+
|
|
1065
|
+
```bash
|
|
1066
|
+
# Ensure pipelines are defined
|
|
1067
|
+
docker-compose exec otel-collector cat /etc/otel-collector-config.yaml
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
### Collector crashes or OOM
|
|
1071
|
+
|
|
1072
|
+
**Check memory limiter:**
|
|
1073
|
+
|
|
1074
|
+
```yaml
|
|
1075
|
+
processors:
|
|
1076
|
+
memory_limiter:
|
|
1077
|
+
limit_mib: 1024 # Increase limit
|
|
1078
|
+
spike_limit_mib: 256
|
|
1079
|
+
```
|
|
1080
|
+
|
|
1081
|
+
**Reduce batch sizes:**
|
|
1082
|
+
|
|
1083
|
+
```yaml
|
|
1084
|
+
processors:
|
|
1085
|
+
batch:
|
|
1086
|
+
send_batch_size: 512 # Reduce from 1024
|
|
1087
|
+
send_batch_max_size: 1024 # Reduce from 2048
|
|
1088
|
+
```
|
|
1089
|
+
|
|
1090
|
+
**Check memory usage:**
|
|
1091
|
+
|
|
1092
|
+
```bash
|
|
1093
|
+
docker stats otel-collector
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
### Data not reaching backends
|
|
1097
|
+
|
|
1098
|
+
**Check exporter configuration:**
|
|
1099
|
+
|
|
1100
|
+
```bash
|
|
1101
|
+
# Verify backend endpoints
|
|
1102
|
+
docker-compose logs otel-collector | grep -i "exporter"
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1105
|
+
**Test backend connectivity:**
|
|
1106
|
+
|
|
1107
|
+
```bash
|
|
1108
|
+
docker-compose exec otel-collector wget -O- http://jaeger:4317
|
|
1109
|
+
docker-compose exec otel-collector curl http://prometheus:9090
|
|
1110
|
+
docker-compose exec otel-collector curl http://loki:3100/ready
|
|
1111
|
+
```
|
|
1112
|
+
|
|
1113
|
+
**Enable debug exporter:**
|
|
1114
|
+
|
|
1115
|
+
```yaml
|
|
1116
|
+
exporters:
|
|
1117
|
+
debug:
|
|
1118
|
+
verbosity: detailed
|
|
1119
|
+
|
|
1120
|
+
service:
|
|
1121
|
+
pipelines:
|
|
1122
|
+
traces:
|
|
1123
|
+
exporters: [otlp/jaeger, debug] # Add debug
|
|
1124
|
+
```
|
|
1125
|
+
|
|
1126
|
+
**Check logs for export errors:**
|
|
1127
|
+
|
|
1128
|
+
```bash
|
|
1129
|
+
docker-compose logs otel-collector | grep -i "error\|failed"
|
|
1130
|
+
```
|
|
1131
|
+
|
|
1132
|
+
### High CPU usage
|
|
1133
|
+
|
|
1134
|
+
**Reduce sampling:**
|
|
1135
|
+
|
|
1136
|
+
```yaml
|
|
1137
|
+
processors:
|
|
1138
|
+
probabilistic_sampler:
|
|
1139
|
+
sampling_percentage: 10 # Sample less
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
**Increase batch timeout:**
|
|
1143
|
+
|
|
1144
|
+
```yaml
|
|
1145
|
+
processors:
|
|
1146
|
+
batch:
|
|
1147
|
+
timeout: 30s # Batch for longer
|
|
1148
|
+
```
|
|
1149
|
+
|
|
1150
|
+
**Disable expensive processors:**
|
|
1151
|
+
|
|
1152
|
+
```yaml
|
|
1153
|
+
# Comment out tail_sampling if not needed
|
|
1154
|
+
# processors:
|
|
1155
|
+
# tail_sampling: ...
|
|
1156
|
+
```
|
|
1157
|
+
|
|
1158
|
+
### Pipeline backed up
|
|
1159
|
+
|
|
1160
|
+
**Increase queue size:**
|
|
1161
|
+
|
|
1162
|
+
```yaml
|
|
1163
|
+
exporters:
|
|
1164
|
+
otlp/jaeger:
|
|
1165
|
+
sending_queue:
|
|
1166
|
+
queue_size: 10000 # Increase from 5000
|
|
1167
|
+
```
|
|
1168
|
+
|
|
1169
|
+
**Add more consumers:**
|
|
1170
|
+
|
|
1171
|
+
```yaml
|
|
1172
|
+
exporters:
|
|
1173
|
+
otlp/jaeger:
|
|
1174
|
+
sending_queue:
|
|
1175
|
+
num_consumers: 20 # Increase from 10
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
**Monitor queue metrics:**
|
|
1179
|
+
|
|
1180
|
+
```promql
|
|
1181
|
+
otelcol_exporter_queue_size
|
|
1182
|
+
otelcol_exporter_queue_capacity
|
|
1183
|
+
```
|
|
1184
|
+
|
|
1185
|
+
### Configuration errors
|
|
1186
|
+
|
|
1187
|
+
**Validate configuration:**
|
|
1188
|
+
|
|
1189
|
+
```bash
|
|
1190
|
+
# Check for YAML syntax errors
|
|
1191
|
+
docker-compose exec otel-collector \
|
|
1192
|
+
otelcol validate --config=/etc/otel-collector-config.yaml
|
|
1193
|
+
```
|
|
1194
|
+
|
|
1195
|
+
**Check logs on startup:**
|
|
1196
|
+
|
|
1197
|
+
```bash
|
|
1198
|
+
docker-compose logs otel-collector | head -50
|
|
1199
|
+
```
|
|
1200
|
+
|
|
1201
|
+
## Use Cases
|
|
1202
|
+
|
|
1203
|
+
### Centralized Telemetry Collection
|
|
1204
|
+
|
|
1205
|
+
- Collect from multiple applications
|
|
1206
|
+
- Single point for configuration changes
|
|
1207
|
+
- Consistent data enrichment
|
|
1208
|
+
- Unified export to multiple backends
|
|
1209
|
+
|
|
1210
|
+
### Protocol Translation
|
|
1211
|
+
|
|
1212
|
+
- Receive Jaeger, export to OTLP
|
|
1213
|
+
- Receive Prometheus, export to Cloud Monitoring
|
|
1214
|
+
- Convert legacy formats to OpenTelemetry
|
|
1215
|
+
|
|
1216
|
+
### Data Processing
|
|
1217
|
+
|
|
1218
|
+
- Filter PII/sensitive data
|
|
1219
|
+
- Add environment/deployment metadata
|
|
1220
|
+
- Sample high-volume traces
|
|
1221
|
+
- Aggregate metrics
|
|
1222
|
+
|
|
1223
|
+
### Multi-Tenant Environments
|
|
1224
|
+
|
|
1225
|
+
- Route telemetry by tenant ID
|
|
1226
|
+
- Apply different sampling per tenant
|
|
1227
|
+
- Export to tenant-specific backends
|
|
1228
|
+
|
|
1229
|
+
## Related Overlays
|
|
1230
|
+
|
|
1231
|
+
- **jaeger** - Distributed tracing backend (receives traces from collector)
|
|
1232
|
+
- **prometheus** - Metrics backend (scrapes metrics from collector)
|
|
1233
|
+
- **loki** - Log aggregation backend (receives logs from collector)
|
|
1234
|
+
- **grafana** - Unified visualization for all three signals
|
|
1235
|
+
- **nodejs/python/dotnet/go** - Application frameworks instrumented with OpenTelemetry
|
|
1236
|
+
|
|
1237
|
+
## Additional Resources
|
|
1238
|
+
|
|
1239
|
+
- [OpenTelemetry Collector Documentation](https://opentelemetry.io/docs/collector/)
|
|
1240
|
+
- [Collector Configuration](https://opentelemetry.io/docs/collector/configuration/)
|
|
1241
|
+
- [Available Receivers](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver)
|
|
1242
|
+
- [Available Processors](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor)
|
|
1243
|
+
- [Available Exporters](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter)
|
|
1244
|
+
- [Performance Best Practices](https://opentelemetry.io/docs/collector/scaling/)
|
|
1245
|
+
- [Troubleshooting Guide](https://opentelemetry.io/docs/collector/troubleshooting/)
|
|
1246
|
+
|
|
1247
|
+
## Notes
|
|
1248
|
+
|
|
1249
|
+
- This overlay **requires compose stack** (uses docker-compose)
|
|
1250
|
+
- Collector receives on ports **4317** (gRPC) and **4318** (HTTP)
|
|
1251
|
+
- Prometheus scrapes metrics from port **8889**
|
|
1252
|
+
- Health check available on port **13133**
|
|
1253
|
+
- Depends on **jaeger**, **prometheus**, and **loki** overlays
|
|
1254
|
+
- Use hostname **`otel-collector`** from applications
|
|
1255
|
+
- Configuration file is **`otel-collector-config.yaml`**
|
|
1256
|
+
- Always use **memory_limiter** processor to prevent OOM
|
|
1257
|
+
- Always use **batch** processor for performance
|