夜莺-Nightingale
夜莺V7
项目介绍 功能概览
部署升级 部署升级
数据接入 数据接入
告警管理 告警管理
数据查看 数据查看
功能介绍 功能介绍
API FAQ
夜莺V6
项目介绍 架构介绍
快速开始 快速开始
黄埔营
安装部署 安装部署
升级
采集器 采集器
使用手册 使用手册
API API
数据库表结构 数据库表结构
FAQ FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵 第1章:天降奇兵
第2章:探索PromQL 第2章:探索PromQL
第3章:Prometheus告警处理 第3章:Prometheus告警处理
第4章:Exporter详解 第4章:Exporter详解
第5章:数据与可视化 第5章:数据与可视化
第6章:集群与高可用 第6章:集群与高可用
第7章:Prometheus服务发现 第7章:Prometheus服务发现
第8章:监控Kubernetes 第8章:监控Kubernetes
第9章:Prometheus Operator 第9章:Prometheus Operator
参考资料

自定义通知模板

自定义全局通知模板

夜莺已经内置了挺多通知媒介,每个通知媒介都对应有自己的通知模板,这些通知模板是可以自定义的,菜单入口:告警通知 - 通知模板。这些模板有些是 Markdown 格式,有些是 HTML 格式,修改的时候要注意。

  • mm: Mattermost 通知模板
  • telegram: Telegram 机器人模板
  • wecom: 企微机器人模板
  • dingtalk: 钉钉机器人模板
  • email: 邮件内容模板
  • feishu: 飞书机器人模板
  • feishucard: 飞书卡片模板
  • mailsubject: 邮件标题模板

这些模板都遵从 go template 语法(如果不懂请自行 Google),模板渲染的时候,夜莺会把告警事件作为模板变量传入,比如 {{.Severity}} 就是引用告警事件的严重级别,{{.RuleName}} 就是引用告警规则的标题。当然,还有哪些变量可以用呢,实际上 alert_cur_event 的所有属性都可以用。

自定义单个告警规则通知模板

需求:全局的通知模板中,有些字段特别长,比如 监控指标: {{.TagsJSON}},有的时候不想展示,想自定义一下。比如某个内存告警规则,只想展示 instance 标签,某个磁盘告警规则,只想展示 instance 和 device 标签。

从功能列表来看,开源版夜莺不支持针对告警规则颗粒度自定义通知模板。但实际上,可以通过一些小技巧来实现。下面以内存利用率告警规则为例,给大家演示一下整个流程。原本的告警事件详情如下:

20240227121711

里边有三个事件标签,企微通知如下:

20240227121759

标签太长了,不好看,其他字段倒是都合适,应该展示,下面我就来自定义一下这个事件标签的展示内容。

1.修改全局通知模板

我以企微通知为例,修改 wecom 的通知模板,改成如下内容:

**级别状态**: {{if .IsRecovered}}<font color="info">S{{.Severity}} Recovered</font>{{else}}<font color="warning">S{{.Severity}} Triggered</font>{{end}}   
**规则标题**: {{.RuleName}}{{if .RuleNote}}   
**备注**: {{.RuleNote}}{{end}}{{if .TargetIdent}}   
**监控对象**: {{.TargetIdent}}{{end}}   
{{- if ne .AnnotationsJSON.Note "1"}}
**监控指标**: {{.TagsJSON}}
{{- end}}
{{- if not .IsRecovered}}   
**触发时值**: {{.TriggerValue}}
{{- end}}   
{{if .IsRecovered}}**恢复时间**: {{timeformat .LastEvalTime}}{{else}}**首次触发时间**: {{timeformat .FirstTriggerTime}}{{end}}   
{{$time_duration := sub now.Unix .FirstTriggerTime }}{{if .IsRecovered}}{{$time_duration = sub .LastEvalTime .FirstTriggerTime }}{{end}}**距离首次告警**: {{humanizeDurationInterface $time_duration}}
**发送时间**: {{timestamp}}

最核心的改动是:

{{- if ne .AnnotationsJSON.Note "1"}}
**监控指标**: {{.TagsJSON}}
{{- end}}

这个意思是:只有当附加信息的 Note 字段不等于 1 的时候,才展示 TagsJSON 字段。这个 Note 字段是我自己定义的,后面会讲到。换句话说,如果自定义的 Note 字段为 1,就表示用户自定义了备注信息,就不需要展示 TagsJSON 字段了。

2.创建一个内存利用率告警规则

自定义告警规则,注意备注部分和自定义字段部分,告警规则的备注是可以引用事件变量的,比如 {{ $labels.ident }} 这样的格式。从上面的事件详情中可以看到机器的信息在 ident 标签中,所以我把这个标签引用到备注中,如下:

20240227122104

然后配置规则其他字段,在附加信息那里,增加一个 Note 字段,值设置为 1。

20240227131304

可以了,保存规则。稍等片刻,就能看到企微通知了:

20240227131504

后面哪个规则还想自定义标签展示内容,就在自定义字段那里增加一个 Note 字段,然后在备注里写自定义的内容即可。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat