概述
MySQL 是常用的關系型資料庫,MariaDB 作為 MySQL 的分支版本,兼容 MySQL 協議,也越來越流行,在 Kubernetes 環境中如何使用 Prometheus 來對它們進行監控呢?通常是借助開源的 mysqld-exporter 來實作,本文將圍繞這個主題展開詳細介紹下,
mysqld-exporter 原理介紹
mysqld-exporter 通過讀取 MySQL 或 MariaDB 中的一些資料庫狀態的資料,并將其轉換為 Prometheus 的指標格式并暴露成 http 介面被 Prometheus 所采集,來實作讓原本不支持 Prometheus 指標的 MySQL 和 MariaDB 能夠被 Prometheus 監控起來:

操作步驟
部署 mysqld-exporter
在部署 mysqld-exporter 之前首先保證 MySQL 或 MariaDB 已經部署,可以在集群內,也可以在集群外,或者使用現成的云服務,如果還沒有,這里以從應用市場部署到集群為例來部署一個 MySQL:
- 在應用市場中找到 MySQL,點擊
創建應用-創建,

- 查看 mysql 是否正常運行:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-698b898bf7-4dc5k 1/1 Running 0 11s
- 獲取 root 密碼:
$ kubectl get secret -o jsonpath={.data.mysql-root-password} mysql
6ZAj33yLBo
有了 MySQL 后,我們開始準備部署 mysqld-exporter,首先為 mysqld-exporter 創建一個賬號,登錄 MySQL:
$ kubectl exec -it mysql-698b898bf7-4dc5k bash
$ mysql -uroot -p6ZAj33yLBo
然后輸入 SQL 來創建賬號,這里以 mysqld-exporter/123456 為例:
CREATE USER 'mysqld-exporter' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, REPLICATION SLAVE, SELECT ON *.* TO 'mysqld-exporter';
flush privileges;
然后使用以下 yaml 來部署 mysqld-exporter:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysqld-exporter
spec:
replicas: 1
selector:
matchLabels:
app: mysqld-exporter
template:
metadata:
labels:
app: mysqld-exporter
spec:
containers:
- name: mysqld-exporter
image: prom/mysqld-exporter:v0.12.1
args:
- --collect.info_schema.tables
- --collect.info_schema.innodb_tablespaces
- --collect.info_schema.innodb_metrics
- --collect.global_status
- --collect.global_variables
- --collect.slave_status
- --collect.info_schema.processlist
- --collect.perf_schema.tablelocks
- --collect.perf_schema.eventsstatements
- --collect.perf_schema.eventsstatementssum
- --collect.perf_schema.eventswaits
- --collect.auto_increment.columns
- --collect.binlog_size
- --collect.perf_schema.tableiowaits
- --collect.perf_schema.indexiowaits
- --collect.info_schema.userstats
- --collect.info_schema.clientstats
- --collect.info_schema.tablestats
- --collect.info_schema.schemastats
- --collect.perf_schema.file_events
- --collect.perf_schema.file_instances
- --collect.perf_schema.replication_group_member_stats
- --collect.perf_schema.replication_applier_status_by_worker
- --collect.slave_hosts
- --collect.info_schema.innodb_cmp
- --collect.info_schema.innodb_cmpmem
- --collect.info_schema.query_response_time
- --collect.engine_tokudb_status
- --collect.engine_innodb_status
ports:
- containerPort: 9104
protocol: TCP
env:
- name: DATA_SOURCE_NAME
value: "mysqld-exporter:123456@(mysql.default.svc.cluster.local:3306)/"
---
apiVersion: v1
kind: Service
metadata:
name: mysqld-exporter
labels:
app: mysqld-exporter
spec:
type: ClusterIP
ports:
- port: 9104
protocol: TCP
name: http
selector:
app: mysqld-exporter
! 注意根據實際情況替換 DATA_SOURCE_NAME 中的賬號密碼,以及 MySQL 的連接地址
添加監控采集配置
有了 mysqld-exporter 后,我們就可以配置監控的采集,讓 mysqld-exporter 暴露的資料被采集起來,如果你的集群中安裝了 prometheus-operator,可以通過定義 ServiceMonitor 來配置采集規則,示例:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: mysqld-exporter
spec:
endpoints:
interval: 5s
targetPort: 9104
namespaceSelector:
matchNames:
- default
selector:
matchLabels:
app: mysqld-exporter
你可以通過修改 Prometheus 原生的組態檔來配置采集規則,示例:
- job_name: mysqld-exporter
scrape_interval: 5s
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- default
relabel_configs:
- action: keep
source_labels:
- __meta_kubernetes_service_label_app_kubernetes_io_name
regex: mysqld-exporter
- action: keep
source_labels:
- __meta_kubernetes_endpoint_port_name
regex: http
添加監控面板
采集配置好,正常采集有了資料之后,還需要為 Grafana 添加監控面板進行展示,如果只是看 MySQL 或 MariaDB 的一些概覽情況,可以匯入 grafana.com 的這個面板: https://grafana.com/grafana/dashboards/7362

如果需要更豐富的面板,可以匯入 percona 開源的一些面板,地址: https://github.com/percona/grafana-dashboards/tree/master/dashboards (匯入 MySQL_ 開頭的 json 檔案中的內容即可),
小結
本文介紹了如何利用開源的 mysqld-exporter 將原本不支持 Prometheus 的 MySQL 或 MariaDB 接入進來,讓 Prometheus 也能采集資料庫的監控指標,并添加 Grafana 監控面板,讓查看監控更加方便,
【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/199690.html
標籤:其他

