实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警

这篇具有很好参考价值的文章主要介绍了实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警

作者 | sqlboy-yuzhenc

背景介绍

在实际应用中,我们经常需要将特定的任务通知给特定的人,虽然 Apache DolphinScheduler 在安全中心提供了告警组和告警实例,但是配置起来相对复杂,并且还需要在定时调度时指定告警组。通过这篇文章,你将学到一个简单的方法,无需任何配置,只需要在用户表(t_ds_user)表中增加字段钉钉名称(dignding_name),创建用户时指定用户的手机号码和维护对应的钉钉名称,就能轻松实现 Apache DolphinScheduler 任务失败时钉钉告警到指定的人。

安装插件plpython3u

psql etl -U postgres
create extension plpython3u

pip安装requests

cd /opt && wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install requests

创建发送钉钉的存储过程

  • plpython3u为不受信语言,所以只能被超级用户使用
sql
create or replace function tool.sp_send(
      message json
     ,webhook varchar 
     ,secret varchar 
)
    returns text
    language plpython3u
    security definer 
as $function$
import requests
import json
import time
import hmac
import hashlib
import base64
import urllib.parse
"""
/*
 * 作者 : v-yuzhenc
 * 功能 : 给钉钉发送一条消息
 * message : 需要发送的消息,json格式,详情参考https://open.dingtalk.com/document/robots/custom-robot-access
 * webhook : 钉钉机器人的webhook
 * secret : 钉钉机器人的secret
 * */
"""
v_timestamp = str(round(time.time() * 1000))
p_secret = secret
secret_enc = p_secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(v_timestamp, p_secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
v_sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

# 钉钉自定义机器人的webhook地址
p_webhook = webhook
webhook_url = p_webhook+"&timestamp="+v_timestamp+"&sign="+v_sign
# 要发送的消息内容
p_message = json.loads(message)
# 发送POST请求
response = requests.post(webhook_url, data=json.dumps(p_message), headers={"Content-Type": "application/json"})

# 打印响应结果
return response.text
$function$;

alter function tool.sp_send(json,varchar,varchar) owner to tool;
grant execute on function tool.sp_send(json,varchar,varchar) to public;

测试发送钉钉的存储过程

select sp_send('{
    "msgtype": "actionCard",
    "actionCard": {
        "title": "我 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", 
        "text": "![screenshot](https://img2023.cnblogs.com/other/2685289/202308/2685289-20230829152524866-1747807117.png) \n\n #### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", 
        "btnOrientation": "0", 
        "btns": [
            {
                "title": "内容不错", 
                "actionURL": "https://www.dingtalk.com/"
            }, 
            {
                "title": "不感兴趣", 
                "actionURL": "https://www.dingtalk.com/"
            }
        ]
    }
}'::json);

实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警

参考

自定义机器人安全设置 - 钉钉开放平台

自定义机器人接入 - 钉钉开放平台

t_ds_user增加字段

alter table t_ds_user add column dingding_name varchar(100);
--人为将海豚账号对应的钉钉用户名更新上去

编写触发器

CREATE OR REPLACE FUNCTION dp.tg_ds_udef_alert_ding()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
/*
 * 作者:v-yuzhenc
 * 功能:海豚调度工作流失败自动告警
 * */
declare
    i record;
    v_user varchar;
    v_mobile varchar;
    v_content text;
    v_message varchar;
begin
    if new.state in (4,5,6) then 
        for i in (
            select 
			     d.user_name
			    ,d.phone 
			    ,d.dingding_name
			    ,g.name project_name
			    ,e.name process_name
			    ,string_agg(distinct b.name||' '||to_char(b.end_time,'yyyy-mm-dd hh24:mi:ss'),'\r\n') task_name
			from t_ds_process_instance a 
			inner join t_ds_task_instance b 
			on (a.id = b.process_instance_id)
			inner join t_ds_task_definition c 
			on (b.task_code = c.code and b.task_definition_version = c."version")
			inner join t_ds_user d 
			on (c.user_id = d.id)
			inner join t_ds_process_definition e 
			on (a.process_definition_code = e.code and a.process_definition_version = e."version")
			inner join t_ds_project g 
            on (e.project_code = g.code)
			where c.task_type <> 'SUB_PROCESS'
			    and a.state = 6
			    and b.state = 6
			    and a.id = new.id
			group by d.user_name
				,d.phone 
				,d.dingding_name
				,g.name
				,e.name
        ) loop 
            v_mobile := i.phone;
            v_user := i.dingding_name;
            v_content := '海豚工作流执行失败,请尽快处理!\r\n项目名称:\r\n'||i.project_name||'\r\n工作流名称:\r\n'||i.process_name||'\r\n任务名称:\r\n'||i.task_name;
            v_message := $v_message${
    "at": {
        "atMobiles":[
            "$v_message$||v_mobile||$v_message$"
        ],
        "atUserIds":[
            "$v_message$||v_user||$v_message$"
        ],
        "isAtAll": false
    },
    "text": {
        "content":"$v_message$||v_content||$v_message$"
    },
    "msgtype":"text"
}$v_message$;
            --告警
            perform tool.sp_send(v_message::json);
        end loop;
    end if;
    return new;
end;
$function$
;

create trigger tg_state_ds_process_instance after update on t_ds_process_instance for each row execute procedure tg_ds_udef_alert_ding();

测试

实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警

本文转载自CSDN博主sqlboy-yuzhenc文章:https://blog.csdn.net/qq_33445829/article/details/131073349

本文由 白鲸开源 提供发布支持!文章来源地址https://www.toymoban.com/news/detail-679612.html

到了这里,关于实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (91)Verilog实现D触发器

    1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog实现D触发器 5)结语 FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路

    2024年02月04日
    浏览(37)
  • 使用D触发器实现8分频

    最近闲来无聊玩了一阵子FPGA,其中遇到一个经典的问题,就是用verilog实现8分频器。发现自己并不是很熟练,所以就以blog的形式记录一下,同时也分享给大家。 所需要的前提条件:由verilog语言基础,知道D触发器的逻辑 要知道,几乎所有的编程语言都由模块化的思想包含在

    2024年02月11日
    浏览(49)
  • FPGA开发——VHDL实现各类触发器

    小编最近在学习时序电路的VHDL设计,通过此文对触发器和VHDL相关知识进行总结,以便日后进行复习、查阅。本文首先回顾了各类触发器的基本知识包括特性方程、状态图等,最后通过VHDL来实现各类触发器。 在实际的数字系统中往往包含大量的存储单元,而且经常要求他们在

    2024年02月04日
    浏览(50)
  • Quartus 实现 D 触发器及时序仿真

    目录 Quartus 实现 D 触发器及时序仿真 一.Quartus 输入原理图及时序仿真 1.创建工程 2.创建方框文件 3.编译原理图文件 4.创建 vwm 格式波形文件 5.时序波形仿真 二.用 Verilog 语言实现 D 触发器及时序仿真 1.编写Verilog 文件 2.查看生成的电路图 3.利用 Verilog 语言编写测试代码实现时序

    2024年02月04日
    浏览(46)
  • 数据库系统原理及MySQL应用教程实验八触发器创建与管理

    1.理解触发器的概念与类型。 2.理解触发器的功能及工作原理。 3.掌握创建、更改、删除触发器的方法。 4.掌握利用触发器维护数据完整性的方法。 1.验证性实验:某同学定义产品信息product表,并对其触发器创建与管理 2.设计性试验:某同学定义产品信息product表,并对其

    2024年02月04日
    浏览(51)
  • 例化4个JK触发器实现4位计数

            闲来无事打个嵌入式校赛玩玩,旨在用FPGA实现4位计数器,其功能包括上计、下计、置位、复位、暂停。         具体实现大概要先从JK触发器的功能表入手:              JK触发器在J、K两个引脚接的输入信号不同时可以分别代替SR锁存器、T触发器,这也是

    2024年02月03日
    浏览(38)
  • Multisim实现D触发器模拟异步计数器

    这里用到的元器件有: DIgital power (VCC)数字电源 DIGITAL-CLOCK 数字时钟 逻辑分析仪 (XLA) ground 数字地 SPST 单刀单掷开关 74HC74D_4V D触发器芯片 DCD_HEX 数码管(带译码器四位二进制输入) PROBE 电位探测灯 PB_DPST 弹簧式触发开关 SPDT 单刀双掷开关 先来说说D触发器的原理: 74HC74D

    2024年02月10日
    浏览(63)
  • 脉冲触发的触发器(主从触发器)

    脉冲触发的动作特点: (1)触发器的翻转分两步动作。 第一步:当CLK以高电平为有效信号时,在CLK= 1期间主触发器接收输入端(S、R或J、K)的信号,被置成相应的状态,而从触发器不动。 第二步: CLK下降沿到来时从触发器按照主触发器的状态翻转,所以Q、Q’端状态的改变发生在

    2024年02月04日
    浏览(53)
  • 数据库触发器简介——修改数据的触发器、删除数据的触发器

    修改数据的触发器 更新数据 思考下面这个触发器会触发几次?几条数据就触发几次。

    2024年02月15日
    浏览(51)
  • 请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

    请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型 给本帖投票 56211打赏收藏  分享  转发到动态举报  写回复 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增 11 条回复  切换为时间正序 请发表友善的回复… 发表回复 microsoft_fly 2008-11-18 还

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包