From ab6622d6533c4f0b94fbcef138d3314d907303bc Mon Sep 17 00:00:00 2001 From: Lewis Buckley Date: Tue, 16 Sep 2025 11:16:02 +0100 Subject: [PATCH] Set up the OTel collector to gather and export metrics from containers --- config/deploy.yml | 14 ++++++++++++ config/otel_collector.yml | 45 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 config/otel_collector.yml diff --git a/config/deploy.yml b/config/deploy.yml index 19e9649ea..87c67950a 100644 --- a/config/deploy.yml +++ b/config/deploy.yml @@ -32,3 +32,17 @@ aliases: console: app exec -i --reuse "bin/rails console" ssh: app exec -i --reuse /bin/bash switch: accessory exec beamer --reuse "beamer switch --primary=<%= ENV["PRIMARY"] %>" + +accessories: + otel_collector: + image: otel/opentelemetry-collector-contrib:0.126.0 + port: 9394 + files: + - config/otel_collector.yml:/etc/otelcol-contrib/config.yaml + volumes: + - /var/run/docker.sock:/var/run/docker.sock + options: + user: 0 + roles: + - web + - jobs diff --git a/config/otel_collector.yml b/config/otel_collector.yml new file mode 100644 index 000000000..c66b0d297 --- /dev/null +++ b/config/otel_collector.yml @@ -0,0 +1,45 @@ +receivers: + prometheus: + config: + scrape_configs: + - job_name: "kamal-containers" + scrape_interval: 5s + docker_sd_configs: + - host: unix:///var/run/docker.sock + refresh_interval: 10s + relabel_configs: + # Limit scraping to labeled containers with port 9394 exposed + - source_labels: [__address__] + regex: .*:9394 + action: keep + - source_labels: [__meta_docker_container_name] + regex: (/fizzy-(web|jobs)-.*|/kamal-proxy) + action: keep + + # Pull service and role from Kamal Docker labels + - source_labels: [__meta_docker_container_label_service] + target_label: service + - source_labels: [__meta_docker_container_label_role] + target_label: role + + - source_labels: [__meta_docker_container_name] + regex: ^/kamal-proxy$ + target_label: service + replacement: kamal-proxy + - source_labels: [__meta_docker_container_name] + regex: ^/kamal-proxy$ + target_label: role + replacement: proxy + +exporters: + prometheus: + endpoint: 0.0.0.0:9394 + +service: + telemetry: + logs: + level: "warn" + pipelines: + metrics: + receivers: [prometheus] + exporters: [prometheus]