文章目錄
使用 Helm Chart kube-prometheus-stack 透過 ServiceMonitor 自動蒐集 metrics
過去團隊會在建立 storage service 連帶建立相對應的 exporter,以 MySql 為例,ansible 的腳本已經包含建立 mysql service 與 mysql exporter service,並在 mysql 與 mysql exporter 啟動後再註冊相關 prometheus 的 scrape config 中加入相對應的 job,這樣的方式在服務數量增加時,會有一定的維護成本,且不易管理。加上團隊的 prometheus 本來就在 kubernetes 上,本來就可以將 exporter 安裝進 kubernetes,所以就來試試看使用 Helm Chart kube-prometheus-stack 透過 ServiceMonitor 自動蒐集 metrics。
今天會以 mysql-exporter 做為範例,來說明如何設定 kube-prometheus-stack 與 prometheus-mysql-exporter 之間的關聯
基本環境說明
- macOS Sonoma 14.3.1 (Apple M2 Pro)
- OrbStack Version 1.4.3 (16673)
- Helm version.BuildInfo{Version:“v3.14.2”, GitCommit:“c309b6f0ff63856811846ce18f3bdc93d2b4d54b”, GitTreeState:“clean”, GoVersion:“go1.22.0”}
Helm Charts
- prometheus-community/kube-prometheus-stack-57.0.1
- prometheus-community/prometheus-mysql-exporter-2.5.0
Docker images
- mysql:8.3.0
使用 docker 建立測試用 MySQL
docker run --rm --name mysql -p 3306:3306 -e MYSQL_USER=monitoring -e MYSQL_PASSWORD=pass.123 -e MYSQL_ROOT_PASSWORD=pass.123 -d mysql:8.3.0
設定方式
新增 Helm repository
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update
使用 Helm 安裝 kube-prometheus-stack
這是一般步驟,需要留意的是 release name (以下的例子是
kube-prometheus-stack
) 後面會用到helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack
使用 Helm 安裝 prometheus-mysql-exporter
helm install --set serviceMonitor.enabled=true --set serviceMonitor.additionalLabels.release=kube-prometheus-stack --set mysql.host=host.docker.internal --set mysql.user=monitoring --set mysql.pass=pass.123 mysql-exporter prometheus-community/prometheus-mysql-exporter
serviceMonitor.enabled=true
代表啟用 ServiceMonitorserviceMonitor.additionalLabels.release=kube-prometheus-stack
代表將 ServiceMonitor 會增加 kube-prometheus-stack release name 的 label 讓 prometheus operator 可以自動探查mysql.host=host.docker.internal
代表 mysql 服務的位置為host.docker.internal
,這是 docker for mac 的特殊設定mysql.user=monitoring
代表 mysql 服務的使用者為monitoring
(這是基本環境說明中 mysql 啟動時設定加入的 user)mysql.pass=pass.123
代表 mysql 服務的密碼 (這是基本環境說明中 mysql 啟動時設定的 password)
心得
安裝 mysql exporter 前
安裝 mysql exporter 後
我查了一些資料,發現大多數還是都使用 prometheus 的 scrape config 來設定,但這樣的幾個缺點:
相依性問題
prometheus 與 exporter 安裝順序會互卡:prometheus 安裝時,mysql exporter 尚未安裝,所以 scrape config 還不能設定,變成 mysql exporter 安裝後再額外調整 scrape config,流程變得複雜
維護成本高
因為相依問題,所以設定時為了確保正確性就會多了不少步驟或是流程,無形中會增加維護成本
不知道是我對 ServiceMonitor 認識有限的關係,還是我漏看了文件,我花了一整天查為什麼 prometheus 沒有自動將 mysql exporter 的資料收進 prometheus 的狀況,最後才發現 serviceMonitor.additionalLabels.release
需要設定成 kube-prometheus-stack 的 release name
參考資訊
文章作者 Yowko Tsai
上次更新 2024-04-10
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。