夜莺监控如何对接飞书、飞书卡片发送告警

news/2025/3/17 10:42:17/文章来源:https://www.cnblogs.com/ulricqin/p/18776355
  • 新版通知规则的介绍文章:夜莺监控巨大革新:抽象出通知规则,增强告警通知的灵活性
  • 新版通知规则对接钉钉:夜莺监控 v8.0 新版通知规则 | 对接钉钉告警
  • 新版通知规则对接企微:夜莺监控 v8.0 新版通知规则 | 对接企微告警

本文对背景信息不做额外描述了,大家一定要先看看上面的文章,原理类似。本文直接讲解夜莺监控的通知规则如何对接飞书告警。

开源夜莺和飞书的对接支持 text 和飞书卡片两种方式,不支持飞书应用。FlashDuty 和飞书应用的对接非常丝滑,感兴趣的小伙伴可以试试 FlashDuty。

通知规则

通知规则中,可以同时对接多个媒介,上例中我同时对接了普通飞书 text 消息和卡片消息,复用了一个相同的机器人 Token。理论上这样一来,每次发告警的时候会同时发两条消息,一个是 text 格式,另一个是卡片格式。

消息模板

找到 feishu 和 feishucard 两个消息模板,修改其中的 domain 变量:

{{$domain := "http://10.211.55.3:17000" }} 

把 domain 变量改成你自己的夜莺的访问地址即可。这是为了在告警通知中,可以点击「事件详情、屏蔽 1 小时、查询曲线」等按钮。

最后的效果

通知媒介不用动,保持默认即可工作。最终效果如下:

上面有4条消息,先是发了两个告警消息,后面又有两个恢复消息。对于飞书卡片类型,告警消息和恢复消息的卡片颜色有区别,更容易区分。

v8.0.0-beta7 这个版本还不是特别完善,我测试发现两个问题:

  • text 类型的消息中,屏蔽一小时那个按钮,没有把事件的相关字段带到屏蔽规则中,应该是 & 符号的转义问题,后面的版本完善一下。
  • 卡片消息模板中缺少 {{$event.TagsJSON}},这个是告警事件的标签信息,自行添加即可。我这里也测试了一下添加之后的效果,把 feishucard 模板改成如下内容。
{{ if $event.IsRecovered }}
{{- if ne $event.Cate "host"}}
**告警集群:** {{$event.Cluster}}{{end}}   
**级别状态:** S{{$event.Severity}} Recovered   
**告警名称:** {{$event.RuleName}}   
**告警详情:** {{$event.TagsJSON}}   
**恢复时间:** {{timeformat $event.LastEvalTime}}   
**告警描述:** **服务已恢复**   
{{- else }}
{{- if ne $event.Cate "host"}}   
**告警集群:** {{$event.Cluster}}{{end}}   
**级别状态:** S{{$event.Severity}} Triggered   
**告警名称:** {{$event.RuleName}} 
**告警详情:** {{$event.TagsJSON}}
**触发时间:** {{timeformat $event.TriggerTime}}   
**发送时间:** {{timestamp}}   
**触发时值:** {{$event.TriggerValue}}   
{{if $event.RuleNote }}**告警描述:** **{{$event.RuleNote}}**{{end}}   
{{- end -}}
{{$domain := "http://10.211.55.3:17000" }}   
[事件详情]({{$domain}}/alert-his-events/{{$event.Id}})|[屏蔽1小时]({{$domain}}/alert-mutes/add?busiGroup={{$event.GroupId}}&cate={{$event.Cate}}&datasource_ids={{$event.DatasourceId}}&prod={{$event.RuleProd}}{{range $key, $value := $event.TagsMap}}&tags={{$key}}%3D{{$value}}{{end}})|[查看曲线]({{$domain}}/metric/explorer?data_source_id={{$event.DatasourceId}}&data_source_name=prometheus&mode=graph&prom_ql={{$event.PromQl|escape}})

上面就是添加了 **告警详情:** {{$event.TagsJSON}} 部分,最终生成的告警事件如下:

这里可以看到告警名称和告警详情字段中的 rulename 重复了,如果你不想重复展示,也可以继续优化这个模板,把 **告警详情:** {{$event.TagsJSON}} 改成如下内容:

**告警详情:** [{{range $key, $value := $event.TagsMap}}{{if ne $key "rulename"}}{{$key}}={{$value}} {{end}}{{end}}]

最终,feishucard 的消息模板变成:

{{ if $event.IsRecovered }}
{{- if ne $event.Cate "host"}}
**告警集群:** {{$event.Cluster}}{{end}}   
**级别状态:** S{{$event.Severity}} Recovered   
**告警名称:** {{$event.RuleName}}   
**告警详情:** [{{range $key, $value := $event.TagsMap}}{{if ne $key "rulename"}}{{$key}}={{$value}} {{end}}{{end}}]  
**恢复时间:** {{timeformat $event.LastEvalTime}}   
**告警描述:** **服务已恢复**   
{{- else }}
{{- if ne $event.Cate "host"}}   
**告警集群:** {{$event.Cluster}}{{end}}   
**级别状态:** S{{$event.Severity}} Triggered   
**告警名称:** {{$event.RuleName}} 
**告警详情:** [{{range $key, $value := $event.TagsMap}}{{if ne $key "rulename"}}{{$key}}={{$value}} {{end}}{{end}}]
**触发时间:** {{timeformat $event.TriggerTime}}   
**发送时间:** {{timestamp}}   
**触发时值:** {{$event.TriggerValue}}   
{{if $event.RuleNote }}**告警描述:** **{{$event.RuleNote}}**{{end}}   
{{- end -}}
{{$domain := "http://10.211.55.3:17000" }}   
[事件详情]({{$domain}}/alert-his-events/{{$event.Id}})|[屏蔽1小时]({{$domain}}/alert-mutes/add?busiGroup={{$event.GroupId}}&cate={{$event.Cate}}&datasource_ids={{$event.DatasourceId}}&prod={{$event.RuleProd}}{{range $key, $value := $event.TagsMap}}&tags={{$key}}%3D{{$value}}{{end}})|[查看曲线]({{$domain}}/metric/explorer?data_source_id={{$event.DatasourceId}}&data_source_name=prometheus&mode=graph&prom_ql={{$event.PromQl|escape}})

