万物皆可监控(shell脚本监控TIDB-DM和DSG同步状态)

news2024/9/22 3:59:42

监控的方式有很多,常用的有zabbix和prometheus平台,理论上都可以做到对有状态服务的监控,因为我个人对这两个监控平台不是很熟悉,所以一般喜欢使用shell脚本来做监控;

纯oracle 数据库的监控推荐使用EMCC,具体见如下博文。
EMCC13.5安装配置手册(详细版)_oracle emcc安装-CSDN博客

shell 脚本监控的优势:

简单灵活:使用Shell脚本可以快速实现自定义监控逻辑,灵活性高。

低资源消耗:脚本本身资源消耗低,可以直接运行在被监控主机上。

无外部依赖:无需额外的软件或服务,依赖于操作系统自带的工具。

当然劣势也很明显

维护成本高:脚本需要手动编写和维护,随着监控需求的增加,维护成本会显著上升。

缺乏集中管理:没有统一的监控平台和界面,难以集中管理和查看监控数据。

告警和通知:需要自行实现告警和通知机制,缺乏内置的高级告警管理功能。

历史数据和图表:难以实现长期数据存储和图表展示,需要额外的工具和开发工作。

一 .监控TIDB DM数据同步状态

如何将TIDB作为Mysql的从库实现实时数据同步_tidb数据库数据同步-CSDN博客
这篇文章详细介绍了使用TIDB作为mysql备库存放历史归档数据,并作为报表库。但是在后续的使用过程中,偶尔因为同步的过滤操作造成同步失败,虽然TIDB和DM集群都有Grafana,不过不会主动推送错误,导致长时间的同步失败;既然dm同步是有状态的服务,那么就可以通过shell脚本来监控。

DM同步状态监控命令

[root@tidb01 ~]# tiup dmctl --master-addr 10.xx.xx.xx:8261   query-status syncmestiup 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.shsleep 10  ##因为dmctl执行需要几秒钟时间,这里sleep 10等待waitnum=$(cat /root/new.log | wc -l) ##判断是否有running# if no running mail alertif [ $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 logLOG_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也不怕)_oracle 监控及日常处理脚本-CSDN博客

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

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

相关文章

基于火山引擎云搜索的混合搜索实战

在搜索应用中,传统的 Keyword Search 一直是主要的搜索方法,它适合精确匹配查询的场景,能够提供低延迟和良好的结果可解释性,但是 Keyword Search 并没有考虑上下文信息,可能产生不相关的结果。最近几年,基…

淘系淘宝订单详情api接口(订单详情,订单列表,出售中,库存等属性)

淘系淘宝订单详情api接口(订单详情,订单列表,出售中,库存等属性)

免费泛域名证书申请

通配符证书是一种 SSL/TLS 证书,可用于保护多个域(主机),由域名字段中的通配符 (*) 指示。 如果您有很多需要保护的域或子域,这会很有帮助,因为它可以节省您的时间和金钱。 本文将讨论通配符证书、它们的工…

【Win】如何在Windows隐藏安装的程序

由于维护人员或用户可能无意中通过“程序和功能”选项删除对业务至关重要的软件,这导致服务中断或安全风险。为了防止此类情况发生,确保只有授权的用户才能访问和管理系统中的程序。为了实现这一目标,我们将探讨如何在Windows操作系统中隐藏特…

使用高防IP是应对网络安全的重要措施

使用高防IP(High Defense IP)在现代网络环境中显得尤为重要,这主要源于以下几个方面的原因: 一、网络安全形势严峻 随着互联网的快速发展,网络安全问题日益突出。各种网络攻击手段层出不穷,如分布式拒绝服…

R语言基础--文件读写

From生物技能树(R第五节) 文章目录 一、文件读写1.注意用project管理工作目录2、文件读取1、读取.txt文件2、读取.csv文件注意:数据框不允许重复的行名 3.数据框的导出4.读取文件的其他方式(用于读取/导出文件的R包)--经验1.base2.readr3.dat…

【会议征稿】2024年机器人前沿技术与创新国际会议(FTIR 2024, 7/19-21)

2024年机器人前沿技术与创新国际会议(FTIR 2024)将于2024年7月19-21日在中国杭州举行。FTIR 2024聚焦前沿技术与创新,将把机器人领域的创新学者和专家聚集到一个共同的论坛。会议的主要目标是促进机器人的研究和开发活动,另一个目…

