夜莺-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
参考资料

告警格式

告警事件的消息通知格式,是由模板控制的,模板文件在 etc/template 下:

  • dingtalk.tpl 钉钉的消息模板
  • feishu.tpl 飞书的消息模板
  • wecom.tpl 企业微信的消息模板
  • subject.tpl 邮件标题模板
  • mailbody.tpl 邮件内容模板

这些模板文件都遵从 go template 语法,模板中可以引用变量,有哪些变量可以引用呢?可以参考 AlertCurEvent 结构,这个结构的各个字段都可以被引用。

需求:如何自定义展示标签

告警事件中一般会有多个标签,模板文件中这个写法 {{.TagsJSON}} 可以按照数组的方式展示所有的标签。对于Kubernetes体系的监控数据,有的时候标签会非常非常多,看起来很费劲,有些朋友就会想,我是否可以自定义,只展示部分标签呢?

答案当然是可以的。TagsJSON 是所有标签的数组形式,TagsMap是所有标签的map形式,我们可以使用TagsMap来方便的获取特定的标签值,比如我这里修改企微的模板文件,不展示所有的标签:

**级别状态**: {{if .IsRecovered}}<font color="info">S{{.Severity}} Recovered</font>{{else}}<font color="warning">S{{.Severity}} Triggered</font>{{end}}
**规则标题**: {{.RuleName}}{{if .RuleNote}}
**规则备注**: {{.RuleNote}}{{end}}
**监控指标**: {{$metric := index .TagsMap "__name__"}}{{if eq "disk_used_percent" $metric}}机器:{{index .TagsMap "ident"}} 分区:{{index .TagsMap "path"}}{{else}}{{.TagsJSON}}{{end}}
{{if .IsRecovered}}**恢复时间**:{{timeformat .LastEvalTime}}{{else}}**触发时间**: {{timeformat .TriggerTime}}
**触发时值**: {{.TriggerValue}}{{end}}
**发送时间**: {{timestamp}}

注意上面监控指标那一行,先从TagsMap中拿到 __name__ 对应的标签值,就是 $metric,然后判断 $metric 是否是磁盘利用率,如果是就只展示ident标签的内容和path标签的内容,如果不是,就还是按照老样子,把TagsJSON全部展示出来。

但是,这种方式每次都要修改模板文件,太麻烦了。实际上,告警规则的备注也是支持模板语法的,我们可以利用这个特性做自定义。

使用模板语法自定义规则备注

这里的思路是:我们利用模板语法自定义规则备注,在规则备注里加一个特殊的前缀,在tpl文件里做判断,如果发现有这个前缀,就不展示TagsJSON,如果没有这个前缀,就还是展示TagsJSON。

配置告警规则时,规则备注配置成如下:

; ident={{$labels.ident}} path={{$labels.path}}

加了一个分号做前缀。然后wecom.tpl如下定义:

**级别状态**: {{if .IsRecovered}}<font color="info">S{{.Severity}} Recovered</font>{{else}}<font color="warning">S{{.Severity}} Triggered</font>{{end}}
**规则标题**: {{.RuleName}}{{if .RuleNote}}
**规则备注**: {{.RuleNote}}{{end}}{{$iscustom := match "^;" .RuleNote}}{{if not $iscustom}}
**监控指标**: {{.TagsJSON}}{{end}}
{{if .IsRecovered}}**恢复时间**:{{timeformat .LastEvalTime}}{{else}}**触发时间**: {{timeformat .TriggerTime}}
**触发时值**: {{.TriggerValue}}{{end}}
**发送时间**: {{timestamp}}

上面逻辑是,判断RuleNote的内容,如果以分号开头(用正则匹配),表示这是特殊前缀,此时就不展示TagsJSON了,如果不是这个前缀,就展示TagsJSON。

注意

以上效果的达成,需要夜莺后端版本在 5.9.6 以上。

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