哦了,优先使用飞书卡片方式来对接飞书告警吧,样式好看,也没有那个 & 符号的转义问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900277.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络攻防实验三

1.实验内容 (1)动手实践tcpdump 使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程进行嗅探,回答问题:你在访问www.tianya.cn网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什么? (2)动手实践Wireshark 使用Wireshark开源软件对在本机上以TELNET方式…

Debian:apt-get命令汇总

apt-get命令 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行(常见的 10 个基于 Debian 的 Linux 发行版)都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。语法 apt-get [OPTION] PACKAGE 选项 apt-get install…

Edge浏览器的设备仿真模式下显示鼠标指针

在使用Edge浏览器进行网页开发时,设备仿真模式是一个非常有用的工具,它可以帮助开发者模拟不同设备上的用户体验。但在设备仿真模式下,鼠标指针会显示为一个圆形触摸指示器,而不是我们熟悉的鼠标箭头,这可能会对精确测试鼠标交互造成影响。 改变方法 在设备仿真工具栏中,…

openmanus 代码分析 #2 - agent classes

根据你提供的 agent 目录下各个类的信息,下面是对应的 PlantUML 代码,用于绘制类图展示这些类之间的关系:@startuml定义抽象基类 abstract class BaseAgent {+ name: str+ description: Optional[str]+ system_prompt: Optional[str]+ next_step_prompt: Optional[str]+ l…

实践四:数据模型与数据库

实践四:数据模型与数据库 内容概述:本节课我们将引入数据模型(model),通过创建数据模型和数据表,我们就可以将信息存储在数据库中,并将数据库中的信息呈现在页面上。 1. 在完成实践一、实践二、实践三的基础上开始本项目,进入激活虚拟环境。pipenv shel提示:接下来我们…

clickhouse 开启认证 SQL 方式

ClickHouse 访问控制 RBAC 用户账户:包含身份信息、权限、允许的主机、角色和设置。 角色:权限容器,可分配给用户或其他角色。 行策略:定义表中行的可见性。 设置配置文件:集中管理用户/角色的配置参数。 配额:限制资源使用(如查询次数、内存)。 权限层级 权限按层级划…

No.66 Vue---Vue引入路由配置、路由传递参数、嵌套路由配置

一、Vue引入路由配置在Vue中,我们可以通过 vue-router 路由管理页面之间的关系 Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举.1.1 在vue中引入路由 第一步:安装路由npm install -save vue-router第二步:配置独立的路由…

开源!Django-Vue3-Admin的Python后台管理系统

DjangoAdmin 是一个基于 Django + Vue3 的前后端分离的后台管理系统,采用了最新的前后端技术栈,内置了丰富的功能模块,可以帮助开发者快速搭建企业级中后台产品。Django-Vue3-Admin 项目简介 Django-Vue3-Admin 是一个基于 Django + Vue3 的前后端分离的后台管理系统,采用了…

陕西人文:1964年陕西14座古县因何纷纷“改县名”?

2016年11月西安市户县撤县设区,改名鄠邑区。其中有一节简介:”1964年“鄠县”改名“户县”,实际上在同一时期改名的还有:盩厔,邠县,醴泉,栒邑,汧阳,郿县,郃阳,雒南,商雒、洵阳,沔县,鄜县,葭县,这13个古县。 【户县老县城】鄠县(hu xian)就是现在之西安市鄠邑区…

在鸿蒙NEXT中实现完全自定义导航栏

在日常app开发中,导航栏扮演着重要的角色。鸿蒙提供了系统导航栏Navigation,它支持很多属性的修改,但是应用需求更加灵活多变,比如有的导航栏有背景图片,有的导航栏要求渐变色,有的导航栏需要随时隐藏和显示等等。 遇到这些需求系统的Navigation就无法实现,这时候我们就需…

鸿蒙开发中console.log和hilog的区别

在日常开发中打印日志是调试程序非常常用的操作,在鸿蒙的官方文档中介绍了hilog这种方式,有些前端转过来的友友发现console.log也可以进行日志打印。有一段时候幽蓝君也非常喜欢使用console.log,因为它看起来好像更加简单方便。 那么今天幽蓝君就来和大家说一说console.log和…

HarmonyOS NEXT开发实战教程--招聘app

这一周忙到起飞,只能在周末发个文章。今天的内容比较简单,是一个招聘app,适合新手友友参考,大佬们可以直接忽略。 看一下效果图:这是一个比较常见的应用,大家做这类应用建议大家先分析一下应用和页面的结构,避免写完发现错了又改。 这个应用首先有4个tabbaritem,是很常…