From c2ccf9d2339f8cf3520012fe57e0f9835998c44b Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sun, 12 Apr 2026 18:24:08 +0200 Subject: [PATCH] feat: enable Prometheus metrics for ClickHouse and tenant servers ClickHouse: enable built-in Prometheus exporter at :9363/metrics via config.d/prometheus.xml with metrics, events, and async_metrics. Docker labels added for docker_sd_configs auto-discovery. Tenant servers: add prometheus.scrape/path/port labels to provisioned server containers pointing to /api/v1/prometheus:8081. Co-Authored-By: Claude Opus 4.6 (1M context) --- docker-compose.yml | 5 +++++ docker/clickhouse-config.xml | 9 +++++++++ .../saas/provisioning/DockerTenantProvisioner.java | 3 +++ 3 files changed, 17 insertions(+) create mode 100644 docker/clickhouse-config.xml diff --git a/docker-compose.yml b/docker-compose.yml index 56073bc..fecf6f0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -202,11 +202,16 @@ services: - chdata:/var/lib/clickhouse - ./docker/clickhouse-init.sql:/docker-entrypoint-initdb.d/init.sql:ro - ./docker/clickhouse-users.xml:/etc/clickhouse-server/users.d/default-user.xml + - ./docker/clickhouse-config.xml:/etc/clickhouse-server/config.d/prometheus.xml:ro healthcheck: test: ["CMD-SHELL", "clickhouse-client --password ${CLICKHOUSE_PASSWORD:-cameleer_ch} --query 'SELECT 1'"] interval: 10s timeout: 5s retries: 3 + labels: + - prometheus.scrape=true + - prometheus.path=/metrics + - prometheus.port=9363 networks: - cameleer diff --git a/docker/clickhouse-config.xml b/docker/clickhouse-config.xml new file mode 100644 index 0000000..446b7ef --- /dev/null +++ b/docker/clickhouse-config.xml @@ -0,0 +1,9 @@ + + + /metrics + 9363 + true + true + true + + diff --git a/src/main/java/net/siegeln/cameleer/saas/provisioning/DockerTenantProvisioner.java b/src/main/java/net/siegeln/cameleer/saas/provisioning/DockerTenantProvisioner.java index 36410ff..6ac509f 100644 --- a/src/main/java/net/siegeln/cameleer/saas/provisioning/DockerTenantProvisioner.java +++ b/src/main/java/net/siegeln/cameleer/saas/provisioning/DockerTenantProvisioner.java @@ -190,6 +190,9 @@ public class DockerTenantProvisioner implements TenantProvisioner { labels.put("traefik.docker.network", props.traefikNetwork()); labels.put("cameleer.tenant", slug); labels.put("cameleer.role", "server"); + labels.put("prometheus.scrape", "true"); + labels.put("prometheus.path", "/api/v1/prometheus"); + labels.put("prometheus.port", "8081"); var env = new java.util.ArrayList<>(List.of( "SPRING_DATASOURCE_URL=" + props.datasourceUrl(),