模板意在定义监控校验规则,方便后期复用。
1 前提条件
- 已在概览页面购买大数据分析、湖仓一体、DataOps 敏捷研发或分布式数据自治解决方案。
- 已购买 EMR、LAS 或 EMR_SERVERLESS_SPARK 引擎服务,才可使用相应引擎功能。
- EMR 引擎上传 Spark Jar 包后才能正常使用。
若没有上传,当选择相应 EMR 引擎时,系统会弹窗提示您上传,操作如下:
- 在引擎下拉列表中,选择 EMR 引擎和对应的实例,弹出作业程序包未上传提示窗口。
- 单击确定按钮上传程序包,等待几秒钟,待系统弹出上传成功的提示,则表示上传成功。
说明
- 具备 EMR 引擎的根目录读写权限的账号才能执行上传操作,主账号默认具备该权限。
- 在数据监控、数据探查或数据对比页面选择 EMR 引擎实例后,系统都会进行 Spark Jar 的扫描,可通过任一入口进行上传,上传成功一次即可。
2 创建规则
- 登录 DataLeap 控制台。
- 选择数据质量 > 数据监控 > 离线数据监控 > 监控对象,直接进入监控对象的模板规则页面。
- 在页面右上角的项目下拉列表中,选择要管理的项目。
- 在引擎下拉列表中,选择要配置的引擎和对应的实例。
- 创建监控对象。
- 单击 +Hive监控对象按钮,在弹出的窗口中,设置监控对象信息。
- 单击确定按钮,对象添加成功并显示在监控对象列表中。
- 创建监控规则。
- 单击某个监控对象的新建规则按钮,进入该对象的新建监控规则页面。
- 设置规则信息后,单击完成或者完成并试跑按钮,完成规则创建。
- 单击完成按钮,完成规则创建。
- 单击完成并试跑按钮,在弹出的窗口中选择试跑时间后,单击确定按钮,完成规则创建并直接试跑调试。
创建模板规则相关参数说明如下表所示。其中名称前带 * 的参数为必填参数,名称前未带 * 的参数为可选参数。
参数 | 说明 |
---|
*引擎 | 要创建规则的数据库存储引擎,支持 EMR、LAS、EMR_SERVERLESS_SPARK 三种引擎,下拉可选。 - LAS:直接选择,实例默认为 default。
- EMR:需从下拉列表中选择一个已创建的实例。
- EMR_SERVERLESS_SPARK:需从下拉列表中选择一个实例,默认为 default。
说明 EMR支持快捷模式和安全模式两类集群,集群访问模式的相关配置说明请参见绑定 EMR 集群。 - 快捷模式:选择监控对象时不会进行鉴权,可选择监控集群下所有数据表。
- 安全模式:选择监控对象时会进行数据鉴权,若无该表的读取权限,则无法创建相应的监控规则。
|
新建监控对象 |
*库表名 | 创建监控对象的库、表名称,支持按表录入和按库录入两种设置方式。 - 按表录入:输入库名.表名,单击添加按钮,添加一张表。可分次添加多个库表。
- 按库录入:在库名下拉列表中选择数据库后,在表名下拉列表中选择需要监控的数据表,单击添加按钮,添加一张表。选择库表时,支持模糊搜索,并可分次添加多个库表。
|
新建监控规则 |
*监控对象 | 显示要创建规则的监控对象,不可编辑。
该参数在新建监控对象时配置。 |
*选择分区 | 根据表的现有分区,自动识别,可编辑。
若没有可用分区,可通过添加分区按钮添加。 |
规则配置 |
*规则类型 | 支持表行数、重复值、空值、异常值、表字段等模板类型,下拉可选。 - 表行数:计算该分区下的表行数,通常用于校验任务完成后产出的分区数据为空的异常情况,或者根据自己需求检验表行数的一些波动情况。表行数的计算定义:count(*)
- 重复值:选择1或者1+个字段,计算重复值占比,通常用于联合主键重复值校验,计算方式为count()-count(distinct key)/count()。
- 空值:特殊的异常值监控,以NULL、空字符串或自定义的空值类型(比如unknown)检测某字段或者1+个字段的空值占比。
- 异常值:根据提供的正常值或异常值列表/表达式,计算异常值的个数或占比。
- 表字段:选择某个字段,再选择一种字段的计算方式,如sum(money),再监控这个指标。
|
*规则名称 | 监控规则名称,自动填充,可编辑。 |
*监控字段 | 要监控的数据表字段名称,下拉可选。
当规则类型选择重复值、空值、异常值或表字段时,需配置该参数。 |
*空值类型 | 支持 NULL、空字符串和自定义三种选项。
当规则类型选择空值时,需配置该参数。 |
*匹配逻辑 | 支持正常值列表和异常值列表两个选项。
当规则类型选择异常值时,需配置该参数。 |
*匹配方式 | 支持枚举值和正则表达式两个选项。
当规则类型选择异常值时,需配置该参数。 |
*匹配内容 | - 当匹配方式选择枚举值时,需输入枚举值进行匹配。其中,填入hive_none代表为空值,填入hive_empty代表为空字符串。
- 当匹配方式选择正则表达式时,需输入正则表达式进行匹配。例如,匹配手机号示例:^1[34578]\d{9}$
当规则类型选择异常值时,需配置该参数。 |
*计算方式 | 监控某字段所采取的计算方式,支持sum、count、avg 和 count distinct 四个选项。
当规则类型选择表字段时,需配置该参数。 |
*报警条件 | 是指规则发出报警时,指标需要满足的条件。当监控指标被计算出来 后,如果满足报警条件,就会发出报警。
报警条件支持数值类型、波动率、动态阈值、重复值占比、空值占比等的报警,多个报警条件之间的关系默认为且,可改为或。 - 数值:即定义的计算指标本身,如sum(money)、count(*)等,该指标会直接跟设定的阈值做对比,判断是否报警。例如:
- 监控规则:表行数数值超过2000发出报警。
- 报警判断:假设监控检测出的表行数数值为2500,与设定的阈值(2000)做对比,发现超过阈值,于是发出报警。
- 波动率(单位为%):根据当次监控规则计算出的指标结果,与某段时间内或某个时间点的该指标做比值,计算出波动率后,再与设定的阈值进行比较判断。例如:
- 监控规则:表行数相比7天前波动率超过20%发出报警。
- 监控流程:算出当天的表行数数值后(假设为2500)后,会与7天前的表行数(假设为2000)做计算, 波动率算出来为上升25%,于是判定结果为报警。
目前支持的波动率类型与计算方式有: - 相比前一周期波动率:(当次检测值 - 前一周期检测值)/前一周期检测值
- 相比1天前波动率:(当次检测值 - 1天前检测值)/1天前检测值
- 相比7天前波动率:(当次检测值 - 7天前检测值)/7天前检测值
- 相比7天内均值波动率:(当次检测值 - 7天内检测值的均值)/7天内检测值的均值
- 相比30天内均值波动率:(当次检测值 - 30天内检测值的均值)/30天内检测值的均值
- 动态阈值:根据历史分区的数据来预测下一个分区的行数范围,如果新分区的行数不在这个区间范围内会发出报警。动态阈值适用场景说明请参见动态阈值使用说明。
说明 - 动态阈值与其他报警条件不能同时配置,即若报警条件选择动态阈值,则无法再新增其他类型的报警条件。
- 根据规则类型的不同,对应的报警条件选项也不同,以页面实际选项为准。
|
执行方式 |
*执行方式 | 监控规则的执行方式,支持关联任务、定时调度和暂不设置三种方式。 - 关联任务:按照关联任务的调度时间执行。
- 定时调度:自行设置监控规则的执行时间。
- 暂不设置:不自动调度执行,可按需手动调度。
|
*任务名称 | 要关联任务的名称,可通过任务名称关键词或ID进行搜索选择。
当执行方式选择关联任务时,需设置该参数。 |
*规则强弱 | 提供强、弱两个配置选项。 - 当选择强时,需设置熔断方式。任务执行完成之后会进入强规则运行阶段,由熔断方式决定下游任务运行情况。
- 如果是弱规则,任务会继续运行,如果失败仅发生报警通知,不会阻塞下游任务运行。
当执行方式选择关联任务时,需设置该参数。 注意 - 由于动态阈值存在误报风险,当报警条件选择动态阈值时,请谨慎选择强规则。
- 当弱规则转换成强规则时,报警形式将默认调整为紧急。
|
*熔断方式 | 如果是强规则,可选择以下两种熔断方式: - 在规则运行完成之前,实例将一直处于运行中状态:是指若触发强规则告警,则实例状态置为失败,阻塞下游任务运行;若正常完成则置为成功。
- 若规则运行超过 X 分钟仍未结束,直接置实例为成功:是指规则运行超过设定时间,会触发告警通知,下游仍会继续运行,但可能存在数据质量污染风险,需要及时关注监控结果。超时时间可自行设定,取值范围为0~200。
|
*执行频率 | 任务监控规则执行频率,提供分钟级、小时级、天级三个选项。
当执行方式选择定时调度时,需设置该参数。 |
*执行时间 | 根据执行频率,设置具体的执行时间。
当执行方式选择定时调度时,需设置该参数。 |
*运行队列 | 规则使用的运行队列,支持使用默认队列、自行指定队列两个选项。 - 使用默认队列:使用系统默认的引擎队列,无需手动选择。
- 自行指定队列:自行选择要使用的引擎队列,下拉可选当前项目下已绑定的队列。若未申请队列,请前往对应控制台申请。
当引擎选择 LAS 或 EMR_SERVERLESS_SPARK 时,需设置该参数。 |
报警设置 |
*报警渠道 | 支持邮箱+站内信、短信、电话、Webhook 和飞书的告警方式,支持多选。 说明 - 当选择短信报警时,默认会发送邮箱+站内信。
- 配置相应的飞书报警机器人后,才会显示飞书选项。报警机器人由您自行创建并配置,相关操作说明请参见告警机器人配置。
- 当选择电话报警时,会默认选中飞书,若支持飞书渠道,则会发送飞书消息。
|
*hookUrl | Webhook 请求地址,以 http 或 https 开头。
从下拉列表中选择 http 或 https,填写 Webhook URL 地址。欲了解详细的配置说明,请参见 Webhook 使用说明。
当报警渠道选择 Webhook 时,需设置该参数。 说明 - 设置 Webhook 后,通知消息将主动推送至对应 hookUrl 中。
- 目前已支持飞书、钉钉和企业微信接收 Webhook 消息,填写飞书、钉钉或者企业微信机器人的 hookurl 后,通知消息将推送至对应的群中。设置Webhook机器人时,需满足以下要求:
- 微信:无要求,直接创建相应的机器人后,复制生成的 WebhookUrl 即可。
- 钉钉:创建机器人后,需勾选其安全设置项下的自定义关键词选项,并设置一个关键词为数据质量产品。
- 飞书:创建机器人后,需勾选其安全设置项下的自定义关键词选项,并设置两个关键词 DataLeap 和 dataleap。
|
*报警对象 | 接收报警的用户、飞书群或值班计划接收人。 - 当报警渠道选择邮箱+站内信、短信或 Webhook 时,需选择接收报警的用户或值班计划。
- 用户:输入用户账号关键词后,在下拉列表中选择,支持设置多个。
- 值班计划:输入值班计划名称的关键词后,在下拉列表中选择。设置后,报警消息将发送至值班计划中的接收人。
- 当报警渠道选择电话或飞书时,需设置接收报警消息的用户、值班计划或您所加入的飞书群。
- 用户:报警消息将发送至用户名对应的飞书中。
输入用户账号关键词后,在下拉列表中选择,支持设置多个。 - 飞书群:报警消息将发送至飞书群ID对应的飞书群中。
可通过飞书开放平台的开发工具模块,查看要输入的飞书群ID。获取ID的相关说明可通过下拉列表中的获取群ID查看。 - 值班计划:报警消息将发送至值班计划中接收人的飞书中。
输入值班计划名称的关键词后,在下拉列表中选择。
说明 - 将配置好的数据质量报警机器人加入飞书群后,才可发送消息至相应的飞书群。
- 可通过查看值班计划按钮,查看值班计划列表及值班设置是否符合预期,并支持添加新值班计划,相关操作说明请参见值班管理。
|
*报警形式 | 支持普通和紧急两种形式。
当报警渠道选择飞书时,才需设置该参数。 |
*报警发送 | 报警发送的次数。 - 发送次数 X:可按需配置发送的次数,默认 1 次。
- 无限制,直至手动ACK解除:无次数限制,若取消发送,需手动ACK(Acknowledgement)来解除报警。
- 报警频率
若不及时ACK,系统会从首次报警起至次日(天级监控至次日00:00点;小时级监控至次日对应小时)按照固定频率发起规则校验,若不通过则触发报警。 - 报警ACK
ACK表示您已知晓这个报警信息,并会采取相应行动处理,不希望再次收到报警。ACK某个监控后,在设置的时间段内不会重复报警,最长23小时59分钟,过期后将再次发起重复检测。
综上,建议及时ACK或进行任务/数据处理!
说明 - 当报警渠道选择飞书时,才支持无限制,直至手动ACK解除选项。收到报警消息后,可在飞书端执行报警ACK操作。
- 当报警形式选择紧急时,自动选中无限制,直至手动ACK解除,不可编辑。
|
*发送间隔 | 报警发送的间隔时间,默认5分钟,可编辑。 |
*报警免打扰 | 可选择是否开启报警免打扰。
当选择开启时,可按需设置免打扰的时间段。 |
高级设置 |
重试条件 | 运行失败 |
运行参数 | 按需配置 SQL 语句前的运行参数,如“set 参数名1=取值;”。 |
过滤条件 | where之后的条件语句,语法逻辑跟HSQL一致,无需输入Where, 如 type='xxx'。 |
自定义报警 | 自定义报警时间,支持按需设置北京或 UTC 时间,下拉可选。 |
3 管理规则
对已创建监控规则的监控对象,可进行相应的管理操作,步骤如下:
- 登录 DataLeap 控制台。
- 选择数据质量 > 数据监控 > 离线数据监控 > 监控对象,直接进入监控对象的模板规则页面。
- 在页面右上角的项目下拉列表中,选择要管理的项目。
- 可执行以下操作:
- 设置搜索信息,搜索符合条件的监控对象。
- 将鼠标悬停在列表中某个监控对象所在行最新报警条数上,会显示该监控的最新报警信息,单击某个报警信息的查看按钮,在结果详情页面,可以查看该规则报警的详细信息并执行以下操作:
- 单击查看规则按钮,可以查看该规则的详情信息。
- 单击运行日志按钮,可以查看该规则的监控运行日志。
- 单击 ... > 执行记录按钮,可以查看检测执行记录。
- 单击 ... > 查看SQL按钮,可以查看该规则检测当日的SQL执行语句。
- 单击 ... > 重跑按钮,二次确认后,可以重跑该次监控规则。
- 单击列表中某个监控对象所在行的 ... > 删除对象按钮,二次确认后,可删除该对象及其下所有规则。
- 单击列表中某个监控对象所在行的 ... > 添加分区按钮,在弹出的窗口中,设置分区信息,可以为该对象添加新的分区。
- 单击某个对象分区操作列的新建规则按钮,在新建规则页面中,可按需增加一条监控规则。
- 单击某个对象分区操作列的修改表达式按钮,在弹出的窗口中,修改分区表达式信息。
- 单击某条规则名称操作列的查看SQL 按钮,可以查看规则的SQL语句。
- 单击某条规则名称操作列的编辑按钮,在编辑规则页面中,可以修改其规则信息。
- 单击某条规则名称操作列的 ... > 查看按钮,在规则详情页面,可以查看规则配置和试跑记录,还可以复制规则、试跑、重跑已有记录等。
- 单击某条规则名称操作列的 ... > 试跑按钮,在弹出的窗口中,设置试跑时间,可以开启新的试跑。
- 单击某条规则名称操作列的 ... > 开启/关闭按钮,在弹出的确认对话框中,单击确定按钮,可以开启/关闭该规则。
- 单击某条规则名称操作列的 ... > 删除按钮,在弹出的确认对话框中,单击确定按钮,可以删除该规则。
- 单击某条规则名称操作列的 ... > 分享链接按钮,可以复制相应对象的链接。
- 单击某条规则名称操作列的 ... > 复制按钮,在复制规则页面,可以编辑已复制的规则信息。
- 单击某条规则名称操作列的 ... > 查看7天结果按钮,跳转到运行结果页面,查看该规则截止到操作当天的7天监控结果。
- 单击某条规则名称操作列的 ... > 转让owner 按钮,在弹出的窗口中,可以选择将规则转让给新的owner。
- 勾选一条或多条规则后,单击对应的按钮,执行批量操作。
- 批量开启/关闭
- 批量试跑
- 批量删除
- 批量修改报警
- 批量转让owner
- 批量修改规则强弱
4 后续操作
规则运行后,您可到运行结果页面查看该规则的运行结果,查看报警情况,查找并分析问题。管理规则运行结果的相关操作说明请参见管理运行结果。
附录A:规则说明
A.1 动态阈值使用说明
创建模板规则过程中,当规则类型选择表行数时,可以配置动态阈值报警。
动态阈值可以根据历史分区的数据来预测下一个分区的行数范围,如果新分区的行数不在这个区间范围内会发出报警。
分析发现,表行数的数据分布主要有以下几种分布形态:
分布 | 单调不减(A) | 整体上升,偶尔下降(B) | 固定不变(C) | 变动频率小(D) | 其他 |
---|
图示例 | | | | | |
动态阈值在上述A、B、C、D四种分布上效果更佳。因此,开启动态阈值报警前,建议先查看一下历史表行数的数据走势,以判断该报警条件是否适用。
A.2 Webhook 使用说明
创建监控规则过程中,当您选择 Webhook 报警方式时,需注册 Webhook URL,后续报警会发送到注册的 URL。您可以根据 URL 的请求,制定后续的问题处理流程。
A.2.1 WebHook 配置
- 从报警方式下拉列表中,选择 Webhook。
- 配置 WebHook:从下拉列表中选择 http 或 https 后,填写 hookUrl。
URL 地址示例如下:volc_quality_test.volcwebhook.xxx/xx/webhook
A.2.2 hookUrl 验证
输入 hookUrl 后,单击显示的验证按钮进行验证。
验证时,会给 hookUrl 发送带 challenge 的请求,challenge 为随机整数。接到请求后需要将 challenge 原样返回,才可验证通过。验证示例如下:
验证的 Request body
{
"source": null
"region": null
"type": null
"rule_name": null
"callback_url": null
"target_type": null
"target": null
"content": null
"event_time": "2020-03-01 00:00:00", // 报警时间,消息通知时间
"owners": null
"challenge": 1230201 // 随机整数
}
Response body 示例
{
"status": 0, //状态码,0
"data": {
"challenge": 1230201 // 传递原来的数值
}
}
A.2.3 Webhook 请求
配置 URL 告警时会给 URL 地址发送请求,具体样例如下:
Request body 示例
{
"source": "quality", // 源系统的中文名称
"region": "cn", // 源系统的部署环境
"type": 1, // 报警/消息:枚举值:1、报警 2、消息
"rule_name": "xxx_rule", // 源系统中产生事件的规则名称
"callback_url": "url_to_rule", // 源系统中产生事件的规则回调地址URL
"target_type": "table", // 区分描述对象的大类,比如:任务、数据库、表
"target": "test_tb", // 描述具体的事件对象,一般信息包含:对象名称及具体名称值
"content": "alarm content", // 描述发生事件的具体内容,即为:报警内容 或 通知内容
"event_time": "2020-03-01 00:00:00", // 报警时间,消息通知时间
"owners": "test,test2" // 此次事件的直接负责人
"challenge": null
}
Response body 示例
{
"status": 0, //状态码,0
"data": null
}
A.2.4 网络要求
要确保消息服务能够访问 hookUrl 的网络,对 hookUrl 的 IP/域名网络说明如下:
- 若 IP/域名位于公网或公共服务区,则可以访问。
- 若 IP/域名位于售卖区私网,则需要注册 shuttle server 后,通过 shuttle 转发才可访问。
说明
需要提供服务 vpc id、IP、port,联系租户管理员注册 shuttle server。