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) <noreply@anthropic.com>
This commit is contained in:
@@ -202,11 +202,16 @@ services:
|
|||||||
- chdata:/var/lib/clickhouse
|
- chdata:/var/lib/clickhouse
|
||||||
- ./docker/clickhouse-init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
- ./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-users.xml:/etc/clickhouse-server/users.d/default-user.xml
|
||||||
|
- ./docker/clickhouse-config.xml:/etc/clickhouse-server/config.d/prometheus.xml:ro
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "clickhouse-client --password ${CLICKHOUSE_PASSWORD:-cameleer_ch} --query 'SELECT 1'"]
|
test: ["CMD-SHELL", "clickhouse-client --password ${CLICKHOUSE_PASSWORD:-cameleer_ch} --query 'SELECT 1'"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
labels:
|
||||||
|
- prometheus.scrape=true
|
||||||
|
- prometheus.path=/metrics
|
||||||
|
- prometheus.port=9363
|
||||||
networks:
|
networks:
|
||||||
- cameleer
|
- cameleer
|
||||||
|
|
||||||
|
|||||||
9
docker/clickhouse-config.xml
Normal file
9
docker/clickhouse-config.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<clickhouse>
|
||||||
|
<prometheus>
|
||||||
|
<endpoint>/metrics</endpoint>
|
||||||
|
<port>9363</port>
|
||||||
|
<metrics>true</metrics>
|
||||||
|
<events>true</events>
|
||||||
|
<asynchronous_metrics>true</asynchronous_metrics>
|
||||||
|
</prometheus>
|
||||||
|
</clickhouse>
|
||||||
@@ -190,6 +190,9 @@ public class DockerTenantProvisioner implements TenantProvisioner {
|
|||||||
labels.put("traefik.docker.network", props.traefikNetwork());
|
labels.put("traefik.docker.network", props.traefikNetwork());
|
||||||
labels.put("cameleer.tenant", slug);
|
labels.put("cameleer.tenant", slug);
|
||||||
labels.put("cameleer.role", "server");
|
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(
|
var env = new java.util.ArrayList<>(List.of(
|
||||||
"SPRING_DATASOURCE_URL=" + props.datasourceUrl(),
|
"SPRING_DATASOURCE_URL=" + props.datasourceUrl(),
|
||||||
|
|||||||
Reference in New Issue
Block a user