From 89a71a471578a529c26df599f266133c1fdb11a3 Mon Sep 17 00:00:00 2001 From: icecheng Date: Mon, 22 Sep 2025 16:16:39 +0800 Subject: [PATCH] feat: add prometheus metrics intergration guideline --- ...ometheus-metrics-intergration-guideline.md | 56 +++++++++++++++++++ .../templates/metrics/servicemonitor.yaml | 40 +++++++++++++ freeleaps/helm-pkg/metrics/values.alpha.yaml | 7 +++ freeleaps/helm-pkg/metrics/values.prod.yaml | 7 +++ freeleaps/helm-pkg/metrics/values.yaml | 7 +++ 5 files changed, 117 insertions(+) create mode 100644 docs/prometheus-metrics-intergration-guideline.md create mode 100644 freeleaps/helm-pkg/metrics/templates/metrics/servicemonitor.yaml diff --git a/docs/prometheus-metrics-intergration-guideline.md b/docs/prometheus-metrics-intergration-guideline.md new file mode 100644 index 00000000..9c5925ab --- /dev/null +++ b/docs/prometheus-metrics-intergration-guideline.md @@ -0,0 +1,56 @@ +# 1. 服务提供Metrics接口 + +在`webapi/providers`目录下创建一个`metrics.py`文件,用于提供Metrics接口。 + +内容如下 +``` +def register(app): + instrumentator = ( + Instrumentator().instrument( + app, + metric_namespace="freeleaps-mertics", + metric_subsystem=app_settings.APP_NAME) + ) + + @app.on_event("startup") + async def startup(): + instrumentator.expose(app, endpoint="/api/_/metrics", should_gzip=True) + logging.info("Metrics endpoint exposed at /api/_/metrics") +``` + +参考https://gitea.freeleaps.mathmast.com/freeleaps/freeleaps-service-hub/src/branch/master/apps/metrics的接入方式 + + +# 2. 配置Metrics采集 + +## 2.1. 找到helm pkg目录 +对于freeleaps内部服务而言,你需要在freeleaps-ops仓库下找到该服务部署的helm-package配置 +> 比如metrics服务,他的配置在`https://gitea.freeleaps.mathmast.com/freeleaps/freeleaps-ops/src/branch/master/freeleaps/helm-pkg/metrics` + +对于freeleaps租户服务而言(通过one-click部署),你需要在对应服务仓库下找到`.freeleas/devops/helm-pkg` +> 比如magicleaps服务,他的配置在`https://gitea.freeleaps.mathmast.com/products/magicleaps/src/branch/main/.freeleaps/devops/helm-pkg` + +## 2.2. 新增新增servicemonitor配置 +在templates文件夹下新增`servicemonitor.yaml`文件,内容如下,内容参考`https://gitea.freeleaps.mathmast.com/freeleaps/freeleaps-ops/src/branch/master/freeleaps/helm-pkg/notification/templates/notification/servicemonitor.yaml` + +根据value.yaml中的配置,更新必要内容,比如第6行从notification修改为metrics + +## 2.3. 修改value.{alpha|prod}.yaml +新增serviceMonitor配置,参考`https://gitea.freeleaps.mathmast.com/freeleaps/freeleaps-ops/src/branch/master/freeleaps/helm-pkg/notification/values.prod.yaml` +``` + - name: notification-service + type: ClusterIP + port: 8003 + targetPort: 8003 + serviceMonitor: + enabled: true + labels: + release: kube-prometheus-stack + namespace: freeleaps-monitoring-system + internal: 30s + scrapeTimeout: '' +``` + + + + diff --git a/freeleaps/helm-pkg/metrics/templates/metrics/servicemonitor.yaml b/freeleaps/helm-pkg/metrics/templates/metrics/servicemonitor.yaml new file mode 100644 index 00000000..2ca9a3ae --- /dev/null +++ b/freeleaps/helm-pkg/metrics/templates/metrics/servicemonitor.yaml @@ -0,0 +1,40 @@ +{{ $namespace := .Release.Namespace }} +{{ $appVersion := .Chart.AppVersion | quote }} +{{ $releaseService := .Release.Service }} +{{ $releaseName := .Release.Name }} + +{{- range $service := .Values.metrics.services }} +{{- if $service.serviceMonitor.enabled }} +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ $service.name }}-monitor + namespace: {{ $service.serviceMonitor.namespace }} + labels: + app.kubernetes.io/version: {{ $appVersion }} + app.kubernetes.io/name: {{ $service.name }}-monitor + app.kubernetes.io/managed-by: {{ $releaseService }} + app.kubernetes.io/instance: {{ $releaseName }} + {{- if $service.serviceMonitor.labels }} + {{- toYaml $service.serviceMonitor.labels | nindent 4 }} + {{- end }} +spec: + endpoints: + - path: /api/_/metrics + targetPort: {{ $service.targetPort }} + {{- if $service.serviceMonitor.interval }} + interval: {{ $service.serviceMonitor.interval }} + {{- end }} + {{- if $service.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ $service.serviceMonitor.scrapeTimeout }} + {{- end }} + namespaceSelector: + matchNames: + - {{ $namespace | quote }} + selector: + matchLabels: + app.kubernetes.io/name: {{ $service.name }} + app.kubernetes.io/instance: {{ $releaseName }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/freeleaps/helm-pkg/metrics/values.alpha.yaml b/freeleaps/helm-pkg/metrics/values.alpha.yaml index a74e2902..f2b84fc7 100644 --- a/freeleaps/helm-pkg/metrics/values.alpha.yaml +++ b/freeleaps/helm-pkg/metrics/values.alpha.yaml @@ -50,6 +50,13 @@ metrics: type: ClusterIP port: 8009 targetPort: 8009 + serviceMonitor: + enabled: true + labels: + release: kube-prometheus-stack + namespace: freeleaps-monitoring-system + internal: 30s + scrapeTimeout: '' configs: starrocksHost: freeleaps-starrocks-cluster-fe-service.freeleaps-data-platform.svc starrocksPort: 9030 diff --git a/freeleaps/helm-pkg/metrics/values.prod.yaml b/freeleaps/helm-pkg/metrics/values.prod.yaml index a74e2902..f2b84fc7 100644 --- a/freeleaps/helm-pkg/metrics/values.prod.yaml +++ b/freeleaps/helm-pkg/metrics/values.prod.yaml @@ -50,6 +50,13 @@ metrics: type: ClusterIP port: 8009 targetPort: 8009 + serviceMonitor: + enabled: true + labels: + release: kube-prometheus-stack + namespace: freeleaps-monitoring-system + internal: 30s + scrapeTimeout: '' configs: starrocksHost: freeleaps-starrocks-cluster-fe-service.freeleaps-data-platform.svc starrocksPort: 9030 diff --git a/freeleaps/helm-pkg/metrics/values.yaml b/freeleaps/helm-pkg/metrics/values.yaml index c00438b8..185b93bd 100644 --- a/freeleaps/helm-pkg/metrics/values.yaml +++ b/freeleaps/helm-pkg/metrics/values.yaml @@ -50,6 +50,13 @@ metrics: type: ClusterIP port: 8009 targetPort: 8009 + serviceMonitor: + enabled: true + labels: + release: kube-prometheus-stack + namespace: freeleaps-monitoring-system + internal: 30s + scrapeTimeout: '' configs: starrocksHost: "" starrocksPort: 8009