监控数据库mysql
一、软件环境介绍
1.1 mysql介绍
MySQL是一个关系型数据库管理系统,目前属于 Oracle 旗下产品它是最流行的关系型数据库管理系统之一,存放表的数据。与其他关系型数据库管理系统相比,市占率
![](https://img.kancloud.cn/56/9c/569c40423500567ce33105197c161bb5_784x284.png)
<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配置
![](https://img.kancloud.cn/99/2c/992c9c2aec66a00760e4f45b3705e960_577x551.png)
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配置如下图:
![](https://img.kancloud.cn/5b/77/5b77d1960a170d6cdab4726871a3cd47_685x380.png)
- job_name: "mysqld-exporter"
static_configs:
- targets: ["192.168.100.141:9104"]
labels:
istance: "centos2服务器mysql监听"
保存后输入命令更新:
curl -XPOST http://localhost:9090/-/reload
成功监听
![](https://img.kancloud.cn/14/11/141167bd22498eed1c30645a92a16a51_1674x536.png)
<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/
![](https://img.kancloud.cn/e3/61/e3615f81d7e5f67a1c31e073e0bcd10a_1604x842.png)
![](https://img.kancloud.cn/a3/5d/a35d372d09c8ae1cc0e65322e93be9c9_1858x903.png)
- Prometheus教程
- 一. dokcer 安装
- 二. 安装docker-compose
- 三. docker-compose安装Prometheus
- 四. 配置grafana的数据源
- 五. Prometheus的Exporter
- 六. Prometheus的基本术语
- 七. 监控Linux
- 八. 监控redis和mongodb
- 九. 监控mysql数据库
- 十. 监控go程序
- 十一. 监控nginx
- 十二. 监控消息队列
- 十三. 监控docker
- 十四. 监控进程
- 十五. 域名监控
- 十六. SNMP监控
- 十七. 黑盒监控
- 十八. 自定义监控
- 十九. go实现自定义监控
- 二十. 服务发现概述
- 二十一. 基于文件的服务发现
- 二十二. 基于Consul的服务发现
- 二十三. relabeling机制