使用单目相机前后帧特征点匹配进行3D深度估计的方法

在计算机视觉和机器人领域,三维空间感知是实现环境理解和交互的核心技术之一。特别是在资源受限的场合,使用针孔模型的单目相机进行深度估计成为了一种既经济又实用的解决方案。单目深度估计技术依赖于从连续视频帧中提取和匹配特征点,以估计…

企业大模型如何成为自己数据的“百科全书”?

作者 | 郭炜 编辑 | Debra Chen 在当今的商业环境中,大数据的管理和应用已经成为企业决策和运营的核心组成部分。然而,随着数据量的爆炸性增长,如何有效利用这些数据成为了一个普遍的挑战。 本文将探讨大数据架构、大模型的集成&#xff0…

线上网页点击菜单没有反应 报错ChunkLoadError:Loading chunk chunk-***** failed

现象 点击菜单无反应并且控制台报错Loading chunk chunk-***** failed 具体错误现象截图如下 分析 在线上页面已经打开的情况下,重新打包部署了前端项目。每次打包,js文件的hash值都会发生改变,因为我们的路由采用了懒加载,未…

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.7

目录 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周:优化算法 (Optimization algorithms)2.7 RMSprop 第二门课: 改善深层神经网络&am…

代码复现|Demucs Music Source Separation

一、背景介绍 Demucs是一个开源的音源分离项目。 Demucs在算法层面前后经历了三次大版本的进化,最原始的V1版本是:编解码LSTM。具体算法原理图如下所示。该版本在时域进行音源分离。关于阅读笔记请点击这篇文章。 V1版本原理图 V2版本是同时使用时域和频…

小白必看:新手学编程必会的100个代码

前言 我记得刚开始接触编程的时候,觉得太难了。 也很好奇,写代码的那些人也太厉害了吧?全是英文的,他们的英文水平一定很好吧? 他们是怎么记住这么多代码格式的?而且错了一个标点符号,整个程…

Flash attention入门

一、目录 flash attentionGPU运算流程flash attention 原理flash attention 与 standard attention 时间/内存 对比。flash attention 算法实现比较flash attention 计算、memory-efficient attention 等不同内核下用时 二、实现 flash attention 目的: 提高运行速…

NGM-SLAM:首创融合神经辐射场子图的3DGS-SLAM,问鼎SOTA!

论文标题: NGM-SLAM: Gaussian Splatting SLAM with Radiance Field Submap 论文作者: Mingrui Li, Jingwei Huang, Lei Sun Aaron, Xuxiang Tian, Tianchen Deng, Hongyu Wang 导读: 3DGS技术因其性能卓越而备受关注,3DGS-SLA…

GPT-4o 炸裂发布!你竟然还没用上?(附详细教程)

今天AI界的爆炸新闻非chatgpt-4o莫属,从早上到现在随处可见的文章推送,视频推送。 大家或多或少都有耳闻了,今天主要讲一讲我们普通人到底怎么用?如果不氪金行不行?我就想体验一下可不可以?带着问题往下看 …

Python 海龟画图(Turtle)命令大全

移动和绘制 forward() | fd() 使用语法: ​​turtle.forward(距离)​​ ​​turtle.fd(距离)​​ 参数说明: 距离 一个数字 (整数 或者 浮点) (注:单位是像素) 代码示例: import turtle turtle.forward(200) 效果: backward () | bk() | back() 使用语法: ​…

掏心经验分享,软考中项0基础入门篇!

想备考下半年中项(系统集成项目管理工程师)的朋友,不知道如何了解软考中项,今天给大家整理一篇关于我自己在备考软考时的一些考量和踩过的一些坑。(无广,放心看) 很多小伙伴总是听大家说软考中…

你是学会了还是学废了:Elasticsearch 7 集群拷贝到其它环境如何重置密码

欢迎您关注我的公众号【尚雷的驿站】 公众号:尚雷的驿站 CSDN :https://blog.csdn.net/shlei5580 墨天轮:https://www.modb.pro/u/2436 PGFans:https://www.pgfans.cn/user/home?userId4159 前言 本文描述了将生产ES集群打包拷贝…

线性模型之岭回归的用法

实战:使用岭回归模型 完整代码: import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split fro…