今天遇到开源社区咨询:夜莺里如何引用标签和注解变量?这个问题如果通读文档,其实也能找到答案,不过相关知识是散落在各处的,这里就集中说一下,方便大家查阅。

哪里可以引用标签和注解变量

主要有两个地方引用标签和注解变量:

告警规则

告警规则的备注、附加信息,可以引用标签变量。对于不同的告警规则生成的告警事件,如果想渲染成不同的事件内容,就可以在这里做一些配置。比如磁盘告警,只想在告警消息里展示 path 标签;比如证书过期的告警,只想在告警消息里展示 target 标签。

告警规则的标题当前版本也可以引用标签变量,不过极为不建议这么做,因为标题是用来做去重、归类的,如果标题里包含标签变量,可能会导致同一类告警无法归并。后面的版本也可能会下掉标题里引用标签变量的功能。

消息模板

不同的通知媒介会有不同的消息模板,比如钉钉机器人有 markdown 模板,邮件有 HTML 模板,短信有文本模板。消息模板里也可以引用标签、注解变量。

消息模板是一个相对全局的东西,建议不同的通知媒介分别只定义一个消息模板,所以消息模板不应该引入定制化的渲染逻辑,如果有一些定制化的渲染逻辑,通常应该在告警规则里做。

告警规则引用标签变量举例

通过一个例子说明,假设我要配置一个内存相关的告警规则:

mem_free > 0

这里的阈值是 0,所以肯定会触发告警,方便我们测试。预览一下数据:

在这里插入图片描述

这个查询条件只返回了一条数据(因为我这是使用 Docker compose 启动的测试环境,里边只有一个 Categraf 在跑)。预览的数据中可以看到,标签部分只有一个 ident 标签。

下面我在附加信息(Annotations)里引用这个标签变量,例子如下:

在这里插入图片描述

定义了两个附加信息,其中 Runbook 比较简单,写了一个 URL 地址,这个 URL 中引用了 {{ .TagsMap.ident }} 变量,就是提取的 ident 标签的值,也可以写成 {{ $labels.ident }},类似 Prometheus 的标签变量引用方式。$labels 相当于是 .TagsMap 的别名。

另一个附加信息就比较复杂了,MemAvailablePercent,是通过调用模板函数 query 做了一个二次查询,即 mem_free 告警时,顺便获取了一下 mem_available_percent 的值。真实生产环境里,机器会有多台,告警的机器只有部分,所以执行 query 的时候,需要加上 ident 标签的过滤条件,确保查询到的 mem_available_percent 是和告警的机器一致的。printf 部分,是在拼接一个 promql,promql 中引用了 .TagsMap.ident 变量。query 的查询结果塞到了 $memMetrics 变量中,$memMetrics 是一个数组,所以用 range 遍历了一下,把每个条目的 ident 和 value 打印了出来。具体可以参考 模板函数文档。

消息模板引用变量举例

夜莺已经内置了很多告警消息模板,可以参考内置模板做调整,以 Dingtalk 的模板举例:

#### {{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" }}
[事件详情]({{$domain}}/alert-his-events/{{$event.Id}}) | [屏蔽1小时]({{$domain}}/alert-mutes/add?__event_id={{$event.Id}}){{if eq $event.Cate "prometheus"}} | [查看曲线]({{$domain}}/metric/explorer?__event_id={{$event.Id}}&mode=graph}}){{end}}

这个模板里引用了很多变量,大都是以 $event. 开头的变量,这些变量都是事件对象的属性。其中告警事件的标签,是通过 range 遍历 $event.TagsMap 来实现的,$event.TagsMap 是一个 map 对象,$key 是标签名,$val 是标签值。

{{- range $key, $val := $event.TagsMap}}
{{- if ne $key "rulename" }}- {{$key}}: {{$val}}
{{- end}}
{{- end}}

告警事件的附加信息,是通过 range 遍历 $event.AnnotationsJSON 来实现的,$event.AnnotationsJSON 也是一个 map 对象,$key 是注解名,$val 是注解值。

{{if $event.AnnotationsJSON}}
- **附加信息**:
{{- range $key, $val := $event.AnnotationsJSON}}- {{$key}}: {{$val}}
{{- end}}
{{end}}

上面的语法都是 go template 语法,如果还有疑问可以把上面的 Dingtalk 的模板交给 gpt 进行解析,然后把修改需求告诉 gpt,让 gpt 帮你改。

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

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

相关文章

大数据的五大特征(5V模型)深度解读

一、Volume&#xff08;体积&#xff09;&#xff1a;数据的“海洋” 定义&#xff1a;指数据的巨大体量。大数据的计量单位已经从传统的GB、TB级跃升至PB、EB甚至ZB级。 深度解读&#xff1a; “Volume”是大数据最显而易见的特征。我们正生活在一个数据爆炸的时代&#xff1a…

基于SpringBoot的宠物领养服务系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

AI 解决生活小事 2——用 AI 做一回新闻播客

哈喽&#xff0c;各位C站的朋友们&#xff0c;我是极客团长&#xff0c;一位专注用AI解决生活小事的科技玩家&#xff0c;上一期我们聊了聊怎么用AI给电脑做“深度体检”&#xff0c;把电脑里积攒多年的“垃圾”清理了个干净。 那篇反响还不错&#xff0c;看来大家跟我一样&am…

Vue3 图片加载失败回退为默认图:最简、健壮的两种实现(含完整代码)

先上结论&#xff1a;给 <img> 绑定 error&#xff0c;在回调里将 src 切到默认头像&#xff0c;并断开二次触发&#xff0c;配合 new URL(..., import.meta.url).href 解析静态资源路径&#xff0c;可靠、可维护。 场景与目标 登录用户有头像 URL&#xff0c;但可能 40…

VisionPro联合编程控件导入WinFrom以及VS卡死问题

在工业自动化领域&#xff0c;C#和VisionPro都是备受瞩目的工具。C#是一种功能强大的编程语言&#xff0c;广泛应用于Windows平台上的应用程序开发。而VisionPro则是一款视觉检测软件&#xff0c;广泛应用于自动化生产线上的产品质量检测。将C#与VisionPro结合使用&#xff0c;…

练习spring mvc

1. 项目结构总结 这个Spring MVC项目采用Maven管理&#xff0c;遵循标准的Web项目结构。以下是详细的文件级别结构&#xff1a; 核心目录结构 springmvc_helloword/ ├── .idea/ # IDEA项目配置目录 │ ├── artifacts/ # 项目打包配置…

postgreSql远程连接数据库总是超时断开?

问题&#xff1a;postgresql经常遇到连接中断的情况&#xff0c;程序几分钟就会断一次很难受。 pg的日志大量报错&#xff1a; 2025-08-27 11:05:43.967 CST [26462] LOG: could not receive data from client: Connection reset by peer 2025-08-27 11:05:43.967 CST [2625…

【Java基础】Java数据结构深度解析:Array、ArrayList与LinkedList的对比与实践

Java数据结构深度解析&#xff1a;Array、ArrayList与LinkedList的对比与实践 在Java编程中&#xff0c;数据存储与操作是最基础的能力要求。Array&#xff08;数组&#xff09;、ArrayList&#xff08;动态数组&#xff09;与LinkedList&#xff08;双向链表&#xff09;作为最…

Flask测试平台开发,登陆重构

概述我们在开篇的时候实现了简单的登陆功能&#xff0c;也实现了一个前后端联调的登陆功能&#xff0c;但是你有没有发现&#xff0c;那个登陆只是一个简单的登陆&#xff0c;且密码在接口返回的过程中是铭文密码&#xff0c;在生产环境中使用肯定是不行的&#xff0c;一般密码…

tiny4412 Qt环境搭建

1.硬件环境PC端&#xff1a;ubuntu18.04 开发板硬件平台&#xff1a;tiny4412 内核版本&#xff1a;linux3.5 交叉编译器&#xff1a;arm-linux-gcc Qt版本&#xff1a;Qt5.62.搭建ubuntu下Qt编译环境1.在用户目录下的src_pack目录下解压。 [wbyqwbyq src_pack]$ pwd /home/wby…

