監控數據庫mysql
一、軟件環境介紹
1.1 mysql介紹
MySQL是一個關系型數據庫管理系統,目前屬于 Oracle 旗下產品它是最流行的關系型數據庫管理系統之一,存放表的數據。與其他關系型數據庫管理系統相比,市占率

<hr>
1.2主機清單
職責 | ip地址 | 備注
Prometheus服務器 | 192.168.100.85 | docker機式的prometheus
待監控Linux | 192.168.100.141 | 待準備組件:mysql 8版本
<hr>
二、prometheus監控mysql
docker安裝(略)
docker-compose安裝(略)
2.1待監控Linux安裝mysql
創建docker-compose目錄
mkdir /data/mysql -p
cd /data/mysql
創建docker-compose.yaml
vim docker-compose.yaml
配置如下:
services:
mysql:
image: registry.cn-hangzhou.aliyuncs.com/ldw520/mysql:8.0
container_name: mysql
restart: always
volumes:
- /data/mysql/data:/var/lib/mysql
environment:
TZ: Asia/Shanghai
LANG: en_US.UTF-8
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--lower_case_table_names=1
--performance_schema=1
--sql-mode=""
--skip-log-bin
ports:
- 3306:3306
啟動 docker-compose.yaml
docker-compose up -d
查看docker的信息
docker images
docker ps -a
<hr>
2.2 創建監控用戶
centos2機器上,登錄MongODB創建監控用戶,權限為"readAnyDatabase”,如果是cluster環境,漲要有"clusterMonitor
登錄MongoDB
#進入mysql容器
docker exec -it mysql mysql -uroot -p123456
#創建exporter用戶
CREATE USER 'exporter'@'%' IDENTIFIED BY '123456';
GRANT GRANT OPTION ON *.* TO 'exporter'@'%';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
#刷新權限
flush privileges;
#退出mysql容器
exit;
#測試登錄
docker exec -it mysql mysql -uexporter -p123456
<hr>
2.3 安裝mysqld_exporter
centos2機器上,編輯docker-compose.yaml文件
vi docker-compose.yaml
如圖所示:加入一個mysqld_exporter配置

mysqld-exporter:
image: registry.cn-hangzhou.aliyuncs.com/ldw520/mysqld-exporter:v0.12.1
container_name: mysqld_exporter
restart: always
command:
- '--collect.info_schema.processlist'
- '--collect.info_schema.innodb_metrics'
- '--collect.info_schema.tablestats'
- '--collect.info_schema.tables'
- '--collect.info_schema.userstats'
- '--collect.engine_innodb_status'
environment:
- DATA_SOURCE_NAME=exporter:123456@(192.168.100.141:3306)/
ports:
- 9104:9104
運行docker-compose up-d的命令,觀察mysql的程序是否成功運行
宿主機上訪問mysqld_exporter的metrics
http://192.168.100.141:9104/metrics
<hr>
2.4 prometheus服務器添加mysqld_exporter的地址
192.168.100.85的centos上,修改prometheus的配置文件
#進入docker-prometheus目錄
cd /data/docker-prometheus
#修改prometheus.yml
vi prometheus/prometheus.yml
添加monogodb_exporter配置如下圖:

- job_name: "mysqld-exporter"
static_configs:
- targets: ["192.168.100.141:9104"]
labels:
istance: "centos2服務器mysql監聽"
保存后輸入命令更新:
curl -XPOST http://localhost:9090/-/reload
成功監聽

