万物皆可监控(shell脚本监控TIDB-DM和DSG同步状态)
liuian 2025-04-24 03:32 38 浏览
监控的方式有很多,常用的有zabbix和prometheus平台,理论上都可以做到对有状态服务的监控,因为我个人对这两个监控平台不是很熟悉,所以一般喜欢使用shell脚本来做监控;
纯oracle 数据库的监控推荐使用EMCC,具体见如下博文。
最好的数据库监控平台-ORACLE EMCC13.5安装配置使用文档
shell 脚本监控的优势:
简单灵活:使用Shell脚本可以快速实现自定义监控逻辑,灵活性高。
低资源消耗:脚本本身资源消耗低,可以直接运行在被监控主机上。
无外部依赖:无需额外的软件或服务,依赖于操作系统自带的工具。
当然劣势也很明显
维护成本高:脚本需要手动编写和维护,随着监控需求的增加,维护成本会显著上升。
缺乏集中管理:没有统一的监控平台和界面,难以集中管理和查看监控数据。
告警和通知:需要自行实现告警和通知机制,缺乏内置的高级告警管理功能。
历史数据和图表:难以实现长期数据存储和图表展示,需要额外的工具和开发工作。
一 .监控TIDB DM数据同步状态
如何将TIDB作为Mysql的从库实现实时数据同步
这篇文章详细介绍了使用TIDB作为mysql备库存放历史归档数据,并作为报表库。但是在后续的使用过程中,偶尔因为同步的过滤操作造成同步失败,虽然TIDB和DM集群都有Grafana,不过不会主动推送错误,导致长时间的同步失败;既然dm同步是有状态的服务,那么就可以通过shell脚本来监控。
DM同步状态监控命令
[root@tidb01 ~]# tiup dmctl --master-addr 10.xx.xx.xx:8261 query-status syncmes
tiup is checking updates for component dmctl ...timeout(2s)!
Starting component `dmctl`: /root/.tiup/components/dmctl/v7.6.0/dmctl/dmctl --master-addr 10.250.38.37:8261 query-status syncmes
{
"result": true,
"msg": "",
"sources": [
{
"result": true,
"msg": "",
"sourceStatus": {
"source": "mysql-01",
"worker": "dm-10.xx.xx.xx-8262",
"result": null,
"relayStatus": null
},
"subTaskStatus": [
{
"name": "syncmes",
"stage": "Running", ##如果状态正常 stage 是running
"unit": "Sync",
"result": null,
"unresolvedDDLLockID": "",
"sync": {
"totalEvents": "45472123",
"totalTps": "27",
"recentTps": "1",
"masterBinlog": "(mysql-bin.000386, 222374746)",
"masterBinlogGtid": "",
"syncerBinlog": "(mysql-bin.000386, 222370491)",
"syncerBinlogGtid": "00000000-0000-0000-0000-000000000000:0",
"blockingDDLs": [
],
"unresolvedGroups": [
],
"synced": false,
"binlogType": "remote",
"secondsBehindMaster": "0",
"blockDDLOwner": "",
"conflictMsg": "",
"totalRows": "45472123",
"totalRps": "27",
"recentRps": "1"
},
"validation": null
}
]
}
]
}
那么监控的逻辑就比较简单,执行dmctl命令,检查输出结果集是否有running,如果没有咋发送邮件通知,告知同步异常
root@lyspltidb01 ~]# cat check_dm1.sh ##将当前状态放入log文件暂存
/root/.tiup/bin/tiup dmctl --master-addr 10.xx.xx.xx:8261 query-status syncmes|grep "Running" >/root/new.log 2>&1
/root/.tiup/bin/tiup dmctl --master-addr 10.xx.xx.xx:8261 query-status syncmes >/root/result.log 2>&1
[root@lyspltidb01 ~]# cat check_dm.sh ##正式脚本
#!/bin/bash
#check mysql to TIDB DM status by norton
#check dm status
sh /root/check_dm1.sh
sleep 10 ##因为dmctl执行需要几秒钟时间,这里sleep 10等待
wait
num=$(cat /root/new.log | wc -l) ##判断是否有running
# if no running mail alert
if [ $num -eq 0 ] ##如果没有抓取到running 关键字则表示同步状态异常
then
cat /root/result.log | mailx -s "tidb Check DM status Log" `cat /root/dba_mail.addr|grep -v \#`
echo "**********************************************************************"
else ##如果正常情况暂存log
>/root/new.log
>/root/result.log
fi
[root@tidb01 ~]#
范例邮件通知
二. shell脚本监控DSG同步状态
DSG SuperSync是一款由迪思杰(北京)数据管理技术有限公司研发的高性能数据库复制平台,主要用于容灾备份、业务分离、数据异构、数据共享、数据迁移和数据上云等场景。它在全量数据复制和增量数据同步方面表现出色,并支持结构变更同步、数据探测、数据转换、数据脱敏和数据质量实时检测等多项功能 (modb) (blog.csdn)。简单来说DSG和OGG差不多,但是我个人认为比OGG功能更强大,( 首次全同步,信创数据库支持,对DDL的支持等都优于OGG),缺点就是技术比较封闭,很多事情都需要依赖原厂支持(毕竟是商业软件)。
DSG的同步有个mon命令可以监控数据同步状态,关键为倒数第二行的数字,正常情况下同步正常,数字一般为0-3(业务量大,备库装载慢时可能会多);shell脚本监控的逻辑就是抓取mon执行结果的倒数第二行 等号后的数字,如果这个数字高于系统负载的阈值,则报警告知DSG同步异常。
[oracle@THSMLORACLE01 jobs]$ cat check_dsg_status.sh
#!/bin/bash
##mon是个类似top的刷新命令,这里加了timeout时间
timeout 1s /oradata/dsg/dt1/scripts/mon > /home/oracle/jobs/dsg.log
# 暂存dsg status log
LOG_FILE="/home/oracle/jobs/dsg.log"
# 获取倒数第二行
SECOND_LAST_LINE=$(tail -n 2 "$LOG_FILE" | head -n 1)
# 从倒数第二行中提取 = 后的数字
NUMBER=$(echo "$SECOND_LAST_LINE" | awk -F '=' '{print $2}')
#echo $NUMBER
# 判断数字是否大于阈值
if [ "$NUMBER" -gt 20 ]; then
# 发送邮件告警
#/home/oracle/jobs/dba_mail.addr 存放需要接受告警邮件的mail地址
echo "Warning DSG status error" | mail -s "Check thsm DSG Status" `cat /home/oracle/jobs/dba_mail.addr|grep -v \#`
fi
三.AI是你的好帮手
对于这种逻辑很简单的代码AI都可以帮你来完成,哪怕稍微有些偏差,也可以在AI提供的代码,稍作修改就可以实现。所以如果有重要的服务需要监控,直接梳理出逻辑让AI给你写出脚本吧。
GPT: 这样逻辑更简洁,但是本地可以执行,放入crontab无法执行,上面的脚本多了暂存和wait可以。(有大佬知道原因吗?私信我)
文心一言:结果和GPT差不多
更多oracle常用监控脚本可以参考
oracle常用监控脚本(纯干货,没有EMCC,ZABBIX也不怕)
--------------历史文章推荐---------------
数据库圈子里最冷门的八个公众号
学习哪种数据库最有"钱"景?投票结果已公布!
ORA-609频繁出现在alert.log,如何解决?
Oracle 23ai rpm安装配置及问题处理
关于Oracle 23ai 你要知道的几件事情
MOS(My Oracle Support)怎么用?Oracle DBA必备技能!
前人挖坑后人填(sqlplus / as sysdba登陆失败)
Oracle利用BBED恢复崩溃实例
最好的数据库监控平台-ORACLE EMCC13.5安装配置使用文档
相关推荐
- 2023年最新微信小程序抓包教程(微信小程序 抓包)
-
声明:本公众号大部分文章来自作者日常学习笔记,部分文章经作者授权及其他公众号白名单转载。未经授权严禁转载。如需转载,请联系开百。请不要利用文章中的相关技术从事非法测试。由此产生的任何不良后果与文...
- 测试人员必看的软件测试面试文档(软件测试面试怎么说)
-
前言又到了毕业季,我们将会迎来许多需要面试的小伙伴,在这里呢笔者给从事软件测试的小伙伴准备了一份顶级的面试文档。1、什么是bug?bug由哪些字段(要素)组成?1)将在电脑系统或程序中,隐藏着的...
- 复活,视频号一键下载,有手就会,长期更新(2023-12-21)
-
视频号下载的话题,也算是流量密码了。但也是比较麻烦的问题,频频失效不说,使用方法也难以入手。今天,奶酪就来讲讲视频号下载的新方案,更关键的是,它们有手就会有用,最后一个方法万能。实测2023-12-...
- 新款HTTP代理抓包工具Proxyman(界面美观、功能强大)
-
不论是普通的前后端开发人员,还是做爬虫、逆向的爬虫工程师和安全逆向工程,必不可少会使用的一种工具就是HTTP抓包工具。说到抓包工具,脱口而出的肯定是浏览器F12开发者调试界面、Charles(青花瓷)...
- 使用Charles工具对手机进行HTTPS抓包
-
本次用到的工具:Charles、雷电模拟器。比较常用的抓包工具有fiddler和Charles,今天讲Charles如何对手机端的HTTS包进行抓包。fiddler抓包工具不做讲解,网上有很多fidd...
- 苹果手机下载 TikTok 旧版本安装包教程
-
目前苹果手机能在国内免拔卡使用的TikTok版本只有21.1.0版本,而AppStore是高于21.1.0版本,本次教程就是解决如何下载TikTok旧版本安装包。前期准备准备美区...
- 【0基础学爬虫】爬虫基础之抓包工具的使用
-
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬...
- 防止应用调试分析IP被扫描加固实战教程
-
防止应用调试分析IP被扫描加固实战教程一、概述在当今数字化时代,应用程序的安全性已成为开发者关注的焦点。特别是在应用调试过程中,保护应用的网络安全显得尤为重要。为了防止应用调试过程中IP被扫描和潜在的...
- 一文了解 Telerik Test Studio 测试神器
-
1.简介TelerikTestStudio(以下称TestStudio)是一个易于使用的自动化测试工具,可用于Web、WPF应用的界面功能测试,也可以用于API测试,以及负载和性能测试。Te...
- HLS实战之Wireshark抓包分析(wireshark抓包总结)
-
0.引言Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接...
- 信息安全之HTTPS协议详解(加密方式、证书原理、中间人攻击 )
-
HTTPS协议详解(加密方式、证书原理、中间人攻击)HTTPS协议的加密方式有哪些?HTTPS证书的原理是什么?如何防止中间人攻击?一:HTTPS基本介绍:1.HTTPS是什么:HTTPS也是一个...
- Fiddler 怎么抓取手机APP:抖音、小程序、小红书数据接口
-
使用Fiddler抓取移动应用程序(APP)的数据接口需要进行以下步骤:首先,确保手机与计算机连接在同一网络下。在计算机上安装Fiddler工具,并打开它。将手机的代理设置为Fiddler代理。具体方...
- python爬虫教程:教你通过 Fiddler 进行手机抓包
-
今天要说说怎么在我们的手机抓包有时候我们想对请求的数据或者响应的数据进行篡改怎么做呢?我们经常在用的手机手机里面的数据怎么对它抓包呢?那么...接下来就是学习python的正确姿势我们要用到一款强...
- Fiddler入门教程全家桶,建议收藏
-
学习Fiddler工具之前,我们先了解一下Fiddler工具的特点,Fiddler能做什么?如何使用Fidder捕获数据包、修改请求、模拟客户端向服务端发送请求、实施越权的安全性测试等相关知识。本章节...
- fiddler如何抓取https请求实现手机抓包(100%成功解决)
-
一、HTTP协议和HTTPS协议。(1)HTTPS协议=HTTP协议+SSL协议,默认端口:443(2)HTTP协议(HyperTextTransferProtocol):超文本传输协议。默认...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
python使用fitz模块提取pdf中的图片
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)