使用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.processlist

Restart=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-rules
  rules:
#mysql状态检测
  - alert: MySQL Status
    expr: mysql_up == 0
    for: 10s
    labels:
      severity: warning
    annotations:
      summary: "{{ $labels.instance }} Mysql服务 !!!"
      description: "{{ $labels.instance }} Mysql服务不可用  请检查!"

#mysql主从IO线程停止时触发告警
  - alert: MySQL Slave IO Thread Status
    expr: mysql_slave_status_slave_io_running == 0
    for: 5s
    labels:
      severity: warning
    annotations:
      summary: "{{ $labels.instance }} Mysql从节点IO线程"
      description: "Mysql主从IO线程故障,请检测!"

#mysql主从sql线程停止时触发告警
  - alert: MySQL Slave SQL Thread Status 
    expr: mysql_slave_status_slave_sql_running == 0
    for: 5s 
    labels:
      severity: error
    annotations: 
      summary: "{{$labels.instance}}: MySQL Slave SQL Thread has stop !!!"
      description: "检测MySQL主从SQL线程运行状态"
      
#mysql主从延时状态告警
  - alert: MySQL Slave Delay Status 
    expr: mysql_slave_status_sql_delay == 30
    for: 5s 
    labels:
      severity: warning
    annotations: 
      summary: "{{$labels.instance}}: MySQL 主从延迟超过 30s !!!"
      description: "检测MySQL主从延时状态"
      
#mysql连接数告警
  - alert: Mysql_Too_Many_Connections
    expr: rate(mysql_global_status_threads_connected[5m]) > 200
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 连接数过多"
      description: "{{$labels.instance}}: 连接数过多,请处理 ,(current value is: {{ $value }})!"  
 
 #mysql慢查询有点多告警
  - alert: Mysql_Too_Many_slow_queries
    expr: rate(mysql_global_status_slow_queries[5m]) > 3
    for: 2m
    labels:
      severity: warning
    annotations:
      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: 15s
  evaluation_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: 5s
    static_configs:
    - targets: ['IP地址:9104','IP地址:9104']
  # nodes
  - job_name: 'nodes'
    scrape_interval: 5s
    static_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: false

route:
  group_by: ['alertname']
  # 当收到告警的时候,等待group_wait配置的时间,看是否还有告警,如果有就一起发出去
  group_wait: 10s
  #  如果上次告警信息发送成功,此时又来了一个新的告警数据,则需要等待group_interval配置的时间才可以发送出去
  group_interval: 10s
  # 如果上次告警信息发送成功,且问题没有解决,则等待 repeat_interval配置的时间再次发送告警数据
  repeat_interval: 10s
  # 全局报警组,这个参数是必选的
  receiver: email

receivers:
- 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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

svg画简单的立方体

开发背景 要开发一个拖拽的大屏项目,其中涉及到一个装饰组件,是一个立方体cube,要求颜色可以修改,大小可以拖拽改变。 效果如下 分析 经过我一番奇思妙想,决定用svg实现,因为对svg比较熟悉。那就先来在草…

LabVIEW中实现Trio控制器的以太网通讯

在LabVIEW中实现与Trio控制器的以太网通讯,可以通过使用TCP/IP协议来完成。这种方法包括配置Trio控制器的网络设置、使用LabVIEW中的TCP/IP函数库进行数据传输和接收,以及处理通讯中的错误和数据解析。本文将详细说明实现步骤,包括配置、编程…

职责链设计模式

职责链设计模式(Chain of Responsibility Design Pattern)是一种行为设计模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这些对象被链接成一条链,沿着这条链传递请求,直到有一…

【Vue】自动导入组件

1. 下载插件 npm install unplugin-vue-components 2. 修改vite.config.js import { fileURLToPath, URL } from node:urlimport { defineConfig } from vite import vue from vitejs/plugin-vue import Components from unplugin-vue-components/vite // 按需加载自定义组件/…

2、PHP 8.1.0-dev 后门远程命令执行漏洞复现

1、青少年ctf,题目PHP后门 2、页面 3、bp抓包发现PHP版本为8.1.0-dev 4、尝试使用以前爆出过的漏洞(网上查相关案例) User-Agentt: zerodiumvar_dump(5*5); User-Agentt: zerodiumsystem("cat /flag"); 5、查找flag User-Agentt: z…

3.游戏中自定义数据类型的解读分析

知识来源于腾讯课堂易道云 结构的解释: 计算机里的所有东西都是用二进制表示的,二进制是数字,我们用的阿拉伯数字0-9这个数字是十进制,计算机用的是二进制只有0或1,然后都是一堆0或1的数字,游戏中怎么把这…

