万物皆可监控(shell脚本监控TIDB-DM和DSG同步状态)
liuian 2025-04-24 03:32 13 浏览
监控的方式有很多,常用的有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安装配置使用文档
相关推荐
- 深入解析 MySQL 8.0 JSON 相关函数:解锁数据存储的无限可能
-
引言在现代应用程序中,数据的存储和处理变得愈发复杂多样。MySQL8.0引入了丰富的JSON相关函数,为我们提供了更灵活的数据存储和检索方式。本文将深入探讨MySQL8.0中的JSON...
- MySQL的Json类型个人用法详解(mysql json类型对应java什么类型)
-
前言虽然MySQL很早就添加了Json类型,但是在业务开发过程中还是很少设计带这种类型的表。少不代表没有,当真正要对Json类型进行特定查询,修改,插入和优化等操作时,却感觉一下子想不起那些函数怎么使...
- MySQL的json查询之json_array(mysql json_search)
-
json_array顾名思义就是创建一个数组,实际的用法,我目前没有想到很好的使用场景。使用官方的例子说明一下吧。例一selectjson_array(1,2,3,4);json_array虽然单独...
- 头条创作挑战赛#一、LSTM 原理 长短期记忆网络
-
#头条创作挑战赛#一、LSTM原理长短期记忆网络(LongShort-TermMemory,LSTM)是一种特殊类型的循环神经网络(RNN),旨在解决传统RNN在处理长序列数据时面临的梯度...
- TensorBoard最全使用教程:看这篇就够了
-
机器学习通常涉及在训练期间可视化和度量模型的性能。有许多工具可用于此任务。在本文中,我们将重点介绍TensorFlow的开源工具套件,称为TensorBoard,虽然他是TensorFlow...
- 图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比
-
本文约4600字,建议阅读10分钟本文介绍了图神经网络版本的对比。KolmogorovArnoldNetworks(KAN)最近作为MLP的替代而流行起来,KANs使用Kolmogorov-Ar...
- kornia,一个实用的 Python 库!(python kkb_tools)
-
大家好,今天为大家分享一个实用的Python库-kornia。Github地址:https://github.com/kornia/kornia/Kornia是一个基于PyTorch的开源计算...
- 图像分割掩码标注转YOLO多边形标注
-
Ultralytics团队付出了巨大的努力,使创建自定义YOLO模型变得非常容易。但是,处理大型数据集仍然很痛苦。训练yolo分割模型需要数据集具有其特定格式,这可能与你从大型数据集中获得的...
- [python] 向量检索库Faiss使用指北
-
Faiss是一个由facebook开发以用于高效相似性搜索和密集向量聚类的库。它能够在任意大小的向量集中进行搜索。它还包含用于评估和参数调整的支持代码。Faiss是用C++编写的,带有Python的完...
- 如何把未量化的 70B 大模型加载到笔记本电脑上运行?
-
并行运行70B大模型我们已经看到,量化已经成为在低端GPU(比如Colab、Kaggle等)上加载大型语言模型(LLMs)的最常见方法了,但这会降低准确性并增加幻觉现象。那如果你和你的朋友们...
- ncnn+PPYOLOv2首次结合!全网最详细代码解读来了
-
编辑:好困LRS【新智元导读】今天给大家安利一个宝藏仓库miemiedetection,该仓库集合了PPYOLO、PPYOLOv2、PPYOLOE三个算法pytorch实现三合一,其中的PPYOL...
- 人工智能——图像识别(人工智能图像识别流程)
-
概述图像识别(ImageRecognition)是计算机视觉的核心任务之一,旨在通过算法让计算机理解图像内容,包括分类(识别物体类别)、检测(定位并识别多个物体)、分割(像素级识别)等,常见的应用场...
- PyTorch 深度学习实战(15):Twin Delayed DDPG (TD3) 算法
-
在上一篇文章中,我们介绍了DeepDeterministicPolicyGradient(DDPG)算法,并使用它解决了Pendulum问题。本文将深入探讨TwinDelayed...
- 大模型中常用的注意力机制GQA详解以及Pytorch代码实现
-
分组查询注意力(GroupedQueryAttention)是一种在大型语言模型中的多查询注意力(MQA)和多头注意力(MHA)之间进行插值的方法,它的目标是在保持MQA速度的同时...
- pytorch如何快速创建具有特殊意思的tensor张量?
-
专栏推荐正文我们通过值可以看到torch.empty并没有进行初始化创建tensor并进行随机初始化操作,常用rand/rand_like,randint正态分布(0,1)指定正态分布的均值还有方差i...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
-
- 深入解析 MySQL 8.0 JSON 相关函数:解锁数据存储的无限可能
- MySQL的Json类型个人用法详解(mysql json类型对应java什么类型)
- MySQL的json查询之json_array(mysql json_search)
- 头条创作挑战赛#一、LSTM 原理 长短期记忆网络
- TensorBoard最全使用教程:看这篇就够了
- 图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比
- kornia,一个实用的 Python 库!(python kkb_tools)
- 图像分割掩码标注转YOLO多边形标注
- [python] 向量检索库Faiss使用指北
- 如何把未量化的 70B 大模型加载到笔记本电脑上运行?
- 标签列表
-
- 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)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- react-admin (33)
- vscode切换git分支 (35)
- vscode美化代码 (33)
- python bytes转16进制 (35)