Переглянути джерело

OTEL collector/prometheus/aspire-dashboard stack for testing purposes

Signed-off-by: Christopher Petito <chrisjpetito@gmail.com>
Christopher Petito 1 рік тому
батько
коміт
e1dcc194e3
4 змінених файлів з 90 додано та 0 видалено
  1. 25 0
      hack/otel/README.md
  2. 39 0
      hack/otel/compose.yaml
  3. 20 0
      hack/otel/otelcol.yaml
  4. 6 0
      hack/otel/prom.yaml

+ 25 - 0
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 - 0
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 - 0
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 - 0
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"]