首页 > 数据库 >统一观测丨如何使用 Prometheus 监控 MySQL

统一观测丨如何使用 Prometheus 监控 MySQL

时间:2023-02-07 18:35:27浏览次数:56  
标签:数据库 观测 Prometheus 监控 MySQL 告警

作者:在峰


MySQL 作为最流行的关系型数据库管理系统之一,非常多系统的后端存储都有着MySQL 的身影,可谓是广泛应用于各行各业。与此同时,数据库作为应用服务的核心组件,直接影响着应用服务运行。数据库的瓶颈往往也是整个系统的瓶颈,其重要性不言而喻,所以对于 MySQL 的监控必不可少,及时发现 MySQL 运行中的异常,可以有效提高系统的可用性和用户体验。因此,观测 MySQL 关键指标,实时关注数据库的可用性与性能,成为运维团队的重要任务。


关键指标解读


在构建 MySQL 的指标观测体系前,我们需要梳理在日常运维过程中所关注的维度与指标,做到有的放矢。Google 提出系统监控的 Latency,Traffic,Saturation,Errors 作为黄金指标。而 MySQL 作为资源类服务系统出现,我们将之进行细化,从可用性、数据库连接、查询、流量、文件五大维度入手。


统一观测丨如何使用 Prometheus 监控 MySQL_Prometheus


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


在设计好所需观测指标后,我们就可以选择相应的观测工具。作为最流行的数据库, MySQL 有着非常丰富的监控工具选择,比如 MySQL Enterprise Monitor、Prometheus等数据库自带、商业、开源不同属性的工具。


而云原生时代,为了开源友好、避免厂商锁定、构建多云全栈可观测体系等企业级诉求,Prometheus 成为了 MySQL 指标监控的最佳选择,并拥有社区专门为采集 MySQL 数据库监控指标而设计开发的 MySQL Exporter 。


相较于自建 Prometheus,需要部署 Exporter、传入 MySQL 实例的连接信息,配置服务发现,再建立大盘。阿里云 Prometheus监控一键集成 MySQL Exporter,并提供开箱即用的专属监控大盘、告警,将诸多配置与操作实现白屏化,尽可能简化配置服务接入工作量。


并基于阿里云自身实践,将常见的 MySQL 告警规则制作成预置模板,帮助运维团队快速搭建起指标看板与告警体系,不用再苦恼于提炼自身经验或告警指标的选择上。


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


mysql_up{${instance}} != 1


  • MySQL 实例运行时长:Prometheus 监控服务提供了默认的告警阈值,监控运行少于半小时的 MySQL 实例,用户可以根据自己的需要修改阈值;


mysql_global_status_uptime{${instance}} < 1800


  • 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 日志等待时间


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


最佳实践


前置条件


  • 开通阿里云 Prometheus 监控服务;
  • 安装阿里云 Prometheus 实例(Prometheus for 容器服务、Prometheus for ECS),详情参见:创建 Prometheus 实例;
  • 准备 MySQL 实例连接信息,包括 Mysql 地址、MySQL 端口、用户名和密码;


集成中心安装 MySQL 监控



  • 单击具体的 Prometheus 实例并进入到集成中心,选择安装 MySQL;


统一观测丨如何使用 Prometheus 监控 MySQL_MySQL_02


  • 输入 Mysql 地址、MySQL 端口、用户名和密码;


统一观测丨如何使用 Prometheus 监控 MySQL_数据库_03


注:可以通过连接测试检查连通性


  • 安装成功后,可以查看大盘、指标、target 等信息,并且配置相关告警;


统一观测丨如何使用 Prometheus 监控 MySQL_数据库_04

统一观测丨如何使用 Prometheus 监控 MySQL_MySQL_05


MySQL 监控告警配置


阿里云 Prometheus 监控服务针对 MySQL 集成,围绕着热点指标提供了若干项默认的 Prometheus 告警规则。


  • 安装 MySQL 监控之后,可以通过 MySQL 集成 - 告警 - 创建告警规则进行创建;


统一观测丨如何使用 Prometheus 监控 MySQL_MySQL_06


  • 填写告警名称、选择告警分组、所需的告警指标以及筛选条件。


统一观测丨如何使用 Prometheus 监控 MySQL_Prometheus_07


MySQL 监控大盘


Prometheus 监控服务围绕热点指标创建了 MySQL 监控大盘,通过监控大盘用户可以查看可用性、数据库查询、网络流量、连接、内存等监控数据;


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


