这一节当中将介绍如何使用Prometheus提供的MySQLD Exporter实现对MySQL数据库性能以及资源利用率的监控。
MySQLD Exporter的下载与安装可以参考github: https://github.com/prometheus/mysqld_exporter
为了简化测试环境复杂度,这里使用Docker启动一个MySQL实例:
docker run -itd --name mysql -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 mysql
登录到MySQL控制台:
docker exec -it mysql bash
mysql -u root -ppassword123
创建用户并授权:
create user 'exporter'@'%' identified by 'pwd123' with max_user_connections 3;
select user from mysql.user;
grant process,replication client, select on *.* to 'exporter'@'%';
github下载地址: https://github.com/prometheus/mysqld_exporter/releases
找到适合自己系统的版本并下载:
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
cd mysqld_exporter-0.12.1.linux-amd64
下载后,运行方式有两种,一种是直接将连接参数设置到环境变量里:
export DATA_SOURCE_NAME='user:password@(hostname:3306)/'
./mysqld_exporter <flags>
另一种是指定配置文件。在mysqld exporter的目录下创建一个文件my.cnf
,内容如下:
[client]
user=exporter
password=pwd123
这里采用后面一种方式运行mysqld_exporter :
./mysqld_exporter --config.my-cnf=my.cnf
访问本机的localhost:9104/metrics , 能够获取mysql的相关指标:
配置prometheus.yml
, 在最后加入如下配置,以访问mysqld exporter暴露的指标:
- job_name: mysql
static_configs:
- targets: ['localhost:9104']
重新启动prometheus。
在Web UI里查询参数,能够获取到mysql的指标:
mysql_version_info
对于数据库而言,最重要的工作就是实现对数据的增、删、改、查。为了衡量数据库服务器当前的吞吐量变化情况。在MySQL内部通过一个名为Questions的计数器,当客户端发送一个查询语句后,其值就会+1。可以通过以下MySQL指令查询Questions等服务器状态变量的值:
mysql> SHOW GLOBAL STATUS LIKE "Questions";
+---------------+-------+
|Variable_name|Value|
+---------------+-------+
|Questions|1326|
+---------------+-------+
1 row inset(0.00 sec)
MySQLD Exporter中返回的样本数据中通过mysql_global_status_questions反映当前Questions计数器的大小:
# HELP mysql_global_status_questions Generic metric from SHOW GLOBAL STATUS.
# TYPE mysql_global_status_questions untyped
mysql_global_status_questions 1016
通过以下PromQL可以查看当前MySQL实例查询速率的变化情况,查询数量的突变往往暗示着可能发生了某些严重的问题,因此用于用户应该关注并且设置响应的告警规则,以及时获取该指标的变化情况:
rate(mysql_global_status_questions[2m])
在MySQL中通过全局设置max_connections限制了当前服务器允许的最大客户端连接数量。一旦可用连接数被用尽,新的客户端连接都会被直接拒绝。 因此当监控MySQL运行状态时,需要时刻关注MySQL服务器的连接情况。
下面列举了与MySQL连接相关的监控指标:
通过PromQL查询当前剩余的可用连接数:
mysql_global_variables_max_connections - mysql_global_status_threads_connected
使用PromQL查询当前MySQL实例连接拒绝数:
mysql_global_status_aborted_connects
MySQL还提供了一个Slow_queries的计数器,当查询的执行时间超过long_query_time的值后,计数器就会+1,其默认值为10秒,
MySQLD Exporter返回的样本数据中,通过以下指标展示当前的Slow_queries的值:
# HELP mysql_global_status_slow_queries Generic metric from SHOW GLOBAL STATUS.
# TYPE mysql_global_status_slow_queries untyped
mysql_global_status_slow_queries
通过监控Slow_queries的增长率,可以反映出当前MySQL服务器的性能状态,可以通过以下PromQL查询Slow_queries的增长情况:
rate(mysql_global_status_slow_queries[2m])