From 9aaa104ec0344377ef1b586ad7b55af4948ff017 Mon Sep 17 00:00:00 2001 From: Antoine Moreaux Date: Tue, 24 Jun 2025 12:13:24 +0200 Subject: [PATCH] feat(infra-dev): add opentelemetry and grafana (#12808) --- Makefile | 36 +++++++++++++++++-- .../datasources/clickhouse-datasource.yaml | 15 ++++++++ .../otel-collector/otel-collector-config.yaml | 24 +++++++++++++ .../core-modules/metrics/metrics.service.ts | 12 +++---- 4 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 packages/twenty-docker/grafana/provisioning/datasources/clickhouse-datasource.yaml create mode 100644 packages/twenty-docker/otel-collector/otel-collector-config.yaml diff --git a/Makefile b/Makefile index e3c7be965..8b7e3594b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,11 @@ +DOCKER_NETWORK=twenty_network + +ensure-docker-network: + docker network inspect $(DOCKER_NETWORK) >/dev/null 2>&1 || docker network create $(DOCKER_NETWORK) + postgres-on-docker: - docker run -d \ + make ensure-docker-network + docker run -d --network $(DOCKER_NETWORK) \ --name twenty_pg \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=postgres \ @@ -17,7 +23,31 @@ postgres-on-docker: -c "CREATE DATABASE \"test\" WITH OWNER postgres;" redis-on-docker: - docker run -d --name twenty_redis -p 6379:6379 redis/redis-stack-server:latest + make ensure-docker-network + docker run -d --network $(DOCKER_NETWORK) --name twenty_redis -p 6379:6379 redis/redis-stack-server:latest clickhouse-on-docker: - docker run -d --name twenty_clickhouse -p 8123:8123 -p 9000:9000 -e CLICKHOUSE_PASSWORD=clickhousePassword clickhouse/clickhouse-server:latest \ + make ensure-docker-network + docker run -d --network $(DOCKER_NETWORK) --name twenty_clickhouse -p 8123:8123 -p 9000:9000 -e CLICKHOUSE_PASSWORD=devPassword clickhouse/clickhouse-server:latest \ + +grafana-on-docker: + make ensure-docker-network + docker run -d --network $(DOCKER_NETWORK) \ + --name twenty_grafana \ + -p 4000:3000 \ + -e GF_SECURITY_ADMIN_USER=admin \ + -e GF_SECURITY_ADMIN_PASSWORD=admin \ + -e GF_INSTALL_PLUGINS=grafana-clickhouse-datasource \ + -v $(PWD)/packages/twenty-docker/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources \ + grafana/grafana-oss:latest + +opentelemetry-collector-on-docker: + make ensure-docker-network + docker run -d --network $(DOCKER_NETWORK) \ + --name twenty_otlp_collector \ + -p 4317:4317 \ + -p 4318:4318 \ + -p 13133:13133 \ + -v $(PWD)/packages/twenty-docker/otel-collector/otel-collector-config.yaml:/etc/otel-collector-config.yaml \ + otel/opentelemetry-collector-contrib:latest \ + --config /etc/otel-collector-config.yaml \ No newline at end of file diff --git a/packages/twenty-docker/grafana/provisioning/datasources/clickhouse-datasource.yaml b/packages/twenty-docker/grafana/provisioning/datasources/clickhouse-datasource.yaml new file mode 100644 index 000000000..bb4279ee8 --- /dev/null +++ b/packages/twenty-docker/grafana/provisioning/datasources/clickhouse-datasource.yaml @@ -0,0 +1,15 @@ +apiVersion: 1 + +datasources: + - name: ClickHouse + type: grafana-clickhouse-datasource + uid: clickhouse_datasource + jsonData: + server: twenty_clickhouse + defaultDatabase: twenty_dev + port: 9000 + protocol: native + tlsSkipVerify: true + username: default + secureJsonData: + password: devPassword \ No newline at end of file diff --git a/packages/twenty-docker/otel-collector/otel-collector-config.yaml b/packages/twenty-docker/otel-collector/otel-collector-config.yaml new file mode 100644 index 000000000..1d6eb9d78 --- /dev/null +++ b/packages/twenty-docker/otel-collector/otel-collector-config.yaml @@ -0,0 +1,24 @@ +receivers: + otlp: + protocols: + http: + endpoint: "0.0.0.0:4318" + +exporters: + clickhouse: + endpoint: tcp://twenty_clickhouse:9000 + database: twenty_dev + username: default + password: devPassword + debug: + verbosity: detailed + +processors: + batch: + +service: + pipelines: + metrics: + receivers: [otlp] + processors: [batch] + exporters: [clickhouse, debug] \ No newline at end of file diff --git a/packages/twenty-server/src/engine/core-modules/metrics/metrics.service.ts b/packages/twenty-server/src/engine/core-modules/metrics/metrics.service.ts index beeec81eb..0556c4bbd 100644 --- a/packages/twenty-server/src/engine/core-modules/metrics/metrics.service.ts +++ b/packages/twenty-server/src/engine/core-modules/metrics/metrics.service.ts @@ -57,12 +57,12 @@ export class MetricsService { const date = Date.now(); for (const metric of metrics) { - const metricValue = await this.metricsCacheService.computeCount({ - key: metric.cacheKey, - date, - }); - - groupedMetrics[metric.name] = metricValue; + groupedMetrics[metric.name] = await this.metricsCacheService.computeCount( + { + key: metric.cacheKey, + date, + }, + ); } return groupedMetrics;