社区所有版块导航
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

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

IT大咖说 • 3 年前 • 577 次点击  

◆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所示。


来源:https://www.toutiao.com/article/7282640403675873851/?log_from=fe10c476d0c3_1696646143728

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com





来都来了,走啥走,留个言呗~




 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!


相关推荐


推荐文章

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/162904