【监控】夜莺nightingle-v8.0.0基础应用-钉钉飞书群告警配置

30 阅读5分钟

一、配置概念

核心组件

1.1. 用户与团队

  • 用户:系统使用者
  • 团队:用户组,用于权限管理和告警接收
  • 关系:团队可添加成员,支持用户和团队级别的权限管理

1.2 数据源

  • 定义:监控指标数据来源
  • 类型:
    1. PrometheusLike:对接夜莺VictoriaMetrics
    2. Elasticsearch:对接系统日志存储
    3. 其他数据源

1.3 消息模板

  • 定义:告警消息的 body 请求体模板,决定告警群中的消息格式
  • 语法:支持 Go template 语法
  • 注意:语法错误会导致无法发送告警

1.4 通知媒介

  • 定义:告警发送渠道
  • 类型:
    1. 默认媒介:飞书、钉钉、Email 等
    2. 自定义媒介:可自定义 URL、请求头、参数、body 等

1.5 通知规则

  • 定义:关联消息模板和通知媒介的配置
  • 包含:
    1. 消息模板选择
    2. 通知媒介选择
    3. 媒介变量配置(如 token)
    4. 接收团队/人员
    5. 告警级别

1.6 告警规则

  • 定义:告警条件和触发规则
  • 包含:告警条件、触发阈值、评估频率等

1.7 订阅规则

  • 定义:批量指定告警规则的通知规则
  • 功能:按数据源、业务组、标签等筛选条件,批量关联通知规则

二、配置步骤

步骤 1:添加用户、团队和成员(可选)

操作路径:

  • 人员组织 → 用户管理 → 创建用户
  • 人员组织 → 团队管理 → 左上角团队列表 + 号(创建团队)
  • 人员组织 → 团队管理 → 右侧添加成员(添加团队成员)

用途:

  • 支持用户和团队级别的权限管理
  • 支持通过邮箱/飞书/钉钉等联系方式进行告警

步骤 2:添加数据源

2.1 对接 VictoriaMetrics(PrometheusLike)

操作:

  • 配置数据源类型为 PrometheusLike
  • 填写 VictoriaMetrics 的连接信息
2.2 对接 Elasticsearch

操作:

  • 配置数据源类型为 Elasticsearch
  • 填写 Elasticsearch 的连接信息

步骤 3:添加消息模板

告警消息的 body 请求体模板,决定告警群中的消息格式

操作路径: 通知 → 消息模板 → 新增

语法要求:

  • 支持 Go template 语法
  • 语法错误会导致无法发送告警

常见错误:

  • 引用错误变量名
  • 使用不支持函数
  • if 语法不能使用 {{- if}}{{- end}} 格式,需删除 - 横杠(飞书消息模板中常见)

可用字段:

基本信息字段

字段名类型描述模板引用方式
Idint64告警事件 ID{{$event.Id}}
Catestring告警类别,如"prometheus"{{$event.Cate}}
Clusterstring所属数据源名称{{$event.Cluster}}
DatasourceIdint64数据源 ID{{$event.DatasourceId}}
GroupIdint64业务组 ID{{$event.GroupId}}
GroupNamestring业务组名称{{$event.GroupName}}
Hashstring告警事件hash{{$event.Hash}}
RuleIdint64规则 ID{{$event.RuleId}}
RuleNamestring规则名称{{$event.RuleName}}
RuleNotestring规则备注{{$event.RuleNote}}
Severityint告警级别(1-3){{$event.Severity}}
PromQlstring告警查询语句{{$event.PromQl}}
PromForDurationint持续时长(秒){{$event.PromForDuration}}
PromEvalIntervalint评估间隔(秒){{$event.PromEvalInterval}}
Statusint告警状态{{$event.Status}}
SubRuleIdint64订阅规则ID{{$event.SubRuleId}}
NotifyRuleIDs[]int64通知规则ID列表{{$event.NotifyRuleIDs}}
RuleHashstring规则哈希值{{$event.RuleHash}}

触发相关字段

字段名类型描述模板引用方式
TriggerTimeint64触发时间戳{{$event.TriggerTime}}
TriggerValuestring触发值{{$event.TriggerValue}}
FirstTriggerTimeint64首次触发时间{{$event.FirstTriggerTime}}
NotifyCurNumberint当前通知次数{{$event.NotifyCurNumber}}
LastEvalTimeint64最近评估时间{{$event.LastEvalTime}}
LastSentTimeint64最近发送时间{{$event.LastSentTime}}

标签和注释

字段名类型描述模板引用方式
TagsJSON[]string标签数组{{$event.TagsJSON}}
TagsMapmap[string]string标签键值对映射{{$event.TagsMap}}
AnnotationsJSONmap[string]string注释键值对映射{{$event.AnnotationsJSON}}

机器相关字段

字段名类型描述模板引用方式
TargetIdentstring目标标识{{$event.TargetIdent}}
TargetNotestring目标备注{{$event.TargetNote}}

通知相关字段

字段名类型描述模板引用方式
NotifyRecoveredint是否通知恢复{{$event.NotifyRecovered}}
NotifyChannelsJSON[]string通知渠道列表{{$event.NotifyChannelsJSON}}
NotifyGroupsJSON[]string通知组列表{{$event.NotifyGroupsJSON}}
NotifyRuleIDs[]int64通知规则ID列表{{$event.NotifyRuleIDs}}

回调与扩展信息

字段名类型描述模板引用方式
CallbacksJSON[]string回调URL列表{{$event.CallbacksJSON}}
ExtraConfiginterface{}额外配置信息{{$event.ExtraConfig}}
ExtraInfo[]string额外信息列表{{$event.ExtraInfo}}
ExtraInfoMap[]map[string]string额外信息映射{{$event.ExtraInfoMap}}

触发值相关

字段名类型描述模板引用方式
TriggerValuesstring触发值(原始格式){{$event.TriggerValues}}
IsRecoveredbool是否已恢复{{$event.IsRecovered}}

模板示例:

示例 1:飞书模板

注:飞书暂不支持 markdown 格式,仅支持原文格式展示。 ``

{{if $event.IsRecovered}}【恢复】💚{{$event.RuleName}}{{else}}【告警】💔{{$event.RuleName}}{{end}}
---{{$time_duration := sub now.Unix $event.FirstTriggerTime }}{{if $event.IsRecovered}}{{$time_duration = sub $event.LastEvalTime $event.FirstTriggerTime }}{{end}}
告警级别: {{$event.Severity}}级
{{if $event.IsRecovered}}恢复时间:{{timeformat $event.LastEvalTime}}{{else}}触发时间: {{timeformat $event.TriggerTime}}
触发时值: {{$event.TriggerValue}}
持续时长: {{humanizeDurationInterface $time_duration}}{{end}}
发送时间: {{timestamp}}{{if $event.RuleNote}}
规则备注: {{$event.RuleNote}}{{end}}   
标签事件: 
{{- range $key, $val := $event.TagsMap}}{{if ne $key "__name__" }}
    {{$key}}: {{$val}}{{end}}{{- end}}{{$domain := "https://127.0.0.1:17000" }}
附加信息:{{$domain}}/alert-his-events/{{$event.Id}}
{{- range $key, $val := $event.AnnotationsJSON}}
{{$key}}: {{$val}}
{{- end}}

示例 2:钉钉模板(markdown 格式)

