一、配置概念
核心组件
1.1. 用户与团队
- 用户:系统使用者
- 团队:用户组,用于权限管理和告警接收
- 关系:团队可添加成员,支持用户和团队级别的权限管理
1.2 数据源
- 定义:监控指标数据来源
- 类型:
- PrometheusLike:对接夜莺VictoriaMetrics
- Elasticsearch:对接系统日志存储
- 其他数据源
1.3 消息模板
- 定义:告警消息的 body 请求体模板,决定告警群中的消息格式
- 语法:支持 Go template 语法
- 注意:语法错误会导致无法发送告警
1.4 通知媒介
- 定义:告警发送渠道
- 类型:
- 默认媒介:飞书、钉钉、Email 等
- 自定义媒介:可自定义 URL、请求头、参数、body 等
1.5 通知规则
- 定义:关联消息模板和通知媒介的配置
- 包含:
- 消息模板选择
- 通知媒介选择
- 媒介变量配置(如 token)
- 接收团队/人员
- 告警级别
1.6 告警规则
- 定义:告警条件和触发规则
- 包含:告警条件、触发阈值、评估频率等
1.7 订阅规则
- 定义:批量指定告警规则的通知规则
- 功能:按数据源、业务组、标签等筛选条件,批量关联通知规则
二、配置步骤
步骤 1:添加用户、团队和成员(可选)
操作路径:
- 人员组织 → 用户管理 → 创建用户
- 人员组织 → 团队管理 → 左上角团队列表 + 号(创建团队)
- 人员组织 → 团队管理 → 右侧添加成员(添加团队成员)
用途:
- 支持用户和团队级别的权限管理
- 支持通过邮箱/飞书/钉钉等联系方式进行告警
步骤 2:添加数据源
2.1 对接 VictoriaMetrics(PrometheusLike)
操作:
- 配置数据源类型为 PrometheusLike
- 填写 VictoriaMetrics 的连接信息
2.2 对接 Elasticsearch
操作:
- 配置数据源类型为 Elasticsearch
- 填写 Elasticsearch 的连接信息
步骤 3:添加消息模板
告警消息的 body 请求体模板,决定告警群中的消息格式
操作路径: 通知 → 消息模板 → 新增
语法要求:
- 支持 Go template 语法
- 语法错误会导致无法发送告警
常见错误:
- 引用错误变量名
- 使用不支持函数
- if 语法不能使用 {{- if}}{{- end}} 格式,需删除 - 横杠(飞书消息模板中常见)
可用字段:
基本信息字段
| 字段名 | 类型 | 描述 | 模板引用方式 |
|---|---|---|---|
| Id | int64 | 告警事件 ID | {{$event.Id}} |
| Cate | string | 告警类别,如"prometheus" | {{$event.Cate}} |
| Cluster | string | 所属数据源名称 | {{$event.Cluster}} |
| DatasourceId | int64 | 数据源 ID | {{$event.DatasourceId}} |
| GroupId | int64 | 业务组 ID | {{$event.GroupId}} |
| GroupName | string | 业务组名称 | {{$event.GroupName}} |
| Hash | string | 告警事件hash | {{$event.Hash}} |
| RuleId | int64 | 规则 ID | {{$event.RuleId}} |
| RuleName | string | 规则名称 | {{$event.RuleName}} |
| RuleNote | string | 规则备注 | {{$event.RuleNote}} |
| Severity | int | 告警级别(1-3) | {{$event.Severity}} |
| PromQl | string | 告警查询语句 | {{$event.PromQl}} |
| PromForDuration | int | 持续时长(秒) | {{$event.PromForDuration}} |
| PromEvalInterval | int | 评估间隔(秒) | {{$event.PromEvalInterval}} |
| Status | int | 告警状态 | {{$event.Status}} |
| SubRuleId | int64 | 订阅规则ID | {{$event.SubRuleId}} |
| NotifyRuleIDs | []int64 | 通知规则ID列表 | {{$event.NotifyRuleIDs}} |
| RuleHash | string | 规则哈希值 | {{$event.RuleHash}} |
触发相关字段
| 字段名 | 类型 | 描述 | 模板引用方式 |
|---|---|---|---|
| TriggerTime | int64 | 触发时间戳 | {{$event.TriggerTime}} |
| TriggerValue | string | 触发值 | {{$event.TriggerValue}} |
| FirstTriggerTime | int64 | 首次触发时间 | {{$event.FirstTriggerTime}} |
| NotifyCurNumber | int | 当前通知次数 | {{$event.NotifyCurNumber}} |
| LastEvalTime | int64 | 最近评估时间 | {{$event.LastEvalTime}} |
| LastSentTime | int64 | 最近发送时间 | {{$event.LastSentTime}} |
标签和注释
| 字段名 | 类型 | 描述 | 模板引用方式 |
|---|---|---|---|
| TagsJSON | []string | 标签数组 | {{$event.TagsJSON}} |
| TagsMap | map[string]string | 标签键值对映射 | {{$event.TagsMap}} |
| AnnotationsJSON | map[string]string | 注释键值对映射 | {{$event.AnnotationsJSON}} |
机器相关字段
| 字段名 | 类型 | 描述 | 模板引用方式 |
|---|---|---|---|
| TargetIdent | string | 目标标识 | {{$event.TargetIdent}} |
| TargetNote | string | 目标备注 | {{$event.TargetNote}} |
通知相关字段
| 字段名 | 类型 | 描述 | 模板引用方式 |
|---|---|---|---|
| NotifyRecovered | int | 是否通知恢复 | {{$event.NotifyRecovered}} |
| NotifyChannelsJSON | []string | 通知渠道列表 | {{$event.NotifyChannelsJSON}} |
| NotifyGroupsJSON | []string | 通知组列表 | {{$event.NotifyGroupsJSON}} |
| NotifyRuleIDs | []int64 | 通知规则ID列表 | {{$event.NotifyRuleIDs}} |
回调与扩展信息
| 字段名 | 类型 | 描述 | 模板引用方式 |
|---|---|---|---|
| CallbacksJSON | []string | 回调URL列表 | {{$event.CallbacksJSON}} |
| ExtraConfig | interface{} | 额外配置信息 | {{$event.ExtraConfig}} |
| ExtraInfo | []string | 额外信息列表 | {{$event.ExtraInfo}} |
| ExtraInfoMap | []map[string]string | 额外信息映射 | {{$event.ExtraInfoMap}} |
触发值相关
| 字段名 | 类型 | 描述 | 模板引用方式 |
|---|---|---|---|
| TriggerValues | string | 触发值(原始格式) | {{$event.TriggerValues}} |
| IsRecovered | bool | 是否已恢复 | {{$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),用于区分告警机器人
- 指定接收团队/人员和告警级别
用途:
- 提供给告警规则引用
步骤 6:配置告警规则
功能:
- 按业务需求设置告警条件和通知规则
筛选条件:
- 数据源
- 告警条件
- 检查频率
- 持续时长
- 告警时间段
- 告警级别
告警指向: 通知规则
步骤 7:配置订阅规则
适用场景:
- 告警规则较多时,避免在每条告警规则中重复配置通知规则
功能:
- 批量指定告警规则的通知规则
- 按数据源、业务组、标签等筛选条件,批量关联通知规则
三、主体配置流程
用户/团队管理 → 数据源 → 消息模板 → 通知媒介 → 通知规则 → 告警规则 → 订阅规则
四、注意事项
- 消息模板语法:使用 Go template,注意语法正确性,避免使用 {{- if}} 格式
- 飞书模板:不支持 markdown,仅支持原文格式
- 通知媒介:建议创建自定义媒介以适配个性化需求
- 订阅规则:告警规则较多时,使用订阅规则可批量管理通知规则