From 0b0c434694806c1a7b1264c0d24ac09495c71116 Mon Sep 17 00:00:00 2001 From: Felix Wolf Date: Sun, 3 May 2026 18:11:07 +0200 Subject: [PATCH] feat(matrix): wire Synapse into monitoring stack - New headless Service matrix-synapse-metrics exposing port 9090 (Synapse's /_synapse/metrics listener), labeled matrix_metrics=enabled - VictoriaMetrics scrape job 'matrix' targets endpoints in matrix ns with that label + port name 'metrics' - Grafana picks up the official Synapse dashboard from element-hq/synapse v1.152.0 contrib/grafana/synapse.json via URL Co-Authored-By: Claude Opus 4.7 (1M context) --- prototypes/grafana/helm/grafana.ytt.yaml | 3 +++ .../ytt/metrics-service.ytt.yaml | 24 +++++++++++++++++++ .../helm/victoria-metrics-single.ytt.yaml | 12 ++++++++++ .../minikube/grafana/configmap-grafana.yaml | 2 +- .../minikube/grafana/deployment-grafana.yaml | 2 +- .../service-matrix-synapse-metrics.yaml | 21 ++++++++++++++++ ...ia-metrics-single-server-scrapeconfig.yaml | 16 +++++++++++++ .../production/grafana/configmap-grafana.yaml | 2 +- .../grafana/deployment-grafana.yaml | 2 +- .../service-matrix-synapse-metrics.yaml | 21 ++++++++++++++++ ...ia-metrics-single-server-scrapeconfig.yaml | 16 +++++++++++++ 11 files changed, 117 insertions(+), 4 deletions(-) create mode 100644 prototypes/matrix-synapse/ytt/metrics-service.ytt.yaml create mode 100644 rendered/envs/minikube/matrix-synapse/service-matrix-synapse-metrics.yaml create mode 100644 rendered/envs/production/matrix-synapse/service-matrix-synapse-metrics.yaml diff --git a/prototypes/grafana/helm/grafana.ytt.yaml b/prototypes/grafana/helm/grafana.ytt.yaml index 196052a..0bf90f6 100644 --- a/prototypes/grafana/helm/grafana.ytt.yaml +++ b/prototypes/grafana/helm/grafana.ytt.yaml @@ -64,6 +64,9 @@ dashboards: gnetId: 15757 revision: 37 datasource: VictoriaMetrics + matrix-synapse: + url: https://raw.githubusercontent.com/element-hq/synapse/v1.152.0/contrib/grafana/synapse.json + datasource: VictoriaMetrics ocis: datasource: VictoriaMetrics json: |- diff --git a/prototypes/matrix-synapse/ytt/metrics-service.ytt.yaml b/prototypes/matrix-synapse/ytt/metrics-service.ytt.yaml new file mode 100644 index 0000000..2310b60 --- /dev/null +++ b/prototypes/matrix-synapse/ytt/metrics-service.ytt.yaml @@ -0,0 +1,24 @@ +#@ load("@ytt:data", "data") + +#@ ns = data.values.application.namespace + +--- +apiVersion: v1 +kind: Service +metadata: + name: matrix-synapse-metrics + namespace: #@ ns + labels: + matrix_metrics: enabled +spec: + type: ClusterIP + clusterIP: None + selector: + app.kubernetes.io/component: synapse + app.kubernetes.io/instance: matrix-synapse + app.kubernetes.io/name: matrix-synapse + ports: + - name: metrics + port: 9090 + targetPort: metrics + protocol: TCP diff --git a/prototypes/victoria-metrics-single/helm/victoria-metrics-single.ytt.yaml b/prototypes/victoria-metrics-single/helm/victoria-metrics-single.ytt.yaml index 43aed80..6790183 100644 --- a/prototypes/victoria-metrics-single/helm/victoria-metrics-single.ytt.yaml +++ b/prototypes/victoria-metrics-single/helm/victoria-metrics-single.ytt.yaml @@ -94,3 +94,15 @@ server: target_label: ocis_service - source_labels: [__meta_kubernetes_pod_name] target_label: pod + - job_name: matrix + metrics_path: /_synapse/metrics + kubernetes_sd_configs: + - role: endpoints + namespaces: + names: [matrix] + relabel_configs: + - source_labels: [__meta_kubernetes_service_label_matrix_metrics, __meta_kubernetes_endpoint_port_name] + action: keep + regex: enabled;metrics + - source_labels: [__meta_kubernetes_pod_name] + target_label: pod diff --git a/rendered/envs/minikube/grafana/configmap-grafana.yaml b/rendered/envs/minikube/grafana/configmap-grafana.yaml index fa58c87..826dd73 100644 --- a/rendered/envs/minikube/grafana/configmap-grafana.yaml +++ b/rendered/envs/minikube/grafana/configmap-grafana.yaml @@ -19,7 +19,7 @@ data: name: VictoriaMetrics type: prometheus url: http://victoria-metrics-single-server.monitoring.svc:8428 - download_dashboards.sh: "#!/usr/bin/env sh\nset -euf\nmkdir -p /var/lib/grafana/dashboards/default\n\ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/15757/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/kubernetes-cluster.json\"\n \ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/1860/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/node-exporter.json\"\n" + download_dashboards.sh: "#!/usr/bin/env sh\nset -euf\nmkdir -p /var/lib/grafana/dashboards/default\n\ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/15757/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/kubernetes-cluster.json\"\n \ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://raw.githubusercontent.com/element-hq/synapse/v1.152.0/contrib/grafana/synapse.json\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/matrix-synapse.json\"\n \ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/1860/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/node-exporter.json\"\n" grafana.ini: | [analytics] check_for_updates = true diff --git a/rendered/envs/minikube/grafana/deployment-grafana.yaml b/rendered/envs/minikube/grafana/deployment-grafana.yaml index 368d78b..028f58a 100644 --- a/rendered/envs/minikube/grafana/deployment-grafana.yaml +++ b/rendered/envs/minikube/grafana/deployment-grafana.yaml @@ -22,7 +22,7 @@ spec: template: metadata: annotations: - checksum/config: f0cad22500d4e1577b09e33968d5ed873452b63eee6d4fedf9db55f640704755 + checksum/config: 5be4357fd6e211fab2024add34069a0a3555e629a11081fb4461a2c09fdeff49 checksum/dashboards-json-config: 02278b031cbf8831bf02b7a4256e61be096aaeb31d9a25dabd282b6933b1abcb checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 kubectl.kubernetes.io/default-container: grafana diff --git a/rendered/envs/minikube/matrix-synapse/service-matrix-synapse-metrics.yaml b/rendered/envs/minikube/matrix-synapse/service-matrix-synapse-metrics.yaml new file mode 100644 index 0000000..1fba939 --- /dev/null +++ b/rendered/envs/minikube/matrix-synapse/service-matrix-synapse-metrics.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + a8r.io/repository: ssh://git@git.tr1ceracop.de:222/gitea_admin/k8s-and-chill.git + labels: + matrix_metrics: enabled + name: matrix-synapse-metrics + namespace: matrix +spec: + clusterIP: None + ports: + - name: metrics + port: 9090 + protocol: TCP + targetPort: metrics + selector: + app.kubernetes.io/component: synapse + app.kubernetes.io/instance: matrix-synapse + app.kubernetes.io/name: matrix-synapse + type: ClusterIP diff --git a/rendered/envs/minikube/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml b/rendered/envs/minikube/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml index 95b0b64..316c82c 100644 --- a/rendered/envs/minikube/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml +++ b/rendered/envs/minikube/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml @@ -101,6 +101,22 @@ data: - source_labels: - __meta_kubernetes_pod_name target_label: pod + - job_name: matrix + kubernetes_sd_configs: + - namespaces: + names: + - matrix + role: endpoints + metrics_path: /_synapse/metrics + relabel_configs: + - action: keep + regex: enabled;metrics + source_labels: + - __meta_kubernetes_service_label_matrix_metrics + - __meta_kubernetes_endpoint_port_name + - source_labels: + - __meta_kubernetes_pod_name + target_label: pod kind: ConfigMap metadata: annotations: diff --git a/rendered/envs/production/grafana/configmap-grafana.yaml b/rendered/envs/production/grafana/configmap-grafana.yaml index 516c488..ab881e4 100644 --- a/rendered/envs/production/grafana/configmap-grafana.yaml +++ b/rendered/envs/production/grafana/configmap-grafana.yaml @@ -19,7 +19,7 @@ data: name: VictoriaMetrics type: prometheus url: http://victoria-metrics-single-server.monitoring.svc:8428 - download_dashboards.sh: "#!/usr/bin/env sh\nset -euf\nmkdir -p /var/lib/grafana/dashboards/default\n\ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/15757/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/kubernetes-cluster.json\"\n \ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/1860/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/node-exporter.json\"\n" + download_dashboards.sh: "#!/usr/bin/env sh\nset -euf\nmkdir -p /var/lib/grafana/dashboards/default\n\ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/15757/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/kubernetes-cluster.json\"\n \ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://raw.githubusercontent.com/element-hq/synapse/v1.152.0/contrib/grafana/synapse.json\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/matrix-synapse.json\"\n \ncurl -skf \\\n--connect-timeout 60 \\\n--max-time 60 \\\n-H \"Accept: application/json\" \\\n-H \"Content-Type: application/json;charset=UTF-8\" \\\n \"https://grafana.com/api/dashboards/1860/revisions/37/download\" \\\n | sed '/-- .* --/! s/\"datasource\":.*,/\"datasource\": \"VictoriaMetrics\",/g' \\\n> \"/var/lib/grafana/dashboards/default/node-exporter.json\"\n" grafana.ini: | [analytics] check_for_updates = true diff --git a/rendered/envs/production/grafana/deployment-grafana.yaml b/rendered/envs/production/grafana/deployment-grafana.yaml index 9d6a602..2609b3c 100644 --- a/rendered/envs/production/grafana/deployment-grafana.yaml +++ b/rendered/envs/production/grafana/deployment-grafana.yaml @@ -22,7 +22,7 @@ spec: template: metadata: annotations: - checksum/config: de8d6f16e9721409f5848bcc101e6aa9815e6455bd4fb9b59306159e705ac1cb + checksum/config: 3091c3340f9e9518f161b4ddf15db275c8757370b7e8c8d7af912dd555ca3ff6 checksum/dashboards-json-config: 02278b031cbf8831bf02b7a4256e61be096aaeb31d9a25dabd282b6933b1abcb checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 kubectl.kubernetes.io/default-container: grafana diff --git a/rendered/envs/production/matrix-synapse/service-matrix-synapse-metrics.yaml b/rendered/envs/production/matrix-synapse/service-matrix-synapse-metrics.yaml new file mode 100644 index 0000000..1fba939 --- /dev/null +++ b/rendered/envs/production/matrix-synapse/service-matrix-synapse-metrics.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + a8r.io/repository: ssh://git@git.tr1ceracop.de:222/gitea_admin/k8s-and-chill.git + labels: + matrix_metrics: enabled + name: matrix-synapse-metrics + namespace: matrix +spec: + clusterIP: None + ports: + - name: metrics + port: 9090 + protocol: TCP + targetPort: metrics + selector: + app.kubernetes.io/component: synapse + app.kubernetes.io/instance: matrix-synapse + app.kubernetes.io/name: matrix-synapse + type: ClusterIP diff --git a/rendered/envs/production/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml b/rendered/envs/production/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml index 95b0b64..316c82c 100644 --- a/rendered/envs/production/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml +++ b/rendered/envs/production/victoria-metrics-single/configmap-victoria-metrics-single-server-scrapeconfig.yaml @@ -101,6 +101,22 @@ data: - source_labels: - __meta_kubernetes_pod_name target_label: pod + - job_name: matrix + kubernetes_sd_configs: + - namespaces: + names: + - matrix + role: endpoints + metrics_path: /_synapse/metrics + relabel_configs: + - action: keep + regex: enabled;metrics + source_labels: + - __meta_kubernetes_service_label_matrix_metrics + - __meta_kubernetes_endpoint_port_name + - source_labels: + - __meta_kubernetes_pod_name + target_label: pod kind: ConfigMap metadata: annotations: