html报警函数,alertmanager自定义告警模板(五)_心安王的博客-程序员秘密

技术标签: html报警函数  

一、告警模板

alertmanager是可以自定义告警模板的。

注意钉钉需要部署prometheus-webhook-dingtalk,这个也是支持模板的,但是模板要写在prometheus-webhook-dingtalk里,而不是alertmanager

项目链接https://github.com/timonwong/prometheus-webhook-dingtalk

通过配置templates参数,指定模板位置。详细可以看我上一篇文章

下面是一个模板示例(网上copy的):

vim /etc/alertmanager/template/wechat.tmpl{ {- define "wechat.tmpl" }}

{ {- range $i, $alert := .Alerts.Firing -}}

[报警项]:{ { index $alert.Labels "alertname" }}

[实例]:{ { index $alert.Labels "instance" }}

[job]:{ { index $alert.Labels "job" }}

[报警内容]:{ { index $alert.Annotations "summary" }}

[开始时间]:{ { $alert.StartsAt.Format "2006-01-02 15:04:05" }}

====================

{ {- end }}

{ {- end }}define: 定义模板名称

range: 循环遍历

index: 通过key取值

二、数据结构介绍

1.Data.Receiver: 接收器的名称

.Status: 如果存在告警,则为firing,否则resolved(恢复)。

.Alerts: 所有告警对象(alert对象)的列表。(另外他还提供了两个函数用于过滤告警和恢复列表Alerts.Firing:代表告警列表,Alerts.Resolved:代表恢复列表),告警对象的数据结构可以看下面alert部分

.GroupLabels: 告警的分组标签(没猜错应该是对应配置文件的group_by)

.CommonLabels: 所有告警共有的标签

.CommonAnnotations: 所有告警共有的注解

.ExternalURL: 告警对应的alertmanager链接地址

2.Alert:

看这个之前可以先了解上面的AlertsStatus: 当前这一条报警的状态。firing(告警)或resolved(恢复)

Labels: 当前这一条报警的标签

Annotations: 当前这一条报警的注解

StartsAt: 当前这一条报警的开始时间

EndsAt: 当前这一条报警的结束时间

GeneratorURL: 告警对应的alertmanager链接地址

3. kv数据的一些内置方法

kv数据相当于python里的字典,在模板中提供了一些方法可以操作kv数据

SortedPairs: 排序

Remove: 删除一个key

Names: 返回标签集中标签名的名称列表。

Values: 返回标签集中标签名的值列表。

4.go模板常用内置函数

title: 将字符串转换为首字母大写的标题

toUpper: 字母转换成大写

toLower: 字母转换成小写

match: 使用正则匹配字符串

reReplaceAll: 使用正则替换字符串

join: 连接字符串用法{ { .CommonLabels.SortedPairs.Values | join "," }}

safeHtml: 将字符串标记为不需要自动转义的HTML

下面不知道是哪个大佬写的,可以参考一下:{ { define "__subject" }}[{ { .Status | toUpper }}{ { if eq .Status "firing" }}:{ { .Alerts.Firing | len }}{ { end }}] { { .GroupLabels.SortedPairs.Values | join " " }} { { if gt (len .CommonLabels) (len .GroupLabels) }}({ { with .CommonLabels.Remove .GroupLabels.Names }}{ { .Values | join " " }}{ { end }}){ { end }}{ { end }}

{ { define "__alertmanagerURL" }}{ { .ExternalURL }}/#/alerts?receiver={ { .Receiver }}{ { end }}

{ { define "__text_alert_list" }}{ { range . }}

**Labels**

{ { range .Labels.SortedPairs }}> - { { .Name }}: { { .Value | markdown | html }}

{ { end }}

**Annotations**

{ { range .Annotations.SortedPairs }}> - { { .Name }}: { { .Value | markdown | html }}

{ { end }}

**Source:** [{ { .GeneratorURL }}]({ { .GeneratorURL }})

{ { end }}{ { end }}

{ { define "default.__text_alert_list" }}{ { range . }}

---

**告警级别:** { { .Labels.severity | upper }}

**运营团队:** { { .Labels.team | upper }}