<hr/>
2.5 mysql服務器指標查詢
mysql_up # 服務孫是否在線
mysql_global _status_uptime #通行時長,單位5
delta(mysql_global_status_bytes_received[1m]) #網絡接收的 byte
delta(mysql_global_status_bytes_sent[1m]) #網路發送的bytes
mysql_global_status_threads_connected # 當前的客盧端連接數
mysql_global_variables_max_connections #允許的最士連續數
mysql_global_status_threads_running #正在執行命今的客戶端數
delta(mysql_global_status_aborted_connects[1m]) 計算在過去1分鐘內,嘗試連接到MySQL服務器但失敗的連接數的增加量#
delta(mysql_global_status_aborted_clients[1m]) #計算在過去1分鐘內,由于客戶端沒有正確關閉連接而被MySQL服務器中斷的連接數的增加量
delta(mysql_global_status_commands_total{command="xx"}[1m])> 0 #檢查在過去1分鐘內,是否執行了至少一次指定的MySQL命令類型(`xx`)。這個表達式通常用于監控和告警系統中,以檢測特定命令的執行頻率或作為觸發告警的條件
delta(mysql_global_status_handlers_total{handler="xx"}[1m])> 0 #檢查在過去1分鐘內,是否執行了至少一次指定的操作。如如讀取、寫入、更新。這個表達式通常用于監控和告警系統中,以檢測特定命令的執行頻率或作為觸發告警的條件
delta(mysql_global_status_handlers_total{handler="commit"}[1m])> 0 #檢查在過去1分鐘內,是否執行了至少一次與指定的處理器操作(假設為“commit”)相關的操作。
delta(mysql_global_status_table_locks_immediate[1m]) #檢查在過去1分鐘內,能夠立即獲取的表鎖的數量增加了多少
delta(mysql_global_status_table_locks_waited[1m]) #檢查在過去1分鐘內,需要等待才能獲取的表鎖的數量增加了多少
delta(mysql_global_status_queries[1m]) #檢查在過去1分鐘內,MySQL服務器執行了多少個新的查詢。
delta(mysql_global_status_slow_queries[1m]) #檢查在過去1分鐘內,MySQL服務器執行了多少個新的慢查詢。
mysql_global_status_innodb_page_size #innodb #數據頁的大小
mysql_global_variables_innodb_buffer_pool_size #InnoDB存儲引擎用于緩存數據頁和索引頁的內存緩沖區的大小
mysql_global_status_buffer_pool_pages{state= "data"} # 當前InnoDB緩沖池中包含數據的數據頁數 包括潔頁,臟頁
mysql_global_status_buffer_pool_dirty_pages # 當前InnoDB緩沖池中臟頁數
mysql_global_status_innodb_row_lock_current_waits #當前正在等待的 InnoDB 行鎖數量
mysql_global_status_innodb_row_lock_time #從服務器啟動以來的總 InnoDB 行鎖等待時間
mysql_global_status_innodb_row_lock_time_avg #MySQL服務器啟動以來,所有InnoDB行鎖等待時間的平均值。
mysql_global_status_innodb_row_lock_time_max # Innodb 行鎖單次等待的最長時同
mysql_global_status_innodb_row_lock_waits #表示從MySQL服務器啟動到當前時間點,InnoDB存儲引擎中發生的行鎖等待事件的總數
<hr>
2.6 grafana中對mysql進行監控
copy id to clipboard->grafana的dashboards中lmport dashboard
https://grafana.com/grafana/dashboards/17320-1-mysqld-exporter-dashboard/


- Prometheus教程
- 一. dokcer 安裝
- 二. 安裝docker-compose
- 三. docker-compose安裝Prometheus
- 四. 配置grafana的數據源
- 五. Prometheus的Exporter
- 六. Prometheus的基本術語
- 七. 監控Linux
- 八. 監控redis和mongodb
- 九. 監控mysql數據庫
- 十. 監控go程序
- 十一. 監控nginx
- 十二. 監控消息隊列
- 十三. 監控docker
- 十四. 監控進程
- 十五. 域名監控
- 十六. SNMP監控
- 十七. 黑盒監控
- 十八. 自定義監控
- 十九. go實現自定義監控
- 二十. 服務發現概述
- 二十一. 基于文件的服務發現
- 二十二. 基于Consul的服務發現
- 二十三. relabeling機制