一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于Java自定义SQL监控告警实现的方法与流程

2023-01-15 10:08:21 来源:中国专利 TAG:

基于java自定义sql监控告警实现的方法
技术领域
1.本发明涉及业务系统计算机维护技术领域,更具体地说,涉及一种基于java自定义sql监控告警实现的方法。


背景技术:

2.在业务系统使用过程中,运维人员经常需要对业务数据进行查询对比,以便监控业务系统是否正常运行,判断产生的业务数据是否正确。
3.通用做法是运维人员通过数据库客户端工具定期手动查询业务数据,人工判断业务数据准确性。这种运维方法极大浪费人力,而且效率不高,晚班需安排人力值守,对异常情况,不能及时发现。


技术实现要素:

4.本发明要解决的技术问题在于,针对上述技术方案存在的不足,提供基于java自定义sql监控告警实现的方法能够解决传统业务系统运维的高成本问题。
5.本发明提供一种基于java自定义sql监控告警实现的方法,所述方法包括以下步骤:s1,用户端根据不同租户创建不同的项目,生成租户id,根据不同的项目创建一个或者多个业务数据库连接串配置,并通过jdbc连接业务数据库;创建一个或者多个sql配置项,并将创建的其中一个业务数据库连接串作为业务数据库连接地址,再选择该业务数据库连接串配置中一个可用的数据库名称,组成一个jdbc连接查询最小单元;s2,通过微服务api接口查询步骤s1中创建的租户id、业务数据库连接串与sql配置,得到sql配置项列表并将sql配置项列表缓存在本地;当步骤s1中的租户id、业务数据库连接串、sql配置出现新增、修改、删除时,job任务将对应进行更新得到最新的最新sql配置项列表,当开启定时任务,每n分钟执行一次请求微服务api接口查询当前配置的所有启用状态的sql配置项列表,将缓存在本地的sql配置项列表与最新sql配置项列表进行对比更新;s3,job任务根据配置的cron时间表达式频率执行自定义sql语句或存储过程的同时查询业务数据库,通过sql执行结束时间减去sql执行开始时间,并计算执行sql耗时,根据执行sql是否异常,判断sql是否执行成功,若执行失败,则记录执行日志,并将执行日志存储至mysql数据库;s4,接收job任务发送的sql执行结果并将sql执行结果写入告警队列后存储至服务器;s5,根据写入告警队列的sql执行结果判断是否超过阈值,若超过则发送sql执行结果告警;s6,从告警队列中读取sql执行结果对象,根据告警队列中的sql执行结果告警对象中的sql配置项id,查询该sql配置项绑定的告警媒介列表,生成告警信息,依次发送到告
警媒介列表中的媒介,并将sql执行结果写入excel表格,其中每个sql执行结果作为一个页签,将excel文档压缩成zip文件作为邮件附件发送。
6.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s1中每个sql配置项包含一条主sql,同时可配置不超过10条附件sql。
7.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s1中,所述sql配置项包括数据库连接串地址、用户名、密码、可用数据库名称、启用/禁用状态、执行时间表达式、熔断次数、熔断时长、告警媒介、发送方式、邮件正文,所述业务数据库连接串地址支持mysql、oracle与sqlsever,所述jdbc连接查询最小单元包括数据库连接串地址、用户名、密码、可用数据库名称、sql语句或存储过程。
8.在本发明所述的基于java自定义sql监控告警实现的方法中,所述步骤s2还包括以下子步骤:s21,将sql配置项列表与最新sql配置项列表进行对比更新,对最新列表中不存在的配置项,从缓存中删除该配置项;s22,将sql配置项列表与最新sql配置项列表进行对比更新,对最新列表中存在,而缓存中不存在的配置项,在缓存中新增该配置项;s23,将sql配置项列表与最新sql配置项列表进行对比更新,当最新列表中更新时间大于缓存中的更新时间的配置项时缓存更新该配置项,更新完成后将缓存中的更新时间设置为当前时间;s24,将sql配置项列表与最新sql配置项列表进行对比更新,当最新列表中更新时间与缓存中的更新时间相同时缓存无变动。
9.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s3中sql语句中约定status字段作为判断告警依据,用户可以在sql语句中对任何表字段进行阈值比对,然后将是否告警体现在status字段,并设置自定义sql的告警阈值,当sql执行结果转换为list《 map《string,object》》对象存储缓存,遍历list《 map《string,object》》,如果map《string, object》存在status字段,且任意一行的status字段不为0,其中0表示为未超过阈值,1表示为超过阈值,2表示为超过阈值并且很严重,则告警字段warn赋值为1时,0表示为无告警,1表示为有告警,表示该次sql执行结果存在告警。
10.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s3中当业务数据库连接因账号密码错误等原因导致连接失败或者自定义sql语句语法错误等导致sql执行结果异常,则该job任务将被记录熔断,当达到步骤s1中sql配置的熔断次数或者耗时超过熔断时长,将停止该job任务,并更新sql配置的启用/禁用状态为被规则禁用。
11.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s3中将每次执行job任务生成一个uuid作为该sql配置项本次执行的执行id,当执行结束后请求微服务api接口,将主sql和附件sql执行结果以及对应的sql配置项id、执行id、是否告警warn字段、执行sql耗时、是否执行成功、执行日志、执行时间、租户id发送并存储至mysql数据库。
12.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s4中将主sql和附件sql执行结果分别存储存储至服务器,并从告警队列读取主sql和附件sql执行结果,将sql执行结果list《 map《string, object》》对象序列化为json数据格式生成txt文
件名,其中txt文件名称根据sql配置项id、执行id和附件sql的id拼接组合进行md5加密生成唯一编码作为txt文件名后将txt文件储存在微服务所在服务器,并按当前日期生成文件夹目录,并将文件路径、执行id、是否告警warn字段、执行sql耗时、是否执行成功、执行日志、执行时间、租户id等信息写入mysql数据库后存储在结果表,用户端通过调用微服务api接口可展示每个租户最新执行的sql结果,当选择某个sql执行结果可进行查看该sql配置项的历史执行结果。
13.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s5中根据是否告警warn字段和如何发送is_send两个字段,将需要发送告警的主sql执行结果对象写入告警队列;当warn=1时表示sql执行结果有告警并写入告警队列;当warn=0,且is_send=2时表示sql执行结果无告警,若其必须发送,则写入告警队列。
14.在本发明所述的基于java自定义sql监控告警实现的方法中,在所述步骤s6中告警媒介包括邮件、钉钉、ilink、短信消息,其中可根据业务需要自由组合配置邮箱、短信、钉钉、ilink,同时可添加媒介组,且媒介组管理也可自由组合邮箱、短信、钉钉、ilink。
15.本发明的基于java自定义sql监控告警实现的方法通过实现业务系统的自动化运维,对业务数据异常情况及时告警,减少人力投入,节约运维成本,同时能及时响应,防止故障影响扩大。
附图说明
16.图1是本发明基于java自定义sql监控告警实现的方法实施例的流程示意图。
具体实施方式
17.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
18.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
19.如图1所示,是本发明基于java自定义sql监控告警实现的方法实施例的流程示意图。提供一种基于java自定义sql监控告警实现的方法,包括以下步骤:在步骤s1中,用户端根据不同租户创建不同的项目,生成租户id,每个租户之间相互隔离。根据不同的项目创建一个或者多个业务数据库连接串配置,并通过jdbc连接业务数据库;创建一个或者多个sql配置项,并将创建的其中一个业务数据库连接串作为业务数据库连接地址,再选择该业务数据库连接串配置中一个可用的数据库名称,组成一个jdbc连接查询最小单元;其中租户信息、数据库连接串与sql配置均存储在mysql数据库表。
20.在步骤s2中,通过微服务api接口查询步骤s1中创建的租户id、业务数据库连接串
与sql配置,得到sql配置项列表并将sql配置项列表缓存在本地;当步骤s1中的租户id、业务数据库连接串、sql配置出现新增、修改、删除时,job任务将对应进行更新得到最新的最新sql配置项列表,当开启定时任务,每n分钟执行一次请求微服务api接口查询当前配置的所有启用状态的sql配置项列表,将缓存在本地的sql配置项列表与最新sql配置项列表进行对比更新;其中按jdbc连接查询最小单元启动一个job任务,若多个单元则启动多个quartz job任务。
21.在步骤s3中,job任务根据配置的cron时间表达式频率执行自定义sql语句或存储过程的同时查询业务数据库,通过sql执行结束时间减去sql执行开始时间,并计算执行sql耗时,根据执行sql是否异常,判断sql是否执行成功,若执行失败,则记录执行日志,并将执行日志存储至mysql数据库;解析cron时间表达式使job任务按照期望的间隔周期执行,例如:每天8:30执行一次:0 30 8 * *,每周一8:30执行一次:0 30 8
ꢀꢀ
* mon,每天8:00-18:00间隔30分钟执行一次:0 0/30 8-18 * * 。cron时间表达式具有很强的灵活性可自由配置间隔分钟、小时、日、周、月。
22.在步骤s4中,接收job任务发送的sql执行结果并将sql执行结果写入告警队列后存储至服务器;通过提供微服务api接口,接收job任务发送过来的sql执行结果,为避免并发量大导致接收异常,将sql执行结果写入队列,防止阻塞。
23.在步骤s5中,根据写入告警队列的sql执行结果判断是否超过阈值,若超过则发送sql执行结果告警;在步骤s6中,从告警队列中读取sql执行结果对象,根据告警队列中的sql执行结果告警对象中的sql配置项id,查询该sql配置项绑定的告警媒介列表,生成告警信息,依次发送到告警媒介列表中的媒介,并将sql执行结果写入excel表格,其中每个sql执行结果作为一个页签,将excel文档压缩成zip文件作为邮件附件发送。其中邮件、钉钉、ilink可共用自定义邮件正文内容作为告警信息一部分,短信由于长度限制,仅发送主要告警信息。告警发送完成后,更新告警结果表,记录发送成功媒介列表、发送失败媒介列表,或者未发送,作为审计依据。邮件附件最大不超过5m。其中ilink为自主开发的im软件,类似钉钉。
24.在一实施例中,在步骤s1中每个sql配置项包含一条主sql,同时可配置不超过10条附件sql。
25.在一实施例中,在步骤s1中,sql配置项包括数据库连接串地址、用户名、密码、可用数据库名称、启用/禁用状态、执行时间表达式、熔断次数、熔断时长、告警媒介、发送方式、邮件正文,业务数据库连接串地址支持mysql、oracle与sqlsever,jdbc连接查询最小单元包括数据库连接串地址、用户名、密码、可用数据库名称、sql语句或存储过程。其中发送方式包括全部发送、告警发送与不发送。
26.在一实施例中,步骤s2还包括以下子步骤:在步骤s21中,将sql配置项列表与最新sql配置项列表进行对比更新,对最新列表中不存在的配置项,从缓存中删除该配置项;在步骤s22中,将sql配置项列表与最新sql配置项列表进行对比更新,对最新列表中存在,而缓存中不存在的配置项,在缓存中新增该配置项;在步骤s23中,将sql配置项列表与最新sql配置项列表进行对比更新,当最新列表中更新时间大于缓存中的更新时间的配置项时缓存更新该配置项,更新完成后将缓存中的
更新时间设置为当前时间;在步骤s24中,将sql配置项列表与最新sql配置项列表进行对比更新,当最新列表中更新时间与缓存中的更新时间相同时缓存无变动。
27.在一实施例中,在步骤s3中sql语句中约定status字段作为判断告警依据,用户可以在sql语句中对任何表字段进行阈值比对,然后将是否告警体现在status字段,并设置自定义sql的告警阈值,当sql执行结果转换为list《 map《string,object》》对象存储缓存,遍历list《 map《string,object》》,如果map《string, object》存在status字段,且任意一行的status字段不为0,其中0表示为未超过阈值,1表示为超过阈值,2表示为超过阈值并且很严重,则告警字段warn赋值为1时,0表示为无告警,1表示为有告警,表示该次sql执行结果存在告警。
28.在一实施例中,在步骤s3中当业务数据库连接因账号密码错误等原因导致连接失败或者自定义sql语句语法错误等导致sql执行结果异常,则该job任务将被记录熔断,当达到步骤s1中sql配置的熔断次数或者耗时超过熔断时长,将停止该job任务,并更新sql配置的启用/禁用状态为被规则禁用。为保证job任务的健壮性,熔断次数默认值设置3,熔断次数配置最高不超过10次,执行失败超过10次后强制停止job任务并更新sql配置项为被规则禁用状态。
29.在一实施例中,在步骤s3中将每次执行job任务生成一个uuid作为该sql配置项本次执行的执行id,当执行结束后请求微服务api接口,将主sql和附件sql执行结果以及对应的sql配置项id、执行id、是否告警warn字段、执行sql耗时、是否执行成功、执行日志、执行时间、租户id发送并存储至mysql数据库。
30.在一实施例中,在步骤s4中将主sql和附件sql执行结果分别存储存储至服务器,并从告警队列读取主sql和附件sql执行结果,将sql执行结果list《 map《string, object》》对象序列化为json数据格式生成txt文件名,其中txt文件名称根据sql配置项id、执行id和附件sql的id拼接组合进行md5加密生成唯一编码作为txt文件名后将txt文件储存在微服务所在服务器,并按当前日期生成文件夹目录,并将文件路径、执行id、是否告警warn字段、执行sql耗时、是否执行成功、执行日志、执行时间、租户id等信息写入mysql数据库后存储在结果表,用户端通过调用微服务api接口可展示每个租户最新执行的sql结果,当选择某个sql执行结果可进行查看该sql配置项的历史执行结果。
31.在一实施例中,在步骤s5中根据是否告警warn字段和如何发送is_send两个字段,将需要发送告警的主sql执行结果对象写入告警队列;当warn=1时表示sql执行结果有告警并写入告警队列;当warn=0,且is_send=2时表示sql执行结果无告警,若其必须发送,则写入告警队列。目的是为了解决sql执行结果数据量太大的问题。
32.在一实施例中,在步骤s6中告警媒介包括邮件、钉钉、ilink、短信消息,其中可根据业务需要自由组合配置邮箱、短信、钉钉、ilink,同时可添加媒介组,且媒介组管理也可自由组合邮箱、短信、钉钉、ilink。
33.具体的,mysql数据库连接串地址样例为jdbc:mysql://127.0.0.1:3306/${dbname}servertimezone=asia/shanghai&useunicode=true,oracle数据库连接串地址样例为jdbc:oracle:thin:@127.0.0.1:1521:${dbname},sqlserver数据库连接串地址样例为jdbc:jtds:sqlserver://127.0.0.1:1433/${dbname}。且数据库连接串地址中dbname
通过配置的“可用数据库名称”进行选择。
34.通过设计excel表格为最新记录表t_sys_db_execresult和历史记录表t_sys_db_execresult_his,最新记录表存储每条配置主sql的最新执行记录,历史记录表存储主sql和附件sql所有的执行记录,历史记录设置保留天数,自动清理。自定义sql查询结果,序列化转json字符串写入txt文件,按日期创建文件夹,存放在monitor服务所在服务器,同样设置保留天数,自动清理。
35.通过主sql执行结果分析判断是否需要告警, 其中sql语句要求包含status 字段,其中,status=0表示正常,status=1表示异常,status=2表示严重问题,异常和严重状态属于告警。当需要告警发送邮件,主sql执行结果作为邮件正文且可自定义配置,同时将全部附件sql执行结果生成excel,作为邮件附件,一条附件sql结果对应一个excel页签。
36.当sql配置项为可配置不发送、告警发送或全部发送三种状态,当为不发送时不管sql执行结果是否有告警,均不发送。当为告警发送时当sql执行结果有告警时发送。当为全部发送时不管sql执行结果是否有告警,均发送,该状态可用于日报、周报或者月报提取的场景,定期反馈业务数据给全部告警媒介。
37.其中,告警媒介根据业务需要可以自由组合配置邮箱、短信、钉钉、ilink,同时可添加媒介组,方便运维人员业务交叉管理,媒介组管理同样可自由组合邮箱、短信、钉钉、ilink。其中需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
38.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如 rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
39.因此,以上所述,仅为本发明较佳的具体实施方式,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内,本发明的保护范围应该以权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献