一文带你吃透MySQL性能监控解决方案:Prometheus+Grafana

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL性能监控解决方案:Prometheus+Grafana问题描述在对MySQL进行主从复制、分库分表等架构之后,MySQL的节点数量变得越来越多,无法实时监控到每一台MySQL节点,此时应当如何处理?问题分析与解决方案针对上面的问题,需要用Prometheus + Grafana对服务器进行统一监控、规划与报警,时刻关注服务器的响应情况。当出现宕机或异常时,Grafana可迅速通过短信、钉钉、邮件等方式通知相关人员,进而快速对生产环节进行补救。Prometheus概述与适用场景Prometheus 是 一 个 开 源 的 服 务 监 控 系 统 和 时 间 序 列 数 据

MySQL性能监控解决方案:Prometheus+Grafana问题描述

在对MySQL进行主从复制、分库分表等架构之后,MySQL的节点数量变得越来越多,无法实时监控到每一台MySQL节点,此时应当如何处理?

问题分析与解决方案

针对上面的问题,需要用Prometheus + Grafana对服务器进行统一监控、规划与报警,时刻关注服务器的响应情况。当出现宕机或异常时,Grafana可迅速通过短信、钉钉、邮件等方式通知相关人员,进而快速对生产环节进行补救。

Prometheus概述与适用场景

Prometheus 是 一 个 开 源 的 服 务 监 控 系 统 和 时 间 序 列 数 据 库 ,Kubernetes(k8s)内部使用的就是Prometheus数据库。Kubernetes的流行,带动了Prometheus社区的发展。Prometheus在大规模数据管理与读取上,比传统的NoSQL数据库要快很多。在数据压缩上,Prometheus具有高效压缩数据的算法,节省了存储空间,可有效减少服务器I/O的瓶颈。

Prometheus的适用场景如下:

(1)部署监控服务器,实现7×24实时监控。

(2)针对公司的业务及研发部门设计监控系统,对监控项和触发器给出合理意见。

(3)做好问题预警机制,对可能出现的问题及时告警并形成严格的处理机制。

(4)做好监控告警系统,要求可以实现告警分级(一级报警电话通知、二级报警微信通知、三级报警邮件通知)。

(5)处理好公司服务器异地集中监控的问题。

Prometheus的主要特征:

(1)多维度数据模型。

(2)灵活的查询语言。

(3)不依赖分布式存储,单个服务器节点是自主的。

(4)以HTTP方式通过pull模型拉取时间序列数据。

(5)通过中间网关支持push模型。

(6)通过服务发现或者静态配置发现目标服务对象。

(7)支持多种多样的图表和界面展示,例如Grafana。

时序数据库概述与适用场景

在工作中,时序数据库(TimeSeries DataBase,TSDB)主要记录按照时间顺序进行管理的数据。这些以时间为变化的数据被统称为时序数据。时序数据库对该类数据有更好的读取性能,其应用场景如下所示:

(1)Linux服务器每秒的CPU占用百分比、内存占用百分比、硬盘占用百分比等相关数据。

(2)无人汽车每秒的速度、油耗、方向、地理位置等相关数据。

(3)无人机每秒的经纬度、飞行高度、地理位置等相关数据。

(4)证券中心每秒开盘的行情数据、资金流数据。

(5)银行账号每天、每周的存款数据。

时序数据库并不要求数据实时更新,只是需要以时间作为变化单位而已,所以银行账号同样适用于时序数据库,但仅限于展示数据的可视化及数据的变化。时序数据库的安全性不如关系数据库。

Grafana概述与适用场景

Grafana是开源的可视化和分析软件,可以对数据进行可视化和报警,提供了把时序数据转换成漂亮图形并进行可视化的工具。

Grafana可独立部署,也就是说,Grafana、Prometheus和MySQL可被部署在3台不同的服务器上。除Prometheus外,Grafana还可集成InfluxDB、MySQL和Elasticsearch等数据源。

构建Prometheus + Grafana监控实战

1. 安装Prometheus

输入下面的命令,下载Prometheus:

输入下面的命令,解压缩Prometheus安装包:

初次运行Prometheus程序:

启动之后,可以通过Prometheus内置的Web页面进行查看,地址为服务器IP:9090,如图9-1所示。

图9-1

在图9-1中可以输入想要查询的字段,并单击Execute按钮,使用Graph显示相应时间序列的折线图,如图9-2所示。

图9-2

单击Status下拉框中的Targets按钮,可查看当前Prometheus监控了哪些服务器。目前Prometheus只监控了本机,如图9-3所示。

图9-3