#### {{if $event.IsRecovered}}<font color="#008800">💚{{$event.RuleName}}</font>{{else}}<font color="#FF0000">💔{{$event.RuleName}}</font>{{end}}
---
{{$time_duration := sub now.Unix $event.FirstTriggerTime }}{{if $event.IsRecovered}}{{$time_duration = sub $event.LastEvalTime $event.FirstTriggerTime }}{{end}}
- **告警级别**: {{$event.Severity}}级
{{- if $event.RuleNote}}
    - **规则备注**: {{$event.RuleNote}}
{{- end}}
{{- if not $event.IsRecovered}}
- **当次触发时值**: {{$event.TriggerValue}}
- **当次触发时间**: {{timeformat $event.TriggerTime}}
- **告警持续时长**: {{humanizeDurationInterface $time_duration}}
{{- else}}
{{- if $event.AnnotationsJSON.recovery_value}}
- **恢复时值**: {{formatDecimal $event.AnnotationsJSON.recovery_value 4}}
{{- end}}
- **恢复时间**: {{timeformat $event.LastEvalTime}}
- **告警持续时长**: {{humanizeDurationInterface $time_duration}}
{{- end}}
- **告警事件标签**:
{{- range $key, $val := $event.TagsMap}}
{{- if ne $key "rulename" }}
    - {{$key}}: {{$val}}
{{- end}}
{{- end}}
{{if $event.AnnotationsJSON}}
- **附加信息**:
{{- range $key, $val := $event.AnnotationsJSON}}
    - {{$key}}: {{$val}}
{{- end}}
{{end}}
{{$domain := "http://127.0.0.1:17000" }}
{{$mutelink := print $domain "/alert-mutes/add?busiGroup=" $event.GroupId "&cate=" $event.Cate "&datasource_ids=" $event.DatasourceId "&prod=" $event.RuleProd}}
{{- range $key, $value := $event.TagsMap}}
{{- $encodedValue := $value | urlquery }}
{{- $mutelink = print $mutelink "&tags=" $key "%3D" $encodedValue}}
{{- end}}
[事件详情]({{$domain}}/alert-his-events/{{$event.Id}}) | [屏蔽1小时]({{$mutelink}}) | [查看曲线]({{$domain}}/metric/explorer?data_source_id={{$event.DatasourceId}}&data_source_name=prometheus&mode=graph&prom_ql={{$event.PromQl|urlquery}})
{{if $event.IsRecovered}}Recovered{{else}}Triggered{{end}}: {{$event.RuleName}} {{$event.TagsJSON}}

步骤 4:添加通知媒介

告警发送渠道

默认媒介:

  • Feishu(飞书)
  • Email(邮件)
  • Dingtalk(钉钉)
  • 其他常用媒介

说明:

  • 系统提供默认媒介,一般可直接使用
  • 为适配自定义风格,建议新建自定义媒介

配置项(以钉钉和飞书为例):

  • 自定义参数变量:仅配置变量名,在创建通知规则时赋值
  • 请求 URL:配置请求地址,可使用上述变量名引用通知规则中的变量值
  • 请求方法:GET/POST
  • 请求头参数:HTTP 请求头参数,可使用上述变量名引用通知规则中的变量值
  • 请求体:POST 格式的请求体,可使用上述变量名引用通知规则中的变量值

步骤 5:配置通知规则

指定消息模板和通知媒介,提供给告警规则引用。

功能:

  • 关联消息模板和通知媒介
  • 配置通知媒介使用的参数(如 token),用于区分告警机器人
  • 指定接收团队/人员和告警级别

用途:

  • 提供给告警规则引用

image.png

步骤 6:配置告警规则

功能:

  • 按业务需求设置告警条件和通知规则

筛选条件:

  • 数据源
  • 告警条件
  • 检查频率
  • 持续时长
  • 告警时间段
  • 告警级别

告警指向: 通知规则

image.png

步骤 7:配置订阅规则

适用场景:

  • 告警规则较多时,避免在每条告警规则中重复配置通知规则

功能:

  • 批量指定告警规则的通知规则
  • 按数据源、业务组、标签等筛选条件,批量关联通知规则

image.png

三、主体配置流程

用户/团队管理 → 数据源 → 消息模板 → 通知媒介 → 通知规则 → 告警规则 → 订阅规则

四、注意事项

  1. 消息模板语法:使用 Go template,注意语法正确性,避免使用 {{- if}} 格式
  2. 飞书模板:不支持 markdown,仅支持原文格式
  3. 通知媒介:建议创建自定义媒介以适配个性化需求
  4. 订阅规则:告警规则较多时,使用订阅规则可批量管理通知规则