Skip to content

Commit

Permalink
OTEL collector/prometheus/aspire-dashboard stack for testing purposes
Browse files Browse the repository at this point in the history
Signed-off-by: Christopher Petito <chrisjpetito@gmail.com>
  • Loading branch information
krissetto committed Apr 30, 2024
1 parent b982833 commit e1dcc19
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 0 deletions.
25 changes: 25 additions & 0 deletions hack/otel/README.md
@@ -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.
39 changes: 39 additions & 0 deletions hack/otel/compose.yaml
@@ -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:
20 changes: 20 additions & 0 deletions hack/otel/otelcol.yaml
@@ -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]
6 changes: 6 additions & 0 deletions hack/otel/prom.yaml
@@ -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"]

0 comments on commit e1dcc19

Please sign in to comment.