2. Prometheus的内部插件介绍

Prometheus的内部插件如表9-1所示。

表9-1

• prometheus是基本程序包,是必须下载的,后续插件可以在自身业务的基础上,酌情下载并集成到prometheus之上。

• alertmanager是一个独立的报警插件,可以接收Prometheus等客户端发来的警报,之后通过分组、删除重复警报等处理,将它们通过路由发送给正确的接收器。报警方式可以按照不同的规则发送给不同的模块负责人。

alertmanager既支持E-mail、Slack等报警方式,也可以通过Webhook接入钉钉等国内IM工具。在Prometheus+Grafana架构上,Grafana同样包含报警模块,警报可以推送给钉钉、邮箱等不同渠道,所以对alertmanager插件可以酌情下载与使用。

• blackbox_exporter是网络监控插件,可以提供HTTP、DNS、TCP、ICMP的监控数据采集,包括连接性状态、SSL状态、HTTP状态、HTTPS耗时、服务连通信统计、总耗时统计等。

• consul_exporter是用来监控Consul注册中心的插件,主要监控内容为Consul中的KV节点的健康状态与服务检查、集群有多少节点、提供的服务有多少节点、集群提供多少服务等。

• graphite_exporter是用来监控Graphite Metrics的插件。Graphite用来收集度量标准,通常采用Grafana+Prometheus+graphite_exporter插件+Spark的架构形式监控Spark上的数据。该架构首先需要配置Spark,将Metrics 报 告 传 入 graphite_exporter 插 件 的 Graphite 内 , 此 后 由graphite_exporter插件转化数据并交由Prometheus进行存储,Grafana负责读取Prometheus中的数据。与之类似的还有Grafana + .txt文件 + Telegraf+ InfluxDB架构,即由Telegraf读取.txt文件中的数据进行解析并传入InfluxDB中,Grafana负责读取InfluxDB中的数据。

注意:Telegraf是由Go语言编写的InfluxDB对外读取数据的数据驱动软件,该驱动内部设置了各种可插拔的插件。使用这些插件可以读取除.txt文件外的一系列数据,如HTTP接口、服务器CPU、服务器内存MEM、服务器I/O、服务器硬盘等。

• haproxy_exporter是使用Go语言编写的用来监控HAProxy负载均衡器的插件。它通过HTTP使用HAProxy所给出的URL地址读取相关数据。

• memcached_exporter是用来监控MemCache的插件,可以通过设置导出关于MemCache进程本身的指标及大量的统计信息数据。

• mysqld_exporter是用来监控MySQL的插件,可以收集InnoDB引擎状态、TokuDB引擎状态、心跳、InnoDB引擎缓冲池状态、数据库表相关的状态等一系列内容。

• node_exporter是用来监控主机CPU、内存、磁盘等相关硬件指标的插件。因为node_exporter是为了监控主机系统而设计的,所以不建议将其部署为Docker容器。如果必须将其部署为Docker容器,则需要增加一些额外的配置参数,以便node_exporter能够访问Linux的一些命名空间(文件)。例如,通过/proc/net/arp访问公开的ARP统计信息,通过/sys/fs/cache访问公开的bcache统计信息,通过/proc/net/ip_vs、/proc/net/ip_vs_stats访问公开的ipv状态信息,通过/proc/net/udp和/proc/net/udp6访问UPD队列的长度信息,通过/proc/net/netstat访问公开的netstat网络统计信息,等等。node_exporter在一台服务器上只能启动一个进程,不可多次重复启动,以免造成数据的失真与损坏。

• pushgateway 插 件 是 一 个 独 立 服 务 , 位 于 应 用 程 序 发 送 指 标 与Prometheus服务器之间。示例命令如下所示:

• statsd_exporter插件可以通过UDP接收StatsD风格的度量,并把它们作为Prometheus度量导出。StatsD是一个简单的网络守护进程,它基于Node.js平台,通过UDP或者TCP方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务,如Graphite。

3. 使用Prometheus远程监控Linux

从远程主机上下载node_exporter插件,命令如下所示:

解压缩下载的node_exporter插件,命令如下所示:

在node_exporter中只有一个执行程序,启动node_exporter的命令如下所示:

node_exporter的默认启动命令为9100,可通过netstat命令查看9100端口是否执行正常,命令如下所示:

在 Prometheus 所 在 的 服 务 器 上 更 改 prometheus.yml 文 件 , 对 接node_exporter插件所在服务器的9100接口。在prometheus.yml文件结尾处增加如下配置:

