Prometheus實戰教程:k8s平臺-Mysql監控案例

配置文件優化后的 Prometheus 自動發現 MySQL 實例的完整 YAML 文件。該配置包括:

  1. MySQL Exporter 部署:使用 ConfigMap 提供 MySQL 連接信息。
  2. Prometheus 自動發現:通過 Kubernetes 服務發現自動抓取 MySQL 實例。

1、mysql 配置文件 (mysql-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:name: mysqllabels:app: mysql
spec:replicas: 3selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlannotations:prometheus.io/scrape: "true"  # 允許 Prometheus 抓取prometheus.io/port: "9104"    # MySQL Exporter 暴露的端口spec:containers:- name: mysqlimage: harbor.fq.com/public/mysql:9.1.0  # 使用官方 MySQL 鏡像env:- name: MYSQL_ROOT_PASSWORDvalue: "password"  # 設置 MySQL root 密碼ports:- containerPort: 3306  # MySQL 默認端口
---
apiVersion: v1
kind: Service
metadata:name: mysql-servicelabels:app: mysqlannotations:prometheus.io/scrape: "true"  # 允許 Prometheus 抓取prometheus.io/port: "9104"    # MySQL Exporter 暴露的端口
spec:selector:app: mysqlports:- name: mysqlprotocol: TCPport: 3306targetPort: 3306

cat mysql-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysqllabels:app: mysql
spec:serviceName: "mysql"replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlannotations:prometheus.io/scrape: "true"  # 允許 Prometheus 抓取prometheus.io/port: "9104"    # MySQL Exporter 暴露的端口spec:containers:- name: mysqlimage: harbor.fq.com/public/mysql:9.1.0  # MySQL 鏡像env:- name: MYSQL_ROOT_PASSWORDvalue: "password"  # 設置 MySQL root 密碼ports:- containerPort: 3306  # MySQL 默認端口volumeMounts:- name: mysql-datamountPath: /var/lib/mysql  # MySQL 數據存儲路徑volumes:- name: mysql-dataemptyDir: {}  # 使用空目錄,不持久化數據---
apiVersion: v1
kind: Service
metadata:name: mysql-servicelabels:app: mysqlannotations:prometheus.io/scrape: "true"  # 允許 Prometheus 抓取prometheus.io/port: "9104"    # MySQL Exporter 暴露的端口
spec:selector:app: mysqlports:- name: mysqlprotocol: TCPport: 3306targetPort: 3306type: ClusterIP  # 內部服務

2、登錄mysql,并創建‘mysql_exporter’用戶

2.1、查看mysql容器名稱,登錄到容器內

[root@k8s-master01 example]# kubectl get pod
NAME                                  READY   STATUS    RESTARTS   AGE
kuard-d574f5b78-r2l77                 1/1     Running   0          278d
mysql-0                               1/1     Running   0          6s[root@k8s-master01 example]# kubectl exec -it mysql-0 -- bash
bash-5.1# 

2.2、確保 mysql_exporter 用戶存在**

使用 MySQL root 用戶登錄并檢查 mysql_exporter 用戶:

SELECT user, host FROM mysql.user WHERE user = 'mysql_exporter';

2.3、如果沒有該用戶,則創建:

CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'your_password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';
FLUSH PRIVILEGES;

實操:

CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'mysql123!';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';
FLUSH PRIVILEGES;

![[IMG-5、k8s平臺:mysql 監控案例-20250318102405307.png]]

mysql> SELECT user, host FROM mysql.user WHERE user = 'mysql_exporter';
Empty set (0.00 sec)mysql> CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'mysql123!';
Query OK, 0 rows affected (0.01 sec)mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';
Query OK, 0 rows affected (0.01 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SELECT user, host FROM mysql.user WHERE user = 'mysql_exporter';
+----------------+------+
| user           | host |
+----------------+------+
| mysql_exporter | %    |
+----------------+------+
1 row in set (0.00 sec)mysql>

? 注意:確保 your_passwordmysqld-exporter 配置的密碼匹配。

4. MySQL Exporter 配置文件 (mysql-exporter-config.yaml)

apiVersion: v1
kind: ConfigMap
metadata:name: mysql-exporter-config
data:.my.cnf: |-[client]user = mysql_exporterpassword = mysql123![client.servers]user = mysql_exporterpassword = mysql123!

5. MySQL Exporter 部署文件 (mysql-exporter-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-exporterlabels:app: mysql-exporter
spec:replicas: 1selector:matchLabels:app: mysql-exportertemplate:metadata:labels:app: mysql-exporterannotations:prometheus.io/scrape: "true"  # 允許 Prometheus 抓取prometheus.io/port: "9104"    # MySQL Exporter 暴露的端口spec:volumes:- name: mysql-exporter-configconfigMap:name: mysql-exporter-configitems:- key: .my.cnfpath: .my.cnfcontainers:- name: mysql-exporterimage: harbor.fq.com/prometheus/mysql-exporter:v0.16.0command:- mysqld_exporter- --config.my-cnf=/etc/mysql-exporter/.my.cnf  # 指定配置文件路徑securityContext:runAsUser: 0  # 以 root 用戶運行ports:- containerPort: 9104  # MySQL Exporter 默認端口volumeMounts:- name: mysql-exporter-configmountPath: /etc/mysql-exporter/.my.cnfsubPath: .my.cnf
---
apiVersion: v1
kind: Service
metadata:name: mysql-exporter-servicelabels:app: mysql-exporterannotations:prometheus.io/scrape: "true"  # 允許 Prometheus 抓取prometheus.io/port: "9104"    # MySQL Exporter 暴露的端口
spec:selector:app: mysql-exporterports:- protocol: TCPport: 9104targetPort: 9104type: ClusterIP

6. Prometheus 自動發現配置 (prometheus.yml)

scrape_configs:- job_name: 'mysql'kubernetes_sd_configs:- role: endpoints  # 從 Kubernetes Endpoints 發現服務relabel_configs:# 只抓取帶有 `prometheus.io/scrape: "true"` 注解的服務- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true# 替換目標地址為服務的 IP 和指定端口(9104)- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]action: keepregex: Pod;(.*mysql-exporter.*)  # 僅抓取名稱包含 "mysql-exporter" 的 Pod- source_labels: [__meta_kubernetes_pod_ip]action: replacetarget_label: __address__replacement: $1:9104  # 指定 MySQL Exporter 的端口為 9104# 添加 Kubernetes 服務的 app 標簽- source_labels: [__meta_kubernetes_service_label_app]action: replacetarget_label: app# 添加 Kubernetes 命名空間標簽- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: namespace# 添加 Kubernetes 服務名稱標簽- source_labels: [__meta_kubernetes_service_name]action: replacetarget_label: service# 添加 Kubernetes Pod 名稱標簽- source_labels: [__meta_kubernetes_pod_name]action: replacetarget_label: pod# 添加 Kubernetes 節點名稱標簽- source_labels: [__meta_kubernetes_pod_node_name]action: replacetarget_label: node# 添加實例標簽(用于區分不同的 MySQL 實例)- source_labels: [__meta_kubernetes_pod_ip]action: replacetarget_label: instance

7. 部署步驟

  1. 創建 ConfigMap

    kubectl apply -f mysql-exporter-config.yaml
  2. 部署 MySQL Exporter:

    kubectl apply -f mysql-exporter-deployment.yaml
  3. 更新 Prometheus 配置文件(prometheus.yml),添加 MySQL 的自動發現配置。

  4. 重啟 Prometheus 以加載新配置。


8. 驗證

  1. 檢查 mysql-exporter 容器日志:

    kubectl logs <mysql-exporter-pod-name> -c mysql-exporter
    • 確保沒有錯誤日志。
  2. 檢查 Pod 狀態:

    kubectl get pods
    • 確保 mysql-exporter 容器處于 Running 狀態。
  3. 訪問 Prometheus Web UI(http://<prometheus-server>:9090),查看 Targets 頁面,確認 MySQL 目標已被發現。 ![[IMG-5、k8s平臺:mysql 監控案例-20250317170341907.png]]


9. 生產環境建議

  • 高可用性:部署多個 MySQL Exporter 實例,并使用 Kubernetes 的 HorizontalPodAutoscaler 實現自動擴展。
  • 監控告警:設置 MySQL 關鍵指標的告警規則(如連接數、慢查詢等)。
  • 資源限制:為 MySQL Exporter 設置資源限制(CPU 和內存)。
  • 日志管理:收集 MySQL Exporter 的日志,便于排查問題。

10. 示例告警規則 (mysql-alerts.yml)

groups:- name: mysql_alertsrules:- alert: MySQLDownexpr: mysql_up == 0for: 1mlabels:severity: criticalannotations:summary: "MySQL is down"description: "MySQL instance {{ $labels.instance }} is down."- alert: HighMySQLConnectionsexpr: mysql_global_status_connections > 1000for: 5mlabels:severity: warningannotations:summary: "High number of MySQL connections"description: "MySQL instance {{ $labels.instance }} has more than 1000 connections."- alert: HighMySQLSlowQueriesexpr: mysql_global_status_slow_queries > 10for: 5mlabels:severity: warningannotations:summary: "High number of slow queries on MySQL"description: "MySQL instance {{ $labels.instance }} has more than 10 slow queries."

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83766.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83766.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83766.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于區塊鏈技術的智能汽車診斷與性能分析

我是穿拖鞋的漢子&#xff0c;魔都中堅持長期主義的汽車電子工程師。 老規矩&#xff0c;分享一段喜歡的文字&#xff0c;避免自己成為高知識低文化的工程師&#xff1a; 鈍感力的“鈍”&#xff0c;不是木訥、遲鈍&#xff0c;而是直面困境的韌勁和耐力&#xff0c;是面對外界…

文字溢出省略號顯示

一、 單行文字溢出、省略號顯示 二、 多行文字溢出&#xff0c;省略號顯示 有較大的兼容性問題&#xff0c;適用于Webkit為內核的瀏覽器軟件&#xff0c;或者移動端的&#xff08;大部分也是webkit&#xff09; 此效果建議后端人員開發 三、圖片底側空白縫隙的修復技巧&#…

JavaScript 中使用 Elasticsearch 的正確方式,第一部分

作者&#xff1a;來自 Elastic Jeffrey Rengifo 講解如何用 JavaScript 創建一個可用于生產環境的 Elasticsearch 后端。 想獲得 Elastic 認證&#xff1f;看看下一期 Elasticsearch 工程師培訓什么時候開始吧&#xff01; Elasticsearch 擁有大量新功能&#xff0c;能幫助你…

RAG-MCP:突破大模型工具調用瓶頸,告別Prompt膨脹

大語言模型&#xff08;LLM&#xff09;的浪潮正席卷全球&#xff0c;其強大的自然語言理解、生成和推理能力&#xff0c;為各行各業帶來了前所未有的機遇。然而&#xff0c;正如我們在之前的探討中多次提及&#xff0c;LLM并非萬能。它們受限于訓練數據的時效性和范圍&#xf…

鴻蒙OSUniApp制作一個小巧的圖片瀏覽器#三方框架 #Uniapp

利用UniApp制作一個小巧的圖片瀏覽器 最近接了個需求&#xff0c;要求做一個輕量級的圖片瀏覽工具&#xff0c;考慮到多端適配的問題&#xff0c;果斷選擇了UniApp作為開發框架。本文記錄了我從0到1的開發過程&#xff0c;希望能給有類似需求的小伙伴一些參考。 前言 移動互聯…

Python爬蟲實戰:獲取taobao網最新rtx5060ti顯卡銷量數據并分析,為消費者做參考

一、系統定義與技術架構 1.1 系統定義 本系統是基于 Python 開發的電商數據采集與分析工具,旨在通過模擬用戶行為實現淘寶平臺 50 系列顯卡(以 RTX 5060 Ti 為例)銷售數據的自動化獲取、清洗、分析及可視化。核心功能包括: 自動登錄:通過 Selenium 模擬瀏覽器操作完成賬…

OCframework編譯Swift

建一個OC的framework&#xff1a; 需要對外暴露的OC文件&#xff0c;需要放到OC的.h文件中 framework中&#xff0c;OC類&#xff0c;調用framework中的Swift類&#xff1a; #import "WowAudioFocus/WowAudioFocus-Swift.h" //02 #import "{工程名}/{工程…

每日算法 -【Swift 算法】Two Sum 問題:從暴力解法到最優解法的演進

【Swift 算法】Two Sum 問題&#xff1a;從暴力解法到最優解法的演進 本文通過“Two Sum”問題&#xff0c;帶你了解如何從最直觀的暴力解法&#xff0c;逐步優化到高效的哈希表解法&#xff0c;并對兩者進行對比&#xff0c;適合算法入門和面試準備。 &#x1f4a1; 問題描述 …

【保姆級】Nginx簡介以及安裝

Nginx簡介 ? Nginx是一個高性能的HTTP和反向代理web服務器&#xff0c;同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點&#xff08;俄文&#xff1a;Рамблер&#xff09;開發的&#xff0c;第一個公開版本0.1.0發布于20…

C++(25): 標準庫 <deque>

目錄 1、 核心概念 2. 基本語法 3. 特點 4. 特有成員函數 5. 內存與性能 6. 示例代碼 7. 成員函數列表 8. 使用場景 9. 注意事項 1、 核心概念 雙端隊列(Double-Ended Queue,deque) 是一種允許在隊列頭部和尾部高效插入和刪除元素的線性數據結構,同時支持隨機訪問。…

軟件設計師關系代數和元組演算(關聯、笛卡爾積、除、映射、分段等問題)考點分析——求三連

一、考點分值占比與趨勢分析 綜合知識歷年統計表 年份考題數量分值分值占比考察重點2018334%自然連接、投影、選擇2019222.67%笛卡爾積、條件篩選2020111.33%屬性列計算2021334%關系運算綜合應用2022222.67%元組演算表達式2023222.67%差運算、連接類型2024111.33%除法運算應用…

卸載云樞(MacOS 版)

刪除 APP 和相關文件 sudo chflags -R noschg /Applications/Yunshu.app 2>/dev/null sudo rm -rf /Applications/Yunshu.app sudo rm -rf /Library/Application\ Support/EagleCloud sudo rm -rf /Library/LaunchAgents/com.eagleyun.endpoint.agent.plist sudo rm -rf /L…

在 Ubuntu 20.04 中使用 init.d 或者systemd實現開機自動執行腳本

Ubuntu 20 默認使用的是 systemd 系統管理器&#xff0c;但傳統的 SysV Init&#xff08;/etc/init.d/&#xff09;腳本依然兼容并可用。本文將介紹如何通過 init.d 寫腳本來在開機時自動設置某個 GPIO&#xff08;如 GPIO407&#xff09;為高電平&#xff0c;適用于嵌入式系統…

蘋果的人工智能領域慢熱

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

FastAPI使用@app.get/@app.post等裝飾器注冊路由無效404 Not Found

&#xff08;一&#xff09;問題描述 使用app.get注冊路由&#xff0c;前端發送請求訪問路徑和路由一致&#xff0c;但一直顯示404 Not Found&#xff0c;檢查了好幾遍&#xff0c;確認沒有訪問路徑不一致的問題。 在Swagger文檔里查看&#xff0c;也沒有找到這個新添加的接口。…

制作我的計算器

1. 界面布局 新建項目 MyCalculator&#xff0c;開始布局。 2. 靜態布局 代碼如下&#xff1a; // etc/pages/Index.ets Entry Component struct Index {build() {Column() {/*** 運算區*/Column() {TextInput({ text: 12x13 }).height(100%).fontSize(32).enabled(false).f…

2025-5-17Vue3快速上手

1、ref對比reactive 區別第2點&#xff1a;本質是指針指向問題 整體修改reactive的數據時&#xff0c;有坑 使用原則需要根據項目原本的代碼靈活參考 如果要更新的數據是從服務器獲取回來的&#xff0c;用Object.assign是好方法&#xff0c;需要注意的是&#xff1a;Object.a…

深度學習---模型預熱(Model Warm-Up)

一、基本概念與核心定義 模型預熱是指在機器學習模型正式訓練或推理前&#xff0c;通過特定技術手段使模型參數、計算圖或運行環境提前進入穩定狀態的過程。其本質是通過預處理操作降低初始階段的不穩定性&#xff0c;從而提升后續任務的效率、精度或性能。 核心目標&#xf…

加載渲染geojson數據

本節我們學習如何在cesium中加載geojson數據 想要加載geojson數據首先要有數據源,我們以中國地圖為例 復制數據的geo api 在cesium的官網庫中查詢 可以看到如何在cesium中導入數據的方法 //加載geojson數據let dataGeo Cesium.GeoJsonDataSource.load("https://geo.dat…

python:pymysql概念、基本操作和注入問題講解

python&#xff1a;pymysql分享目錄 一、概念二、數據準備三、安裝pymysql四、pymysql使用&#xff08;一&#xff09;使用步驟&#xff08;二&#xff09;查詢操作&#xff08;三&#xff09;增&#xff08;四&#xff09;改&#xff08;五&#xff09;刪 五、關于pymysql注入…