路径规划算法--BFS

系列文章目录 文章目录 系列文章目录一、BFS二、BFS伪代码BFS与Dijkstra区别 一、BFS BFS(Breadth First Search)为广度优先搜索,是一种用于遍历或搜索树或图的搜索算法,适用于无权图的遍历。BFS从根节点开始,探索其相…

AI大模型:大数据+大算力+强算法

前言:好久不见,甚是想念,我是辣条,我又回来啦,兄弟们,一别两年,还有多少老哥们在呢? 目录 一年半没更文我干啥去了? AI大模型火了 人工智能 大模型的理解 为什么学习…

【Python】 Python中__slots__的妙用:提升性能与内存管理

基本原理 在Python中,每个类默认都会继承自object类,而object类在Python中是一个动态类,允许动态地添加属性和方法。这种灵活性使得Python在某些情况下非常强大和灵活,但同时也带来了一些性能和内存使用上的开销。 为了解决这个…

简化跨网文件传输摆渡过程,降低IT人员工作量

在当今数字化时代,IT企业面临着日益增长的数据交换需求。随着网络安全威胁的不断演变,网关隔离成为了保护企业内部网络不受外部威胁的重要手段。然而,隔离的同时,企业也需要在不同网络间安全、高效地传输文件,这就催生…

ubuntu strace命令

strace 是 Linux 系统中的一个调试工具,用于跟踪并记录系统调用(system calls)和信号(signals)。在 Ubuntu 中,strace 命令可以帮助开发者和系统管理员了解一个程序在运行时如何与操作系统内核进行交互&…

渗透测试工具Cobalt strike-1.CS介绍与配置

Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS。最近这个工具大火,成为了渗透测试中不可缺少的利器。其拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理&#x…

骨折分类数据集1129张10类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):1129 分类类别数:10 类别名称:["avulsion_fracture",…

使用 RT 矩阵进行 3D 点云变换详解(基于 PCL 和 Eigen 库)

在 3D 点云处理中,RT 矩阵是一个常用的工具,用于对点云进行旋转和平移操作。本文将详细介绍 RT 矩阵的概念,并通过一个示例程序演示如何基于 PCL 和 Eigen 库将一帧点云进行矩阵变换再输出。 本教程的示例代码和点云数据可在 GitHub 下载。 什…

100个 Unity小游戏系列六 -Unity 抽奖游戏专题四 翻卡游戏

一、演示效果 二、知识点讲解 2.1 布局 void CreateItems(){reward_data_list reward_data_list ?? new List<RewardData>();reward_data_list.Clear();for (int i 0; i < ItemCount; i){GameObject item;if (i 1 < itemParent.childCount){item itemParent…

垂类短视频:四川鑫悦里文化传媒有限公司

垂类短视频&#xff1a;内容细分下的新媒体力量 随着移动互联网的迅猛发展和智能手机的普及&#xff0c;短视频已成为当下最受欢迎的媒介形式之一。四川鑫悦里文化传媒有限公司而在短视频领域&#xff0c;一个新兴的概念——“垂类短视频”正逐渐崭露头角&#xff0c;以其独特…

⌈ 传知代码 ⌋ 高速公路车辆速度检测软件

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

WMS仓库管理系统是怎么操作的?WMS操作流程详解

WMS 是仓库管理系统(Warehouse Management System) 的缩写。通过标准化的来料管理、拣配管理、仓库管理&#xff0c;打造实时化、透明化、可视化的仓储管理体系。一款合格的wms系统具有以下优势 提供实时可视性和自动化仓储流程&#xff0c;帮助企业更好地应对复杂的供应链网络…

python fstring教程(f-string教程)(python3.6+格式化字符串方法)

文章目录 Python F-String 教程&#xff1a;深度探究与实用指南引言基础用法什么是F-String?表达式嵌入 格式化选项小数点精度宽度与对齐数字格式化 高级用法复杂表达式调用函数多行F-String嵌套格式化 总结 Python F-String 教程&#xff1a;深度探究与实用指南 引言 在Pyt…

AI赋能:人工智能技术驱动下的品牌海外市场精准分析与营销策略

随着全球化的加速和科技的飞速发展&#xff0c;品牌在海外市场的竞争愈发激烈。为了在竞争激烈的国际市场中脱颖而出&#xff0c;品牌需要更深入地了解海外消费者的行为、趋势和偏好。在这个过程中&#xff0c;人工智能&#xff08;AI&#xff09;技术以其强大的数据处理和分析…