使用prometheus监测MySQL主从同步状态方案

说明:本文介绍如何使用prometheus、alertmanager监测MySQL主从,当从节点中断同步时,发送邮箱报警,并使用grafana将数据视图化。

结构图如下:

在这里插入图片描述

安装

(1)安装应用

首先,来安装prometheus、alertmanager和grafana,参考以下文章(都是我写的,嘿嘿):

  • CentOS 7安装prometheus

  • CentOS 7安装alertmanager

  • CentOS 7安装/卸载Grafana

prometheus、alertmanager可以设置成用systemctl命令来管理,参考下面这篇文章:

  • CentOS 7如何使用systemctl管理应用

安装完成后,可在浏览器上输入对应的IP:端口访问,如果是云服务器,需要开放相关端口。如下:

promethes地址:http://localhost:9090/

alertmanager地址:http://localhost:9093/

grafana地址:http://localhost:3000/

在这里插入图片描述

(2)部署扩展

实现prometheus监测MySQL主从,参与MySQL检测的服务器(主从节点)需安装以下扩展

  • mysql_exporter(下载地址:https://github.com/prometheus/mysqld_exporter/releases)

  • node_exporter(下载地址:https://github.com/prometheus/node_exporter/releases)

选择对应的版本下载,上传到服务器上

在这里插入图片描述

mysql_exporter

解压后,在mysql_exporter目录下,创建一个my.cnf文件,内容如下,为MySQL的账户;

[client]
user=admin
password=123456

在系统/etc/systemd/system路径下,新建一个文件(文件名:mysqld_exporter.service),内容如下

[Unit]
Description=mysqld_exporter
After=network.target[Service]
User=root
Type=simple
ExecStart=mysqld_exporter地址 \
--config.my-cnf my.cnf地址 \
--collect.info_schema.processlistRestart=on-failure[Install]
WantedBy=multi-user.target

可使用下面命令,启动(start)、查看(status)、停止(stop)mysql_exporter扩展

systemctl start mysql_exporter

启动

在这里插入图片描述

node_exporter

解压后,在系统/etc/systemd/system路径下,新建一个文件(文件名:node_exporter.service),内容如下

[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
User=root
ExecStart=node_exporter路径
Restart=on-failure[Install]
WantedBy=multi-user.target

同样的,配置完,也是使用下面的命令,来启动

systemctl start node_exporter

可使用systemctl status命令来检查对应扩展是否已启动;

systemctl status node_exporter

在这里插入图片描述

修改配置文件

以上应用、扩展都安装完之后,就需要搞定配置文件。包括MySQL报警指标配置,prometheus关联节点和alertmanager配置,以及alertmanager报警邮箱相关的配置。

(1)MySQL规则

这里说“规则”(rule),是因为prometheus使用rule_files配置项关联的,内容是规定MySQL指标异常的指标,如下:

(以下配置来自:https://blog.csdn.net/dragonQuncle/article/details/134262056)

groups:
- name: MySQL-rulesrules:
#mysql状态检测- alert: MySQL Statusexpr: mysql_up == 0for: 10slabels:severity: warningannotations:summary: "{{ $labels.instance }} Mysql服务 !!!"description: "{{ $labels.instance }} Mysql服务不可用  请检查!"#mysql主从IO线程停止时触发告警- alert: MySQL Slave IO Thread Statusexpr: mysql_slave_status_slave_io_running == 0for: 5slabels:severity: warningannotations:summary: "{{ $labels.instance }} Mysql从节点IO线程"description: "Mysql主从IO线程故障,请检测!"#mysql主从sql线程停止时触发告警- alert: MySQL Slave SQL Thread Status expr: mysql_slave_status_slave_sql_running == 0for: 5s labels:severity: errorannotations: summary: "{{$labels.instance}}: MySQL Slave SQL Thread has stop !!!"description: "检测MySQL主从SQL线程运行状态"#mysql主从延时状态告警- alert: MySQL Slave Delay Status expr: mysql_slave_status_sql_delay == 30for: 5s labels:severity: warningannotations: summary: "{{$labels.instance}}: MySQL 主从延迟超过 30s !!!"description: "检测MySQL主从延时状态"#mysql连接数告警- alert: Mysql_Too_Many_Connectionsexpr: rate(mysql_global_status_threads_connected[5m]) > 200for: 2mlabels:severity: warningannotations:summary: "{{$labels.instance}}: 连接数过多"description: "{{$labels.instance}}: 连接数过多,请处理 ,(current value is: {{ $value }})!"  #mysql慢查询有点多告警- alert: Mysql_Too_Many_slow_queriesexpr: rate(mysql_global_status_slow_queries[5m]) > 3for: 2mlabels:severity: warningannotations:summary: "{{$labels.instance}}: 慢查询有点多,请检查处理!"description: "{{$labels.instance}}: Mysql slow_queries is more than 3 per second ,(current value is: {{ $value }})"

可以在prometheus目录下创建一个文件,文件名为mysql.yml

在这里插入图片描述

(2)prometheus配置

前面分析,prometheus配置需要包含这三部分:引入MySQL规则文件、关联MySQL节点、关联alertmanager,内容如下:

# 全局配置
global:scrape_interval: 15sevaluation_interval: 15s# 配置alertmanager
alerting:alertmanagers:- static_configs:- targets:- localhost:9093# 引入规则配置
rule_files:- "mysql.yml"scrape_configs:# prometheus- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]# MySQL主从- job_name: 'mysql-mater-slave'scrape_interval: 5sstatic_configs:- targets: ['IP地址:9104','IP地址:9104']# nodes- job_name: 'nodes'scrape_interval: 5sstatic_configs:- targets: ['IP地址:9100','IP地址:9100']

这里我alertmanager和prometheus是部署在同一台机器上,所以用localhost:9093,如果不是需填写对应的IP地址

(3)alertmanager配置

alertmanager配置文件里,包含当prometheus报警时的通知配置,我这里只配置邮箱,如下:

global:#qq服务器smtp_smarthost: 'smtp.qq.com:587'#发邮件的邮箱smtp_from: '1076558989@qq.com'#发邮件的邮箱用户名,也就是你的邮箱     smtp_auth_username: '1076558989@qq.com'#发邮件的邮箱授权码,非QQ登录密码smtp_auth_password: 'pgsXXXXXXXXXjdh'#进行tls验证smtp_require_tls: falseroute:group_by: ['alertname']# 当收到告警的时候,等待group_wait配置的时间,看是否还有告警,如果有就一起发出去group_wait: 10s#  如果上次告警信息发送成功,此时又来了一个新的告警数据,则需要等待group_interval配置的时间才可以发送出去group_interval: 10s# 如果上次告警信息发送成功,且问题没有解决,则等待 repeat_interval配置的时间再次发送告警数据repeat_interval: 10s# 全局报警组,这个参数是必选的receiver: emailreceivers:
- name: 'email'#收邮件的邮箱email_configs:- to: '1076558989@qq.com'

相关配置,可参考下面这篇文章:

  • 使用Java代码发送QQ、网易电子邮件

最后

修改完之后,重启prometheus、alertmanager,如果重启失败了,多半是配置格式的问题。以上配置都是经过我实际使用过的,可直接复制、修改,不要手敲。

Grafana设置

重启完之后,查看prometheus,应该可以看到对应的节点和MySQL规则,如下:

(节点状态,UP说明已关联)

在这里插入图片描述

(MySQL规则,绿色说明指标正常)

在这里插入图片描述

将prometheus中MySQL数据可视图话,需要先设置一个数据源,如下:

在这里插入图片描述

点击prometheus,设置prometheus服务器地址

在这里插入图片描述

保存并测试,如下,设置成功

在这里插入图片描述

设置完之后,导入一个数据面板,如下,输入:7371

在这里插入图片描述

导入后,可查看到从节点MySQL的数据。醒目的两个YES,说明了从节点IO进程、SQL进程正在运行中,以此说明从节点同步正常

在这里插入图片描述

报警

现在,在从节点中,登录MySQL,停止同步,分别查看prometheus、grafana情况,并留意邮箱是否有报警通知,如下:

(从节点,停止同步)

在这里插入图片描述

(prometheus报警规则触发)

在这里插入图片描述

(邮箱,玩命报警)

在这里插入图片描述

(grafana面板数据发生变化)

在这里插入图片描述

到这里,针对MySQL主从,一个可监测、可视图化、可报警的系统就搭建完成了。实际上,该系统还有很强的扩展性,在监测的应用,监测规则,视图化数据的面板,报警的途径(钉钉、企业微信、邮箱等等),报警规则(报警频率、回复后是否发消息通知)上,这里只介绍了冰山一角。

总结

本文介绍了使用prometheus监测MySQL主从同步状态方案,参考了以下文章/视频:

  • prometheus 构建MySQL主从监控:https://blog.csdn.net/weixin_48190863/article/details/120356769

  • Prometheus监控Mysql数据库+mysql告警规则:https://blog.csdn.net/dragonQuncle/article/details/134262056

  • 搭建Prometheus监控,钉钉邮件告警:https://www.bilibili.com/video/BV1si421m792/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】线程安全及锁的使用

文章目录 前言一、锁1.定义一个锁变量2.pthread_mutex_init3.pthread_mutex_destroy4.pthread_mutex_lock/pthread_mutex_unlock5.静态变量锁和全局变量锁的初始化 二、问题描述及锁的运用三、RAII风格的锁 前言 临界资源: 在多个线程或进程间共享的资源. 临界区: 代码中访问临…

5 分钟快速上手图形验证码,防止接口被恶意刷量!

5 分钟快速上手图形验证码,防止接口被恶意刷量! 大家好,我是程序员小白条,今天来给大家介绍一个快速实现图形验证码的优秀框架 AJ-Captcha。 需求分析 如果注册接口没有验证码这种类型的限制,很容易会被刷量&#x…

protobuf —— 快速上手

protobuf —— 快速上手 创建 .proto 文件添加注释指定proto3语法package 声明符定义消息(message) 定义消息字段字段定义基本格式字段名称命名规范字段类型字段唯一编号示例 转换关系示例:增加姓名和年龄字段 字段唯一编号字段编号范围编码效…

英伟达SSD视觉算法,jetson.inference在jetson nano中部署

一、用官方镜像刷机 安装SD卡擦除工具SD Card Formatter https://www.sdcardformatter.com/download/ 格式化SD卡 下载官方镜像 https://developer.nvidia.com/jetson-nano-sd-card-image 安装刷机工具balenaEtcher https://www.balena.io/etcher 将上面下载的镜像压缩包解…

spark的简单学习二

一 spark sql基础 1.1 Dataframe 1.介绍: DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表 格,除了数据以外,还掌握数据的结构信息,即schema。同时,与Hive类似,DataFrame也支 持…

gin框架精通篇(二)

原生数据库使用 导入模块:go get -u github.com/go-sql-driver/mysql 安装 mysql 数据库 安装数据库可能遇到的问题:(网上的方法基本可以解决) ERROR 1045 (28000): Access denied for user ‘-root’‘localhost’ (using passwo…

HTML 页面布局

慢慢生活,慢慢变好 —— 24.5.28 页面布局 盒子: 页面中所有的元素(标签),都可以看做是一个盒子,由盒子将页面中的元素包含在一个矩形区域内,通过盒子的视角更方便的进行页面布局 盒子模型组成: 内容区域(content)、内边距区域(pa…

React中useRef的使用

在 React 中,useRef 是一个钩子,用于返回一个可变的 ref 对象,其 .current 属性被初始化为传递的参数(initialValue)。这个返回的对象在组件的整个生命周期内保持不变。useRef 可以用来直接访问 DOM 元素或存储任何不会…

Oracle逻辑备库异构平台支持列表

关于oracle逻辑备库支持的OS平台列表,以及oracle DG主备版本支持情况,通过参考oracle 官方文档来做个整理总结,希望能帮到大家。 ​一.Oracle逻辑备库异构平台支持列表 oracle DG是否异构是通过platform_id来判断,通过查询v$dat…

UOS开通22端口用于SSH

主机虚拟机能相互ping通,但是mobaxterm等(远程ssh软件)连接不了 原因很有可能是虚拟机未安装SSH服务 检测是否已安装ssh服务,输入以下命令 ssh localhost 如果出现: ssh: connect to host localhost port 22: Connection refused 表明没有…

数据结构的希尔排序(c语言版)

一.希尔排序的概念 1.希尔排序的基本思想 希尔排序是一种基于插入排序算法的优化排序方法。它的基本思想如下: 选择一个增量序列 t1&#xff0c;t2&#xff0c;......&#xff0c;tk&#xff0c;其中 ti > tj, 当 i < j&#xff0c;并且 tk 1。 按增量序列个数k&#…

Centos安装,window、ubuntus双系统基础上安装Centos安装

文章目录 前言一、准备工作二、开始安装1、2、首先选择DATE&TIME2、选择最小安装3、 选择安装位置 总结 前言 因工作需要&#xff0c;我需要在工控机上额外装Centos7系统&#xff0c;不过我是装在机械硬盘上了不知道对性能是否有影响&#xff0c;若有影响&#xff0c;后面…

基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客 本篇将完善主界面的管理员入库和出库功能&#xff0c;同样的&#xff0c;管理员入库和出库的设计套路适用于动态表的录入和编辑 首先还是介绍一下本项目将要实现的功能 &#xf…

【sass数据类型简介以及使用方法】

Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;是一种CSS预处理器&#xff0c;它允许你使用变量、嵌套规则、混合&#xff08;mixin&#xff09;、函数等功能来编写更易于维护和组织的CSS代码。Sass具有自己的数据类型系统&#xff0c;这些数据类型在编写Sass…

[Android]项目打包APK时报错PKCS12 keystore not in version 3 format

报错&#xff1a; PKCS12 keystore not in version 3 format Execution failed for task :app:packageRelease. > A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable > com.android.ide.commo…

如何使用 FastAPI 部署 NLP 模型?

模型部署是将训练好的自然语言处理模型集成到生产环境中的过程。模型接收输入数据&#xff0c;预测输出。 有多种将 NLP 模型部署到生产环境的方法&#xff0c;包括 Flask、Django、Bottle 等框架。 本文将分享使用 FastAPI 构建和部署 NLP 模型。 在本文中&#xff0c;你将…

揭开Java序列化的神秘面纱(上)Serializable使用详解

Java序列化(Serialization)作为一项核心技术&#xff0c;在Java应用程序的多个领域都有着广泛的应用。无论是通过网络进行对象传输&#xff0c;还是实现对象的持久化存储&#xff0c;序列化都扮演着关键的角色。然而&#xff0c;这个看似简单的概念蕴含着丰富的原理和用法细节&…

如何为个人网站部署SSL安全证书,以实现网站的 HTTPS 加密协议访问?

哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。完成了域名的备案与解析后&#xff0c;就可以通过域名来访问我们的网站了。本篇将介绍如何为我们的网站部署SSL安全证书&#xff0c;实现网站的 HTTPS 加密协议访问。 1、购买SSL证书 未进行SSL证书部署&#xff0c;访问网…

数据保存MySQL语法

文章目录 一、导包二、链接数据库三、创建操作工具【游标 cursor】四、执行命令1.创建表2.插入数据 五、数据库提交 一、导包 import pymysql二、链接数据库 db pymysql.connect(hostlocalhost,port3306,userroot,passwordroot123,dbpython案例,charsetutf8 )三、创建操作工…

回答篇二:测试开发高频面试题目

引用之前文章&#xff1a;测试开发高频面试题目 本篇文章是回答篇&#xff08;持续更新中&#xff09; 1. 在测试开发中使用哪些自动化测试工具和框架&#xff1f;介绍一下你对其中一个工具或框架的经验。 a. 测试中经常是用的自动化测试工具和框架有Selenium、Pytest、Postman…