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

news2024/11/18 15:49:53

说明:本文介绍如何使用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/

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

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

相关文章

谷歌推出TransformerFAM架构,以更低的消耗处理长序列文本

Transformer对大模型界的影响力不言而喻,ChatGPT、Sora、Stable Difusion等知名模型皆使用了该架构。 但有一个很明显的缺点,其注意力复杂度的二次方增长在处理书籍、PDF等超长文档时会显著增加算力负担。 虽然会通过滑动窗口注意力和稀疏注意力等技术…

全栈实现图片验证码及知识补充 全栈开发之路——全栈篇(4)

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

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…

AI革命:生活无处不智能

AI革命&#xff1a;生活无处不智能 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0…

PyBullet 物理引擎

PyBullet是一个开源的物理仿真库&#xff0c;基于Bullet Physics SDK这一成熟的、广泛使用的开源物理引擎。它提供了Python接口&#xff0c;使开发者能够利用Bullet强大的物理仿真能力&#xff0c;同时享受Python的易用性。PyBullet支持多种物理学模型&#xff0c;如刚体、骨骼…

CTF流量分析之wireshark使用

01.基本介绍 在CTF比赛中&#xff0c;对于流量包的分析取证是一种十分重要的题型。通常这类题目都是会提供一个包含流量数据的pcap文件&#xff0c;参赛选手通过该文件筛选和过滤其中无关的流量信息&#xff0c;根据关键流量信息找出flag或者相关线索。 pcap流量包的分析通常…

在 GPT-4o 释放完整能力前,听听实时多模态 AI 创业者的一手经验 | 编码人声

「编码人声」是由「RTE开发者社区」策划的一档播客节目&#xff0c;关注行业发展变革、开发者职涯发展、技术突破以及创业创新&#xff0c;由开发者来分享开发者眼中的工作与生活。 5 月中旬 GPT-4o 的发布&#xff0c;让人与 AI 的交互&#xff0c;从对话框的文本交流加速推进…

【C语言深度解剖】(14):结构体内存对齐(详细配图讲解)

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多C语言深度解剖点击专栏链接查看&…

【网络层】ICMP 因特网控制协议

文章目录 ICMP 含义以及作用ICMP协议解析结合ICMP协议和ping常见问题 ICMP 含义以及作用 ICMP&#xff1a;Internet control massage protocol 因特网控制协议 Internet控制报文协议ICMP是网络层的一个重要协议。 ICMP协议用来在网络设备间传递各种差错和控制信息&#xff0c;…

QA测试开发工程师面试题满分问答25: JVM瓶颈分析,举例说明

回答思路 JVM 性能瓶颈概述: JVM (Java Virtual Machine)是 Java 程序运行的基础环境,其性能直接影响到应用程序的整体性能。在实际项目中,我们经常会遇到 JVM 性能瓶颈,导致应用程序出现响应缓慢、CPU 利用率高、内存溢出等问题。因此,分析和诊断 JVM 瓶颈是非常重要的工作,有…

谷歌插件编写

目录 manifest.json {"manifest_version": 3,"name": "Floating Ball","version": "1.0","description": "A floating ball on the right side of the webpage.","permissions": ["act…

XS2185一款八通道以太网供电控制器

XS2185是一款八通道以太网供电控制器。 XS2185通过侦测各通道的DET管脚输入电压 来判断是否有合格的负载/PD接入系统&#xff0c;以决定 是否开启MOS供电开关。 当通道已经处于供电状态时&#xff0c;XS2185通过侦 测SENSE管脚的输入电压&#xff0c;以判断供电是否发生 …

Kubernetes部署dashboard

Kubernetes部署dashboard Kubernetes集群安装 鲲鹏arm64架构下安装KubeSphere linux安装部署k8s(kubernetes)和解决遇到的坑 dashboard部署 $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashbo…

电脑出现:excel词典(xllex.dll)文件丢失或损坏的错误提示怎么办?有效的将丢失的xllex.dll修复

当遇到 Excel 提示“词典 (xllex.dll) 文件丢失或损坏”的问题时&#xff0c;通常意味着该动态链接库文件&#xff08;Dynamic Link Library&#xff0c;DLL&#xff09;&#xff0c;它与拼写检查功能相关联的&#xff0c;无法被正确找到或者合适地使用。那么有什么办法可以解决…

【ARM+Codesys案例】T3/RK3568/树莓派+Codesys锂电叠片机方案:结合CODESYS实现高效生产

锂电叠片机解决方案 乘风破浪&#xff0c;促进新能源行业发展 锂电池是依靠锂离子在正极与负极之间移动来达到充放电目的的一种可充电电池&#xff0c;具有高能量密度、高电压、寿命长、无记忆效应等优点。锂电池属于国家政策扶持的高速发展行业&#xff0c;近年发展快速&…

开发者的福音:免去搭建服务,让你的应用开发变得像吃蛋糕一样简单!

传统应用开发的"噩梦" 想象一下&#xff0c;你正在准备一场盛大的晚宴&#xff0c;但必须从零开始建造厨房、种植食材、甚至学习烹饪技巧。这就是传统应用开发的现状——你不仅要设计数据库、编写API接口&#xff0c;还要处理对象存储、实时数据库、云数据库等一系列…

LeetCode - 双指针(Two Pointers) 算法集合 [对撞指针、快慢指针、滑动窗口、双链遍历]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139270999 双指针算法是一种常见且灵活的技巧&#xff0c;通过使用两个指针协同完成任务。这些指针可以指向不同的元素&#xff0c;具体应用取决于…

如何将红酒配餐融入日常生活

红酒配餐不仅可以提升用餐的品质&#xff0c;还可以为日常生活增添一份优雅和情调。云仓酒庄雷盛红酒以其卓着的品质和丰富的口感&#xff0c;成为了实现红酒配餐融入日常生活的理想选择。下面将介绍如何将雷盛红酒配餐融入日常生活。 首先&#xff0c;了解红酒的基本知识。了解…

动态规划part01 Day41

动态规划算法解题步骤 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 LC509斐波那契数 LC70爬楼梯 LC746使用最小花费爬楼梯 dp[]含义&#xff1a;爬到第i层楼梯的最小花费

webpack5基础和开发模式配置

运行环境 nodejs16 webpack基础 webpack打包输出的文件是bundle 打包就是编译组合 webpack本身功能 仅能编译js文件 开始使用 基本配置 五大核心概念 准备webpack配置文件 1.在根目录 2.命名为webpack.config.js 开发模式介绍 处理样式资源 处理css样式资源文件…