使用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…

数据结构的希尔排序(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…

[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…

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

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

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

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

调整表格大小

方法一&#xff1a;使用鼠标拖动表格边框或右下角的调整控点 在Word文档中&#xff0c;选中要缩小的表格&#xff0c;将鼠标指针放在表格的边框线上&#xff0c;直到指针变成双箭头的形状。 按住鼠标左键&#xff0c;拖动边框线&#xff0c;调整表格的宽度或高度。如果同时按住…

AI视频教程下载:使用ChatGPT进行商务写作

你将学到什么&#xff1f; 学习如何将ChatGPT集成到你的写作过程中&#xff0c;并有效地将其用作商务写作的个人写作助手。 学习如何使用ChatGPT生成想法&#xff0c;提高你的书面沟通的结构、清晰度和连贯性。 你将学习使用ChatGPT的最佳实践&#xff0c;包括如何自定义其设…

Win10版本TDengine使用分享

软件介绍 TDengine是一款开源、高性能、可扩展的时间序列数据库&#xff08;TSDB&#xff09;。它由涛思数据公司开发&#xff0c;专为处理大规模时间序列数据而设计。时间序列数据是指按时间顺序排列的数据点序列&#xff0c;广泛应用于物联网、大数据分析、金融等领域。TDen…

Redis解决缓存一致性问题

文章目录 ☃️概述☃️数据库和缓存不一致采用什么方案☃️代码实现☃️其他 ☃️概述 由于我们的 缓存的数据源来自于数据库, 而数据库的 数据是会发生变化的, 因此,如果当数据库中 数据发生变化,而缓存却没有同步, 此时就会有 一致性问题存在, 其后果是: 用户使用缓存中的过…

DSP6657 GPIO中断学习

1 简介 使用创龙板卡的KEY2按键通过中断的方式控制LED3的亮灭 2 中断学习 在C665x设备上&#xff0c;CPU中断是通过C66x CorePac中断控制器进行配置的。该中断控制器允许最多128个系统事件被编程到任意12个CPU可屏蔽中断输入&#xff08;CPUINT4至CPUINT15&#xff09;、CPU…

短剧解说一键生成原创文案的快速方法

如今短剧创作火的一塌糊涂&#xff0c;它们以其简洁明了的剧情、生动有趣的角色和紧凑的节奏&#xff0c;吸引了大量观众的关注。因此&#xff0c;它所带来的流量是非常巨大&#xff0c;不少人将流量的获取瞄准了短剧创作领域以及短剧解说领域。而对于短剧解说人员来讲&#xf…

微服务项目收获和总结---第5天(定时发布)

延迟任务 目录 延迟任务技术对比&#xff1a; Redis实现定时任务&#xff1a;​编辑新增任务&#xff1a;取消任务&#xff1a;拉取任务&#xff1a;Zset定时刷新数据到List中&#xff1a;分布式锁实现定时任务只刷新一次&#xff1a; 技术对比&#xff1a; Redis实现定时任…