**触发时间:** { { dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}

**事件信息:**

{ { range .Annotations.SortedPairs }}> - { { .Name }}: { { .Value | markdown | html }}

{ { end }}

**事件标签:**

{ { range .Labels.SortedPairs }}{ { if and (ne (.Name) "severity") (ne (.Name) "summary") (ne (.Name) "team") }}> - { { .Name }}: { { .Value | markdown | html }}

{ { end }}{ { end }}

{ { end }}

{ { end }}

{ { define "default.__text_alertresovle_list" }}{ { range . }}

---

**告警级别:** { { .Labels.severity | upper }}

**运营团队:** { { .Labels.team | upper }}

**触发时间:** { { dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}

**结束时间:** { { dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}

**事件信息:**

{ { range .Annotations.SortedPairs }}> - { { .Name }}: { { .Value | markdown | html }}

{ { end }}

**事件标签:**

{ { range .Labels.SortedPairs }}{ { if and (ne (.Name) "severity") (ne (.Name) "summary") (ne (.Name) "team") }}> - { { .Name }}: { { .Value | markdown | html }}

{ { end }}{ { end }}

{ { end }}

{ { end }}

{ {/* Default */}}

{ { define "default.title" }}{ { template "__subject" . }}{ { end }}

{ { define "default.content" }}#### \[{ { .Status | toUpper }}{ { if eq .Status "firing" }}:{ { .Alerts.Firing | len }}{ { end }}\] **[{ { index .GroupLabels "alertname" }}]({ { template "__alertmanagerURL" . }})**

{ { if gt (len .Alerts.Firing) 0 -}}

![警报 图标](https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3626076420,1196179712&fm=15&gp=0.jpg)

**====侦测到故障====**

{ { template "default.__text_alert_list" .Alerts.Firing }}

{ {- end }}

{ { if gt (len .Alerts.Resolved) 0 -}}

{ { template "default.__text_alertresovle_list" .Alerts.Resolved }}

{ {- end }}

{ {- end }}

{ {/* Legacy */}}

{ { define "legacy.title" }}{ { template "__subject" . }}{ { end }}

{ { define "legacy.content" }}#### \[{ { .Status | toUpper }}{ { if eq .Status "firing" }}:{ { .Alerts.Firing | len }}{ { end }}\] **[{ { index .GroupLabels "alertname" }}]({ { template "__alertmanagerURL" . }})**

{ { template "__text_alert_list" .Alerts.Firing }}

{ {- end }}

{ {/* Following names for compatibility */}}

{ { define "ding.link.title" }}{ { template "default.title" . }}{ { end }}

{ { define "ding.link.content" }}{ { template "default.content" . }}{ { end }}

下面是我写的一个小例子:{ { define "__subject" }}

[{ { .Status | toUpper }}{ { if eq .Status "firing" }}:{ { .Alerts.Firing | len }}{ { end }}]

{ { end }}

{ { define "__alert_list" }}{ { range . }}

---

**告警名称**: { { index .Annotations "summary" }}

**告警级别**: { { .Labels.severity }}

**告警主机**: { { .Labels.instance }}

**告警信息**: { { index .Annotations "description" }}

**维护团队**: { { .Labels.team | upper }}

**告警时间**: { { .StartsAt.Format "2006-01-02 15:04:05" }}

{ { end }}{ { end }}

{ { define "__resolved_list" }}{ { range . }}

---

**告警名称**: { { index .Annotations "summary" }}

**告警级别**: { { .Labels.severity }}

**告警主机**: { { .Labels.instance }}

**告警信息**: { { index .Annotations "description" }}

**维护团队**: { { .Labels.team | upper }}

**告警时间**: { { .StartsAt.Format "2006-01-02 15:04:05" }}

**恢复时间**: { { .EndsAt.Format "2006-01-02 15:04:05" }}

{ { end }}{ { end }}

{ { define "default.title" }}

{ { template "__subject" . }}

{ { end }}

{ { define "default.content" }}

![警报 图标](https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3626076420,1196179712&fm=15&gp=0.jpg)

{ { if gt (len .Alerts.Firing) 0 }}

**====侦测到{ { .Alerts.Firing | len }}个故障====**

{ { template "__alert_list" .Alerts.Firing }}

---

{ { end }}

{ { if gt (len .Alerts.Resolved) 0 }}

**====恢复{ { .Alerts.Resolved | len }}个故障====**

{ { template "__resolved_list" .Alerts.Resolved }}

{ { end }}

{ { end }}

{ { define "ding.link.title" }}{ { template "default.title" . }}{ { end }}

{ { define "ding.link.content" }}{ { template "default.content" . }}{ { end }}

{ { template "default.title" . }}

{ { template "default.content" . }}

最后更新于 2021-01-04 01:44:03 并被添加「prometheus alertmanager」标签,已有 1383 位童鞋阅读过。

本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处

相关文章

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42550052/article/details/118377768

智能推荐

NFS共享存储服务安装_huryer的博客-程序员秘密_安装nfs网络共享服务的步骤

NFS是一种基于TCP/IP 传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源NAS存储: NFS服务的实现依赖于RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。在Centos 7系统中,需要安装nfs-utils、 rpcbind 软件包来提供NFS共享服务,前者用于NFS共享发布和访问,后者用于RPC支持。手动加载NFS共享服务时,应该先启动rpcbind, 再启动nfs。nfs端口:2049R

android开发环境的搭建!浅谈Android消息机制原理,重难点整理_普通网友的博客-程序员秘密

开头技术的发展产生了程序员这个职位,从这些年各大互联网公司曝光的一些员工收入水平来看,程序员的工资还是相对比较高的,可是我们在互联网上还听到了另外一种声音,很多程序员想转行,特别是大龄程序员,这可能会令很多人纳闷。为什么工资这么高还想转行呢?其实他们也很无奈,从下面几点可以看得出来。Android高级知识点一、Android性能优化1.描述一下android的系统架构?2.Android线程间通信有哪几种方式3. 如何避免OOM异常4.Android程序运行时权限与文件系统权限的区别?5.H

HCIA学习笔记#4_沙漏hx的博客-程序员秘密

第四天补充遗漏的点:暂无路由

IOS 获取系统时间戳_dianli0581的博客-程序员秘密

IOS 获取系统时间戳常用方法通用方法有如下三种: NSLog(@"1 ========== %.0lf",(double)time(NULL)*1000); NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval a=[dat timeInterv...

IDEA创建Maven项目并配置WEB环境_小唐要努力的博客-程序员秘密_idea配置maven web

创建Maven项目配置WEB环境有两种方式,一种是使用Maven模板,一种不使用。如果使用模板创建,需要勾选从模板创建,然后选择maven包下的webapp模板,注意这里有两个webapp模板,不要选错了,后面的跟着来就可以了,这种方法比较方便。然后我们看看如何不使用模板创建maven项目,并配置好WEB环境。第一步是直接创建maven项目,不勾选从模板创建选项,填写相关项目名,来到主界面。第二步,我们要给新建的项目添加WEB模块,新建的项目是普通的java工程,没有WEB模块。点击

桌面应用使用谷歌浏览器内核CEF_lin49940的博客-程序员秘密_cef浏览器内核

CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目。C# 有CefSharp, 支持WPF 和 winformPython 有cefpython3, 支持wxPython, PyQt 等很多ptyhon gui 框架。目前自己使用在WPF 和wxPython 上面了, 代码就不贴了, 因为每个不同的版本代码都会有...

随便推点

【特征检测】Harris角点检测中的数学推导_lbaihao的博客-程序员秘密

简介本文主要是对Harris角点检测的数学公式进行推导,更加深入的掌握原理性的理论知识。预备知识椭圆的矩阵方程表示在高中课本中,我们学习到标准椭圆及其方程(如下图所示):其实,矩阵在运算中使用非常广泛,现将上述标准方程写成矩阵形式(方便接下来的处理):椭圆半轴与系数矩阵的关系         一个nxn的矩阵,

ROM测试工程师岗位考核标准_三千红尘客的博客-程序员秘密_测试工程师试用期考核标准

1.出勤率及工工作时长 (测试部评审委员会评分)不迟到不早退(出勤一天满9小时)自主适当加班完成任务加班时间用于提升自我,输出有效文档2.任务完成情况(1)任务量(组长)每月正常完成分配的任务每月平均每日相当于1.2人工作分量每月平均每日相当于1.5人工作分量(2)用例执行质量(测试部评审委员会评分)用例规范执行,非PASS项需要清晰备注用例不规范处有建议用例执行完成无空白,专项有报告,有标注主动...

MapReduce中使用字符串拼接导致的问题_快乐程序员的博客-程序员秘密_reduce字符串拼接

今天在帮业务方优化mapreduce作业时遇到一个用字符串拼接的问题。

SQL删除某个时间段的数据_weixin_30802273的博客-程序员秘密

DELETE from dbcp_log_read where time BETWEEN '2017-02-20 00:00:00' AND '2017-03-06 00:00:00'转载于:https://www.cnblogs.com/ouyanxia/p/6510781.html

Java 中如何使用动态数组_开开心心 everyday的博客-程序员秘密

新建 ArrayList对象 ,然后使用add即可例如:ArrayList list = new ArrayList(); for( int i=0;i <10;i++ ) list.Add(i); 参考: https://www.cnblogs.com/qingchunshiguang/p/6103731.html...

vscode 小程序wxml文件代码没有颜色区分(高亮)解决办法_前端步锦的博客-程序员秘密_vscode wxml高亮

打开编辑器wxml文件,右下角,点击如下图部分:在上面的弹框中选择“HTML”语言模式:就可以正常显示了PS:其他语言模式也可以任意切换,就看自己需要什么格式了~...

推荐文章

热门文章

相关标签