mirror of https://github.com/docker/cli.git
Merge pull request #5026 from krissetto/otel-test-stack
otel: simple OTEL collector/Prometheus stack for testing purposes
This commit is contained in:
commit
647ccf3433
|
@ -0,0 +1,25 @@
|
||||||
|
# Sample stack for testing OTEL functionality with the CLI
|
||||||
|
|
||||||
|
To test the OTEL functionality present in the CLI, you can spin up a small demo compose stack that includes:
|
||||||
|
- an OTEL collector container;
|
||||||
|
- a Prometheus container;
|
||||||
|
- an Aspire Dashboard container
|
||||||
|
|
||||||
|
The `hack/otel` directory contains the compose file with the services configured, along with 2 basic configuration files: one for the OTEL collector and one for Prometheus.
|
||||||
|
|
||||||
|
## How can I use it?
|
||||||
|
|
||||||
|
1) Start the compose stack by running `docker compose up -d` in the `hack/otel/` directory;
|
||||||
|
2) Export the env var used to override the OTLP endpoint:
|
||||||
|
`export DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317` (if running the CLI in a devcontainer or in other ways, you might have to change how you pass this env var);
|
||||||
|
3) Run the CLI to send some metrics to the endpoint;
|
||||||
|
4) Browse Prometheus at `http://localhost:9091/graph` or the Aspire Dashboard at `http://localhost:18888/metrics`;
|
||||||
|
5) In Prometheus, query `command_time_milliseconds_total` to see some metrics. In Aspire, select the resource in the dropdown.
|
||||||
|
|
||||||
|
> **Note**: The precise steps may vary based on how you're working on the codebase (buiding a binary and executing natively, running/debugging in a devcontainer, running the normal CLI as usual, etc... )
|
||||||
|
|
||||||
|
## Cleanup?
|
||||||
|
|
||||||
|
Run `docker compose down` in the `hack/otel/` directory.
|
||||||
|
|
||||||
|
You can also run `unset DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT` to get rid of the OTLP override from your environment.
|
|
@ -0,0 +1,39 @@
|
||||||
|
name: cli-otel
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
prometheus:
|
||||||
|
image: prom/prometheus:latest
|
||||||
|
command:
|
||||||
|
- "--config.file=/etc/prometheus/prom.yaml"
|
||||||
|
ports:
|
||||||
|
# Publish the Prometheus frontend on localhost:9091
|
||||||
|
- 9091:9090
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
# Store Prometheus data in a volume:
|
||||||
|
- prom_data:/prometheus
|
||||||
|
# Mount the prom.yml config file
|
||||||
|
- ./prom.yaml:/etc/prometheus/prom.yaml
|
||||||
|
|
||||||
|
aspire-dashboard:
|
||||||
|
image: mcr.microsoft.com/dotnet/nightly/aspire-dashboard:8.0-preview
|
||||||
|
ports:
|
||||||
|
- 18888:18888
|
||||||
|
environment:
|
||||||
|
DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS: 'true'
|
||||||
|
|
||||||
|
otelcol:
|
||||||
|
image: otel/opentelemetry-collector:latest
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- prometheus
|
||||||
|
- aspire-dashboard
|
||||||
|
ports:
|
||||||
|
- 4317:4317
|
||||||
|
volumes:
|
||||||
|
# Mount the otelcol.yml config file
|
||||||
|
- ./otelcol.yaml:/etc/otelcol/config.yaml
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
prom_data:
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Receive signals over gRPC and HTTP
|
||||||
|
receivers:
|
||||||
|
otlp:
|
||||||
|
protocols:
|
||||||
|
grpc:
|
||||||
|
http:
|
||||||
|
|
||||||
|
# Establish an endpoint for Prometheus to scrape from
|
||||||
|
exporters:
|
||||||
|
prometheus:
|
||||||
|
endpoint: "0.0.0.0:8889"
|
||||||
|
otlp/aspire:
|
||||||
|
endpoint: aspire-dashboard:18889
|
||||||
|
tls::insecure: true
|
||||||
|
|
||||||
|
service:
|
||||||
|
pipelines:
|
||||||
|
metrics:
|
||||||
|
receivers: [otlp]
|
||||||
|
exporters: [prometheus, otlp/aspire]
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Configure Prometheus to scrape the OTel collector endpoint
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: "otel-collector"
|
||||||
|
scrape_interval: 1s
|
||||||
|
static_configs:
|
||||||
|
- targets: ["otelcol:8889"]
|
Loading…
Reference in New Issue