跳转至

查看「消息发送」函数日志

2024-09-05

本文档主要介绍观测云中消息发送任务中产生的函数日志

1. 简介

与其他 DataFlux Func 中执行的函数一样,当配置了函数日志上报至观测云后,消息发送任务的日志同样可以方便地在观测云平台查询。

有关如何配置函数日志上报到观测云,以及上报的各字段说明,请参考 手册 / 部署和维护 / 上报自观测数据

2. 查询日志

关键字段:

字段 类型 说明
source str 固定为 DFF_task_record_func
func_id str 函数 ID
格式为:message_desk__api.*
workspace_uuid str 所属观测云工作空间 UUID
格式为:wksp_xxxxx
monitor_checker_ids str(JSON) 涉及监控器 ID 列表
仅限监控告警消息
格式为:[ "rul_xxxxx", "rul_yyyyy" ]
event_ids str(JSON) 涉及事件 ID 列表
仅限监控告警消息
格式为:[ "event-xxxxx", "event-yyyyy" ]
message_type enum 消息任务类型,详细见下文 X. 消息类型
exception_type str 错误类型
如:微信消息发送失败 "WechatSendingFailure"
exception str 具体错误
如:WechatSendingFailure('Status Code: 200. Response: {"errcode":40058, ... <略> }

如果需要查看某个工作空间的所有消息发送任务的执行日志,使用以下条件查询:

Text Only
1
source:DFF_task_record_func workspace_uuid:wksp_xxxxx func_id:message_desk__api.*

如果需要查看特定类型消息的日志,使用 message_type 过滤:

Text Only
1
source:DFF_task_record_func func_id:message_desk__api.* message_type:mail

如果需要查看特定事件的消息日志,使用 event_ids 过滤:

Text Only
1
source:DFF_task_record_func func_id:message_desk__api.* event_ids:*event-xxxxx*

由其他系统直接发送消息

除了「监控器告警」,其他系统也存在发送消息的情况,并会调用不同的 Func 函数进行消息发送,具体请咨询调用方使用何种方式发送

比较典型的,如 Studio 发送一般性的通知邮件等,可能会直接调用 MessageDesk 脚本集下的函数

对应日志的查询方法如下:

直接发送邮件
1
func_id:message_desk__api.send_mail

延迟发送消息

对于某些需要延迟发送的消息(如静默前通知邮件),可能会调用「观测云支持」下的消息任务函数,并指定发送时间

延迟发送消息的日志时间

需要注意的是,延迟发送消息分 3 个阶段

  1. 设置任务阶段:如在 00:00 时,用户在 UI 操作,并产生了一个在 05:00 发送消息的任务(注意:此日志时间为 00:00 而不是 05:00)

  2. 延迟消息出列阶段:当时间到达 05:00 时,系统内部会从任务池中取出上述 1. 中的任务,并启动异步发送任务

  3. 实际发送阶段:消息实际发送

「设置任务阶段」的用户 UI 操作

一般来说,延迟触发的任务来自用户的 UI 操作

具体而言,如:用户在 00:00:00 添加了一个 00:30:00 开始生效的静默规则,并指定生效前 5 分钟发送通知

那么,用户的这个「添加静默规则」的动作,就叫做「UI 操作」,时间为用户进行操作的时间 00:00:00

而延迟任务发送时间则为「00:30:00 - 5 分钟」,即 00:25:00

此外,由于 Func 只提供基础功能,而具体业务功能。具体处理(如:什么时候调用了什么函数)请咨询 Studio 侧研发

对应日志的查询方法如下:

根据日志,检查是否正确配置了延迟任务

查询时间为 UI 操作时间

添加 / 替换消息任务
1
func_id:guance__api.add_message_task

根据日志,检查延迟任务是否正确出列

查询时间为 计划发送时间

延迟任务出列日志
1
func_id:guance__api_internal.flush_delayed_message

根据「延迟消息出列阶段」中实际调用的函数 ID 查询对应日志,检查发送结果

查询时间为 计划发送时间

消息实际发送日志
1
func_id:message_desk__api.xxxxx

如涉及取消已经设置的延迟发送任务,可根据以下过滤条件搜索:

删除消息任务
1
func_id:guance__api.delete_message_task

3. 分段解读

每一行日志遵循如下格式:

时间 与上一行日志
时间差(毫秒)
任务开始至本行日志
总时间(毫秒)
所在模块 内容
[07-30 17:04:45] [+706ms] [706ms] 【函数】 调用函数:message_desk__feishu.send
具体示例
1
[07-30 17:04:45] [+706ms] [706ms] 【函数】 调用函数:message_desk__feishu.send

发送请求

记录具体消息发送的请求内容,包括地址、请求体

示例
1
2
3
4
[07-30 17:04:45] [+0ms] [707ms] 发送请求:
[07-30 17:04:45] [+0ms] [707ms] --> 请求地址:https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx
[07-30 17:04:45] [+0ms] [707ms] --> 请求内容:<请求体,略>
[07-30 17:04:45] [+0ms] [707ms] --> 超时时间:5

请求结果

记录具体消息发送的响应内容,包括状态码,响应体

如遇到发送失败,可从此处开始排查

示例
1
2
3
[07-30 17:04:46] [+388ms] [1095ms] 发送结果:
[07-30 17:04:46] [+0ms] [1095ms] --> 响应代码:200
[07-30 17:04:46] [+0ms] [1095ms] --> 响应内容:{"StatusCode":0,"StatusMessage":"success","code":0,"data":{},"msg":"success"}

4. 完整示例

每次迭代后日志内容可能有变化

由于存在新增、修改功能,或发现以往日志输出需要完善的地方

因此,每次迭代之后,日志具体内容细节可能多少都会有变动

以下是添加了解释的完整示例

在下方日志中:

# 开头的内容为说明解释,不是日志原文

同时额外加入了空行,方便阅读,日志原文中没有空行

其他内容为日志原文

日志解读
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 本次任务执行的函数 ID 及其参数列表
[07-30 17:04:45] [+706ms] [706ms] 【函数】 调用函数:message_desk__feishu.send
[07-30 17:04:45] [+0ms] [706ms] 【函数】 --> 参数:webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx"
[07-30 17:04:45] [+0ms] [707ms] 【函数】 --> 参数:body = <请求体,略>
[07-30 17:04:45] [+0ms] [707ms] 【函数】 --> 参数:secret = null
[07-30 17:04:45] [+0ms] [707ms] 【函数】 --> 参数:_override_configs = null

# 发送请求
[07-30 17:04:45] [+0ms] [707ms] 发送请求:
[07-30 17:04:45] [+0ms] [707ms] --> 请求地址:https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx
[07-30 17:04:45] [+0ms] [707ms] --> 请求内容:<请求体,略>
[07-30 17:04:45] [+0ms] [707ms] --> 超时时间:5

# 发送结果
[07-30 17:04:46] [+388ms] [1095ms] 发送结果:
[07-30 17:04:46] [+0ms] [1095ms] --> 响应代码:200
[07-30 17:04:46] [+0ms] [1095ms] --> 响应内容:{"StatusCode":0,"StatusMessage":"success","code":0,"data":{},"msg":"success"}
[07-30 17:04:46] [+0ms] [1095ms] 【消息记录】 消息发送成功

# 记录 / 清除通知对象失败时间
[07-30 17:04:46] [+1ms] [1096ms] 【消息记录】 清除通知对象失败时间(notify_xxxxx)

X. 消息类型

字段 message_type 值与消息类型对照表如下:

message_type 消息类型
"mail" 邮件
"dingTalkRobot" 钉钉机器人
"feishuRobot" 飞书机器人
"wechatRobot" 企业微信机器人
"HTTPRequest" HTTP 请求
"jiguang" 极光推送
"sms" 短信
"slackIncomingWebhook" Slack Incoming Webhook
"teamsWorkflowWebhook" Teams Workflow Webhook