job_name的后面是自定义名称,可随意书写;在targets后面的方括号中可以输入多个TCP地址,并以逗号“,”进行分隔。更改prometheus.yml文件后,重启Prometheus程序,在Prometheus的Web页面处可以查看新增的监控地址和图表,如图9-4与图9-5所示。

图9-4

图9-5

4. 使用Prometheus远程监控MySQL

输入下面的命令下载mysqld_exporter插件:

输入下面的命令解压缩
mysqld_exporter-0.10.0.linux-amd64.tar.gz文件:

在MySQL控制台中添加用户名及角色权限。这里的mysqld_exporter插件与MySQL在同一台服务器上。mysqld_exporter插件通过新添加的用户名与MySQL 进 行 通 信 , 而 Prometheus 只 与 mysqld_exporter 插 件 进 行 通 信 ,Prometheus与MySQL并不直接关联。

编写mysqld_exporter插件的配置文件.my.config,在配置文件中输入MySQL对应的用户账号及密码,内容如下所示:

执行下面的命令启动mysqld_exporter插件:

mysqld_exporter插件的默认启动命令为9104。可以通过下面的命令查看9104端口是否执行正常,命令如下所示;

在 Prometheus 所 在 的 服 务 器 上 更 改 prometheus.yml 文 件 , 对 接mysqld_exporter插件所在服务器的9104端口。在prometheus.yml文件结尾处增加如下配置:

重启Prometheus,Web页面如图9-6和图9-7所示。

图9-6

图9-7

5. 安装Grafana

下载Grafana可视化工具,命令如下所示:

安装Grafana相关字库,命令如下所示:

安装rpm文件,命令如下所示:

也可以通过rpm方式安装Grafana,命令如下所示:

查看Grafana文件的相关地址,如图9-8所示。

图9-8

更改/etc/grafana/grafana.ini配置文件中的绑定IP地址(输入grafana服务器的IP即可),命令如下所示:

启动Grafana,命令如下所示:

打开Grafana页面,如图9-9所示。

图9-9

默认账号和密码均为admin,初次进入后需要填写新密码并确认。更改新密码后,展示页面如图9-10所示。

图9-10

6. 为Grafana配置Promtheus数据源

单击左侧任务栏中的Configuration→Data Sources选项,如图9-11所示。

图9-11

在 展 开 的 Configuration 页 面 中 单 击 Add data source 按 钮 , 输 入Promtheus相关的配置信息,如图9-12和图9-13所示。

图9-12


图9-13

再次单击Data Sources选项,可以看到刚刚配置的myPrometheus,如图9-14所示。

图9-14

7. Grafana图表Graph配置

单击左侧任务栏中的Create→Dashboard→Graph选项,如图9-15所示。

图9-15

单击Panel Title→Edit选项,配置图表,如图9-16所示。

图9-16

配置图表参数如图9-17所示,也可以单击Add Query按钮,选择查询多个参数,选择后,这些参数将在一个图表中展示。

图9-17

若想查询详细的地址或job,则可以在A查询处增加条件:

图形展示变化如图9-18所示。

图9-18

配置完之后,单击右上角的Save dashboard按钮,在Grafana内部进行保存。也可以单击Settings按钮保存为JSON文件,以免Grafana崩溃而直接丢失图表配置。JSON文件的内容如图9-19所示。

图9-19

8. 使用Grafana的图表模板

虽然Grafana提供了极多的图表规划体验,例如,线条的颜色、条件展示位置、上升和下降箭头、折线图、饼状图、线条图等,但是每次设置未免过于复杂,通常使用Grafana官方的图表模板即可。其中,大部分所包含的内容都在图表模板上,不需一一配置,如图9-20所示。

图9-20

单击图9-15中的“Create”→“Import”选项,导入模板。在第1个输入框中输入Dashboard官网的编号例如1010,或者在第2个输入框中粘贴整个Grafana图表的JSON数据,如图9-21所示。

图9-21

单击Load按钮之后,更改Import页面中的Name(即Dashboard的名称),以及VictoriaMetrics处的数据源,如图9-22所示。

图9-22

node_exporter数据导入模板的结果如图9-23所示(导入的模板不同,展示的结果也不同)。

图9-23

mysql_exporter数据导入模板的结果如图9-24所示。

图9-24

导入图表后,在右上角可选择时间的跨度及刷新频率等参数,如图9-25所示。

图9-25

9. 使用Grafana的报警功能

更改Grafana的配置文件default.ini,如图9-26所示。

图9-26

单击Alerting→Notification channels选项,配置Grafana账号绑定的邮箱,如图9-27所示。

图9-27

设置邮箱地址,如图9-28所示。

图9-28

