MySQLD Exporter

这一节当中将介绍如何使用Prometheus提供的MySQLD Exporter实现对MySQL数据库性能以及资源利用率的监控。

MySQLD Exporter的下载与安装可以参考github: https://github.com/prometheus/mysqld_exporter

MySQL环境准备

为了简化测试环境复杂度,这里使用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

image-20210509204035329 创建用户并授权:

create user 'exporter'@'%' identified by 'pwd123' with max_user_connections 3;
select user from mysql.user;  
grant process,replication client, select on *.* to 'exporter'@'%';

下载并运行MySQLD 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

image-20210509205233155 访问本机的localhost:9104/metrics , 能够获取mysql的相关指标:

image-20210509205330169 配置prometheus.yml, 在最后加入如下配置,以访问mysqld exporter暴露的指标:

  - job_name: mysql
    static_configs:
    - targets: ['localhost:9104']

重新启动prometheus。

在Web UI里查询参数,能够获取到mysql的指标:

mysql_version_info

image-20210509211437475

监控数据库吞吐量

对于数据库而言,最重要的工作就是实现对数据的增、删、改、查。为了衡量数据库服务器当前的吞吐量变化情况。在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])

image-20210509211837087

连接情况

在MySQL中通过全局设置max_connections限制了当前服务器允许的最大客户端连接数量。一旦可用连接数被用尽,新的客户端连接都会被直接拒绝。 因此当监控MySQL运行状态时,需要时刻关注MySQL服务器的连接情况。

下面列举了与MySQL连接相关的监控指标:

  • mysql_global_variables_max_connections: 允许的最大连接数;
  • mysql_global_status_threads_connected: 当前开放的连接;
  • mysql_global_status_threads_running:当前开放的连接;
  • mysql_global_status_aborted_connects:当前开放的连接;
  • mysql_global_status_connection_errors_total{error=”max_connections”}:由于超出最大连接数导致的错误;
  • mysql_global_status_connection_errors_total{error=”internal”}:由于系统内部导致的错误;

通过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])