统一观测丨如何使用 Prometheus 监控 MySQL_数据库_08


  • 数据库查询


统一观测丨如何使用 Prometheus 监控 MySQL_mysql_09


  • 流量和内存使用


统一观测丨如何使用 Prometheus 监控 MySQL_Prometheus_10


  • 文件


统一观测丨如何使用 Prometheus 监控 MySQL_Prometheus_11


关于阿里云 Prometheus 监控


阿里云 Prometheus 服务是基于云原生可观测事实标准 - Prometheus 开源项目构建的全托管观测服务。默认集成常见云服务,兼容主流开源组件,全面覆盖业务观测/应用层观测/中间件观测/系统层观测。通过开箱即用的 Grafana 看板与智能告警功能,并全面优化探针性能与系统可用性,帮助企业快速搭建一站式指标可观测体系。助业务快速发现和定位问题,减轻故障给业务带来的影响,并免去系统搭建与日常维护工作量,有效提升运维观测效率。


统一观测丨如何使用 Prometheus 监控 MySQL_Prometheus_12


与此同时,阿里云 Prometheus 作为阿里云可观测套件的重要组成部分,与 Grafana 服务、链路追踪服务,形成指标存储分析、链路存储分析、异构构数据源集成的可观测数据层,同时通过标准的 PromQL 和 SQL,提供数据大盘展示,告警和数据探索能力。为IT成本管理、企业风险治理、智能运维、业务连续性保障等不同场景赋予数据价值,让可观测数据真正做到不止于观测。


统一观测丨如何使用 Prometheus 监控 MySQL_MySQL_13


点击​​此处​​查看 Prometheus 监控服务

标签:数据库,观测,Prometheus,监控,MySQL,告警
From: https://blog.51cto.com/u_13778063/6042625

相关文章

  • 统一观测丨如何使用 Prometheus 监控 MySQL
    作者:在峰MySQL作为最流行的关系型数据库管理系统之一,非常多系统的后端存储都有着MySQL的身影,可谓是广泛应用于各行各业。与此同时,数据库作为应用服务的核心组件,直接影响......
  • MongoDB性能监控调优
    1.分析锁>db.serverStatus().globalLock{"totalTime":NumberLong("5011164491000"),"currentQueue":{"total":0,......
  • 京东一面:MySQL 中的 distinct 和 group by 哪个效率更高?问倒一大遍。。
    先说大致的结论(完整结论在文末):在语义相同,有索引的情况下:groupby和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于groupby。原因是distinc......
  • mysql相关的问题
    1、使用xtrabackup恢复数据时报错(1)报错]#xtrabackup--defaults-file=/usr/local/mysql/conf/my.cnf--copy-back--target-dir=./20230206-fullxtrabackup:File......
  • Mysql批量插入数据时,多少条最好
    1.首先需要确认mysql服务器上的限制sql大小的限制>showvariableslike'%max_allowed_packet%%'+--------------------------+------------+|Variable_name......
  • mysql与oracle语法区别
    1.MySQL的字符串类型是varchar:CODEVARCHAR(40),Oracle中是varchar2:CODEVARCHAR2(40)。2.MySQL的数值类型是decimal,FLOAT,DOUBLE,Oracle中是NUMBER。3.MySQL支持在建表时同时......
  • 新手MysQl数据库
    大一下学期学校要学mysql,之前不懂这是什么,经过查询得知这是一种数据库。MySQL是一个​​关系型数据库管理系统​​,由瑞典​​MySQLAB​​​ 公司开发,属于 ​​Oracle​​......
  • MySQL配置参数
    配置参数解释:[client]#设置字符集default-character-set=utf8mb4#设置端口号port=3306#设置socket连接文件位置socket=/home/mysql/data/mysqldata1......
  • PHP和MySQL处理树状、分级、无限分类、分层数据的方法
    文章标题中的多个词语表达的其实是一个意思,就是递归分类数据,分级数据非常类似数据结构中的树状结构,即每个节点有自己的孩子节点,孩子结点本身也是父亲节点。这是一个递归、分......
  • MySQL8.0修改数据库名的方法
    注:1、不管存储引擎是InnoDB还是MyISAM直接去修改data下的文件夹名称都是不可行的;2、renamedatabaseoldnameTOnewname;也是不可行的;可采用如下方法:方法一整体思路:新......