如何使用Prometheus监控MySQL

本文介绍如何使用Prometheus监控MySQL。

前提条件

已获取MySQL实例连接信息,包括MySQL地址、MySQL端口、用户名和密码。

接入MySQL监控

  1. 在左侧导航栏,单击接入中心

  2. 接入中心页面的数据库区域,单击MySQL

    image

  3. MySQL面板的开始接入页签完成接入,然后单击确定

    参数

    说明

    选择所属环境类型

    可以接入以下三种服务环境:

    • 容器服务环境

    • ECS(VPC)

    • 云服务

    选择集群

    选择目标集群。

    选择ECS(VPC)

    选择目标ECS。

    选择数据存储地域

    如果您选择所属环境类型云服务,您需要选择目标存储的地域。

    MySQL 服务地址

    MySQL的连接地址。

    说明

    支持部署在容器服务Kubernetes版、云服务器ECS、云数据库RDS的MySQL地址。

    MySQL 服务端口

    MySQL的端口号。例如:3306。

    MySQL 账号MySQL 密码

    MySQL的用户名称和密码。

    重要

    不建议使用管理员账号,以免存在数据泄露的风险。请创建一个供mysqld_exporter使用的MySQL账号,并最小化授权。具体操作,请参见为Prometheus创建MySQL访问账号

配置MySQL监控告警

  1. 登录Prometheus控制台

  2. 在左侧导航栏单击实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 在页面顶部选择目标地域,然后单击目标集群名称。

  4. 在左侧导航栏,单击告警规则,即可查看MySQL的Prometheus告警规则。

    可观测监控 Prometheus 版针对MySQL热点指标提供了多个默认的Prometheus告警规则,您还可以根据业务需求新增告警规则。创建Prometheus告警规则的具体操作,请参见Prometheus告警规则

    说明

查看MySQL监控大盘

通过监控大盘您可以查看可用性、数据库查询、网络流量、连接、内存等监控数据,具体步骤如下。

  1. 登录Prometheus控制台

  2. 在左侧导航栏,单击接入管理

  3. 接入管理页面的已接入环境页签中,选择目标环境,在目标环境列表中,单击目标环境名称进入详情页面。

    image

  4. 组件管理页签下的组件类型区域,单击MySQL,然后单击大盘,即可查看所有的大盘名称。

  5. 单击目标大盘名称,查看对应的Grafana大盘。

    • 可用性、QPS和数据库连接。sk

    • 数据库查询。aj

    • 流量和内存使用情况。xq

    • 文件监控数据。qt

关键指标说明

类型

指标名称

说明

可用性

mysql_up

表示MySQL实例是否已停机。

mysql_global_status_uptime

表示数据库正常运行的时长,通常使用该指标配置告警,监控运行少于半小时的MySQL实例。

数据库连接

mysql_global_status_connection_errors_total

连接错误是数据库中的主要错误之一,通过该指标可以查看到具体连接错误信息以及错误连接次数。

mysql_global_status_threads_connected

MySQL实例请求已经连接的线程数。

mysql_global_status_threads_running

MySQL实例请求运行中的线程数。

mysql_global_status_max_used_connections

MySQL实例最大连接记录统计。

mysql_global_variables_max_connections

MySQL实例的最大连接数,若超过该连接数之后有新的请求到来,就会拒绝连接。

mysql_global_status_aborted_connects

异常中断的连接(尝试连接)。

mysql_global_status_aborted_clients

异常中断的连接(超时)。

查询

mysql_global_status_slow_queries

MySQL实例慢查询统计。

mysql_global_status_queries

MySQL实例当前查询QPS。

流量

mysql_global_status_bytes_received

入站流量。

mysql_global_status_bytes_sent

出站流量。

文件

mysql_global_status_opened_files

正在打开的文件统计。

mysql_global_status_open_files

MySQL已经打开的文件统计。

mysql_global_variables_open_files_limit

允许打开的文件统计。

mysql_global_status_innodb_num_open_files

Innodb打开的文件统计。

基于Prometheus的指标观测和告警体系搭建

自建Prometheus需要部署Exporter、传入MySQL实例的连接信息、配置服务发现,然后建立大盘的复杂搭建过程。可观测监控 Prometheus 版一键集成MySQL Exporter,并提供开箱即用的专属监控大盘、告警,将诸多配置与操作实现白屏化,尽可能简化配置服务接入工作量。

基于可观测监控 Prometheus 版自身实践,将常见的MySQL告警规则预置为模板,帮助运维团队快速搭建起指标看板与告警体系。预置的MySQL告警规则如下:

  • MySQL 停机:若该指标值为0,表示当前数据库没有正常运行;若该指标值为1表示正常,可以通过${instance}针对具体的实例告警。

    mysql_up{${instance}} != 1
  • MySQL 慢查询次数:该指标可以作为判断当前数据库是否存在需要优化的SQL语句等问题。

    rate(mysql_global_status_slow_queries{${instance}}[5m]) > 0
  • MySQL 错误连接数:连接错误是数据库中的主要错误之一,通过可观测监控 Prometheus 版提供的告警规则,当触发告警时,您能够接收的错误类型、查询次数等告警信息。

    rate(mysql_global_status_connection_errors_total{${instance}}[5m]) > 0
  • MySQL 连接使用率:当出现此连接错误告警时,大部分是连接数不足导致的,因此您可以通过查看MySQL连接使用率进一步排查问题。

    100 * mysql_global_status_threads_connected{${instance}} 
          / mysql_global_variables_max_connections{${instance}} > 90

    当使用率达到一定的阈值时,MySQL实例开始拒绝连接,此时可以通过扩大连接数来解决问题。但在提高连接数之前,请务必通过以下语句检查当前系统可打开的文件数。

    mysql_global_variables_open_files_limit - mysql_global_variables_innodb_open_files
  • MySQL InnoDB 日志等待时间:您自行设置的日志等待时间。

    rate(mysql_global_status_innodb_log_waits{${instance}}[5m])