技术标签: 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 -}}

**====侦测到故障====**
{ { 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" }}

{ { 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 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章
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性能优化1.描述一下android的系统架构?2.Android线程间通信有哪几种方式3. 如何避免OOM异常4.Android程序运行时权限与文件系统权限的区别?5.H
第四天补充遗漏的点:暂无路由
IOS 获取系统时间戳常用方法通用方法有如下三种: NSLog(@"1 ========== %.0lf",(double)time(NULL)*1000); NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval a=[dat timeInterv...
创建Maven项目配置WEB环境有两种方式,一种是使用Maven模板,一种不使用。如果使用模板创建,需要勾选从模板创建,然后选择maven包下的webapp模板,注意这里有两个webapp模板,不要选错了,后面的跟着来就可以了,这种方法比较方便。然后我们看看如何不使用模板创建maven项目,并配置好WEB环境。第一步是直接创建maven项目,不勾选从模板创建选项,填写相关项目名,来到主界面。第二步,我们要给新建的项目添加WEB模块,新建的项目是普通的java工程,没有WEB模块。点击
CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目。C# 有CefSharp, 支持WPF 和 winformPython 有cefpython3, 支持wxPython, PyQt 等很多ptyhon gui 框架。目前自己使用在WPF 和wxPython 上面了, 代码就不贴了, 因为每个不同的版本代码都会有...
简介本文主要是对Harris角点检测的数学公式进行推导,更加深入的掌握原理性的理论知识。预备知识椭圆的矩阵方程表示在高中课本中,我们学习到标准椭圆及其方程(如下图所示):其实,矩阵在运算中使用非常广泛,现将上述标准方程写成矩阵形式(方便接下来的处理):椭圆半轴与系数矩阵的关系 一个nxn的矩阵,
1.出勤率及工工作时长 (测试部评审委员会评分)不迟到不早退(出勤一天满9小时)自主适当加班完成任务加班时间用于提升自我,输出有效文档2.任务完成情况(1)任务量(组长)每月正常完成分配的任务每月平均每日相当于1.2人工作分量每月平均每日相当于1.5人工作分量(2)用例执行质量(测试部评审委员会评分)用例规范执行,非PASS项需要清晰备注用例不规范处有建议用例执行完成无空白,专项有报告,有标注主动...
今天在帮业务方优化mapreduce作业时遇到一个用字符串拼接的问题。
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
新建 ArrayList对象 ,然后使用add即可例如:ArrayList list = new ArrayList(); for( int i=0;i <10;i++ ) list.Add(i); 参考: https://www.cnblogs.com/qingchunshiguang/p/6103731.html...
打开编辑器wxml文件,右下角,点击如下图部分:在上面的弹框中选择“HTML”语言模式:就可以正常显示了PS:其他语言模式也可以任意切换,就看自己需要什么格式了~...