社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

阿里云云原生 • 2 年前 • 506 次点击  

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

1


关键指标解读

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

2


基于 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])
3


最佳实践

前置条件

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

集成中心安装 MySQL 监控

  • 登录 Prometheus 控制台
    https://common-buy.aliyun.com/?commodityCode=prometheus_pay_public_cn#/open
  • 单击具体的 Prometheus 实例并进入到集成中心,选择安装 MySQL;
  • 输入 Mysql 地址、MySQL 端口、用户名和密码;

注:可以通过连接测试检查连通性
  • 安装成功后,可以查看大盘、指标、target 等信息,并且配置相关告警;

MySQL 监控告警配置

阿里云 Prometheus 监控服务针对 MySQL 集成,围绕着热点指标提供了若干项默认的 Prometheus 告警规则。
  • 安装 MySQL 监控之后,可以通过 MySQL 集成 - 告警 - 创建告警规则进行创建;

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

MySQL 监控大盘

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

  • 数据库查询

  • 流量和内存使用

  • 文件

4


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

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

点击阅读原文查看 Prometheus 监控服务

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151205
 
506 次点击