Skip to main content
Mezmo(原 LogDNA)的 Webhook Alert 集成在日志视图(View)匹配到设定的行数时调用 Webhook,请求体由您自己填写的模板渲染。本集成把同一个 View 的匹配同步为 Flashduty 上的一条告警:同一 View、同一查询条件的多次匹配会合并进同一条告警。
Mezmo 官方文档明确 autoresolve(自动恢复)“只适用于 PagerDuty”,Webhook 通道没有恢复事件。因此这条告警不会自动恢复,只能等超时自动关闭或手动关闭。请务必完成下方”开启超时自动关闭”这一步。

在 Flashduty On-call


您可通过以下两种方式获取集成推送地址,任选其一即可。

使用专属集成

  1. 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
  2. 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
  3. 选择 Mezmo,点击 保存
  4. 打开生成的集成卡片,复制 推送地址

使用共享集成

  1. 进入 Flashduty 控制台,选择 集成中心 → 告警事件
  2. 选择 Mezmo,填写集成名称
  3. 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
  4. 点击 保存,复制生成的 推送地址

在 Mezmo 中配置


1

创建或编辑一个 View

在 Mezmo 里创建一个基于查询条件的 View(例如查询 level:error),或者打开一个已有的 View。如果打算给多个 View 复用同一份 Webhook 配置,也可以先创建一个 Preset Alert 模板 再关联到各个 View。
2

添加 Webhook Alert

  1. 打开 View 的 Alert 弹窗,选择 Webhook
  2. 设置匹配行数和观察周期,例如”30 秒内匹配到 10 行”
  3. Method 选择 POST
  4. URL 粘贴 Flashduty 集成的完整推送地址,地址中需包含 integration_key
  5. Headers 中添加一条:Content-Type: application/json
3

替换默认 Body

Mezmo 会预先填好一份默认 Body,请清空后粘贴下面这份模板。字段全部来自 Mezmo 官方文档列出的 Body Tokens:
保存前点击编辑框下方的 Validate JSON 按钮,确认模板渲染后仍是合法 JSON。
模板中的字段名(view_name、query……)和大小写必须与上面完全一致,Flashduty 按这些字段名解析请求体;花括号内的 Mezmo token({{ name }} 等)不要改名。不要额外加入 {{ lines }} 或 {{ line_objects }}:前者是未转义的多行原文,可能包含引号或换行,插入到 JSON 字符串里可能得到非法 JSON 而被 Flashduty 拒收;后者官方文档说明会插入一个数组,不能作为字符串字段的值。
4

开启超时自动关闭

Mezmo 的 Webhook Alert 没有恢复事件(Update Alert API 中 autoresolve 字段的说明是”This property only applies to PagerDuty.”,即只对 PagerDuty 通道生效)。同一 View、同一查询条件的多次匹配会合并进同一条告警,但这条告警不会自己恢复。请在接收这些告警的协作空间中开启 超时自动关闭,建议超时时长 12 小时,计时起点选择 故障触发。告警关闭后,若问题仍未解决,View 在下一个观察周期再次匹配时会开出一条新告警。
5

验证

点击 Alert 编辑面板顶部的 Test 链接,确认 Flashduty 收到一条 200 响应,并会在 Flashduty 中开出一条告警(Mezmo 用同一份模板渲染测试数据,Flashduty 无法把它和真实告警区分开,需要手动关闭或等待超时自动关闭)。再让 View 的查询条件真正匹配到日志,确认 Flashduty 收到对应的真实告警。

Alert Key


Mezmo 的 Webhook Alert 请求体里没有告警 ID、View ID 或去重键——Body Tokens 列表 里的 12 个 token(name、matches、lines、level、url、query、app、host、tag、line、line_objects、first_line_object)都不是标识符。View 名称和它运行的查询条件是这个检查项在多次匹配之间不变的身份——官方文档把 query 定义为”the query of the View to which this alert is attached”(该告警所关联 View 的查询条件)——因此 Flashduty 用 MD5(view_name, query) 作为 Alert Key:同一个 View、同一条查询条件的多次匹配会合并进同一条告警(首行匹配日志、匹配行数、级别等字段变化不影响这个 Key);不同的 View,或者同一 View 但查询条件被改过,会各自开出自己的告警。

告警等级


Mezmo 官方文档对 {{ level }} 的说明是”Severity level (info, warn, error, etc)“(首行匹配日志的日志级别),并未给出完整枚举。Flashduty 按下表映射,未出现在表中的值(包括空值,即日志没有解析出级别)按 Warning 处理:

标签


告警标题为 View 名称;描述内容优先展示首行匹配日志的原文({{ line }}),并附上查询条件。

常见问题


不会。只要 View 名称和查询条件不变,Flashduty 用它们算出的 Alert Key 也不变,反复匹配会合并进同一条告警(更新匹配行数、级别等字段,不会另开一条)。但这条告警不会自动恢复,超时自动关闭之后,如果问题还在,下一次匹配会开出一条新告警——这也是本集成必须开启超时自动关闭的原因。
Mezmo 官方文档里 autoresolve 字段只适用于 PagerDuty 通道,Webhook 通道没有对应机制,也没有文档说明的恢复 token。请开启协作空间的超时自动关闭,或在 Flashduty 中手动关闭。
{{ lines }} 是全部匹配行的原始文本,可能包含换行或双引号;Mezmo 官方文档没有说明它在插入 JSON 字符串时会做转义。如果直接把 "lines": "{{ lines }}" 写进模板,遇到包含引号或换行的日志就可能渲染出非法 JSON,导致 Flashduty 收到该次推送时报错、丢弃这次匹配。上面的模板只使用 {{ line }}(首行匹配日志的原文),信息量已经足够定位问题;如果确实需要完整的多行内容,请自行在 Mezmo 的编辑框里用 Validate JSON 反复测试确认转义正确后再加入。
确认推送地址完整、包含 integration_key,且推送地址不是内网 IP(Mezmo 不允许 Webhook 指向 192.168.x.x、10.x.x.x、172.16.x.x–172.31.x.x 或跳转到这些地址)。
更多字段含义请参阅 Webhook Alert Integration 和 Update Alert API。