将本地jar包推到远程仓库

前提条件&#xff0c;手里有个jar包想推到maven远程仓库 1. 在maven项目中&#xff0c;输入脚本执行 2. 在电脑中打开PowerShell以管理员身份运行&#xff0c;输入脚本执行 # 使用 Maven 将本地 JAR 文件上传到远程 Maven 仓库&#xff08;PowerShell 版本&#xff09; # 注…

企业级监控可视化系统 Prometheus + Grafana

警报&#xff08;Alerting&#xff09;&#xff1a;使用 Prometheus 的 Alertmanager 或 Grafana 的内置告警功能&#xff0c;在指标异常时发送通知&#xff08;邮件、Slack、钉钉等&#xff09;。 服务发现&#xff1a;在云环境中&#xff08;Kubernetes, Consul等&#xff09…

极简风格PDF格式转换解决方案

虽然PDF非常适合于阅读和分享&#xff0c;但有时我们需要对文档做一些调整&#xff0c;如增加注释、高亮重点信息或者填写表单字段。 它的的界面设计简洁&#xff0c;它有强大的格式转换功能&#xff0c;不单单是将PDF转换成word文档或者PDF转换 excel&#xff0c;还能将PDF文…

Linux 把启动脚本制作成系统服务(通过 systemctl start xxx 启动)

描述 正常我们启动某一个应用时&#xff0c;会新建一个sh脚本&#xff0c;每次调用起来和设置开机自启会非常麻烦 所以把这个启动文件制作成系统服务&#xff0c;每次启动只需要输入以下命令就可以启动 systemctl start xxx也可以设置开机自启 systemctl enable xxx接下来我拿R…

AI应用开发中的安全最佳实践详解

AI应用开发中的安全最佳实践详解 随着大语言模型&#xff08;LLM&#xff09;及相关API服务的广泛应用&#xff0c;内容安全成为开发者不可忽视的重要议题。本文将系统梳理在AI应用开发过程中保障安全的技术手段与最佳实践&#xff0c;并结合像 https://api.aaaaapi.com 这样成…

介绍智慧城管十大核心功能之一:风险预警系统

我们的风险预警系统系统包含&#xff1a;排水安全运行预测预警、环卫设施安全运行预测预警、内涝安全运行预测预警、路面塌陷安全运行预测预警、人员密集场所安全运行预测预警及运行统计分析。1. 排水安全运行预测预警1) 排水设施监测 a) 实时数据采集 支持实时采集排水管网的水…

初识Linux · 文件系统

目录 前言&#xff1a; 简单理解文件系统 细节理解 前言&#xff1a; 前文我们介绍了磁盘&#xff0c;介绍磁盘的原因是因为我们需要在理解文件系统之前&#xff0c;通过磁盘的了解&#xff0c;介绍一些文件相关的内容&#xff0c;比如文件是如何在磁盘里面存储的&#xff…

前端数据库 IndexedDB

前端数据库 IndexedDB IndexedDB核心概念解析1. 数据库&#xff08;Database&#xff09;2. 对象存储&#xff08;Object Store&#xff09;3. 索引&#xff08;Index&#xff09;4. 事务&#xff08;Transaction&#xff09;5. 游标&#xff08;Cursor&#xff09; IndexDB的使…

Cesium入门教程(二)环境搭建(HTML版)

一、快速开始&#xff08;无需安装依赖&#xff09; 1. 创建HTML文件 新建一个 .html 文件&#xff08;如 cesium-demo.html&#xff09;&#xff0c;粘贴以下代码&#xff1a; <!DOCTYPE html> <html> <head><title>Cesium Quick Start</title&g…

数据分析学习笔记4:加州房价预测

一、实验概述本实验旨在利用机器学习技术&#xff0c;基于加州房价数据集&#xff08;California Housing Dataset&#xff09;构建一个房价预测模型。实验涵盖了从数据加载、探索性数据分析&#xff08;EDA&#xff09;、数据预处理到模型构建与评估的完整流程。核心任务是利用…