配置Grafana图表报警条件,如图9-29所示。

在Grafana的图表里选择Alert,配置相关的Alert报警。这里可以配置的是报警的阈值和报警条件。

• Conditions中的WHEN avg() OF query(A, 5m,now) IS ABOVE 3000:

A指的是之前写的A语句,now和5m指的是从现在起往回五分钟。

• Evaluate every:指多久检测一次。

• If execution error or timeout:如果出现大于3000次的error,则发送邮件。在邮件标题开头写上【Alerting】。

• If no data all values are null:当所有的数据为空时发送邮件,在邮件标题开头写上【No Data】。

当然,上面条件中的IS ABOVE和WHEN也可以更改。

Test Rule尤其重要。这里可以用Java接收返回的JSON,也可以用来测试当前预警是否成功。当state为ok时,表示该监控没有问题。当state为Alerting时,表示该监控有问题,需要发送邮件。alert表示当数据达到发送监控要求时,哪怕目前数值持续性达到发送监控要求,也只会发送一封邮件。但是若在发送邮件之后,该数据又达到ok范围内,则Grafana会发送以

【OK】为标题开头的邮件,表示该监控已经正常。

Test Rule的conditionEvals会判断当前数据是否处于监控语句标准,若为true,则表示需要发送邮件。

另外,Grafana支持多个监控语句判定。可以单击+按钮,此时Grafana会让你选择and或or。如果选择and,则必须所有语句都达到监控范围才发送邮件;如果选择or,则只需有一条语句达到监控范围就会发送邮件。而在TestRule的conditionEvals处,会出现[true or false]=true。

图9-29

Grafana的报警结果如图9-30所示。

图9-30

本文给大家讲解的内容是MySQL性能监控解决方案:Prometheus+Grafana

  • 下文给大家讲解的是堆内缓存解决方案:Java堆内缓存与GuavaCache
相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
相关文章
|
24天前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
49 0
|
3月前
|
关系型数据库 MySQL 索引
MySQL in 太多的解决方案
MySQL in 太多的解决方案
310 0
|
3月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
1天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
17 2
|
5天前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
15 3
|
2月前
|
存储 Java 关系型数据库
JPA不识别MySQL枚举类型的解决方案
在JPA中处理MySQL的枚举类型,需要在实体类与数据库之间进行适当的转换。可以选择使用 `@Enumerated`注解、实现自定义的转换器,或者使用原生SQL查询来解决JPA不直接支持MySQL枚举类型的问题。选择最佳方案时,应考虑项目的具体需求和架构。通过正确的映射和转换,可以确保JPA与MySQL数据库间高效且安全的数据交互。
50 6
|
3月前
|
Prometheus 监控 Cloud Native
自定义grafana_table(数据源Prometheus)
综上所述,自定义 Grafana 表格并将 Prometheus 作为数据源的关键是理解 PromQL 的查询机制、熟悉 Grafana 面板的配置选项,并利用 Grafana 强大的转换和自定义功能使数据展示更为直观和有洞见性。随着对这些工具更深入的了解,您将可以创建出更高级的监控仪表盘,以支持复杂的业务监控需求。
212 1
|
3月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之Grafana安装与配置
prometheus学习笔记之Grafana安装与配置
|
3月前
|
存储 Prometheus 监控
Grafana 与 Prometheus 集成:打造高效监控系统
【8月更文第29天】在现代软件开发和运维领域,监控系统已成为不可或缺的一部分。Prometheus 和 Grafana 作为两个非常流行且互补的开源工具,可以协同工作来构建强大的实时监控解决方案。Prometheus 负责收集和存储时间序列数据,而 Grafana 则提供直观的数据可视化功能。本文将详细介绍如何集成这两个工具,构建一个高效、灵活的监控系统。
321 1
|
3月前
|
Prometheus 监控 Cloud Native
Spring Boot 性能护航!Prometheus、Grafana、ELK 组合拳,点燃数字化时代应用稳定之火
【8月更文挑战第29天】在现代软件开发中,保证应用性能与稳定至关重要。Spring Boot 作为流行的 Java 框架,结合 Prometheus、Grafana 和 ELK 可显著提升监控与分析能力。Prometheus 负责收集时间序列数据,Grafana 将数据可视化,而 ELK (Elasticsearch、Logstash、Kibana)则管理并分析应用日志。通过具体实例演示了如何在 Spring Boot 应用中集成这些工具:配置 Prometheus 获取度量信息、Grafana 显示结果及 ELK 分析日志,从而帮助开发者快速定位问题,确保应用稳定高效运行。
96 1

推荐镜像

更多