本篇文章主要介绍如何编写alertmanager的告警模板,使用这个告警模板,可以格式化我们的告警信息,让告警内容更加易读和美观
prometheus 告警规则详解: https://www.dogfei.cn/archives/alertmanager-rule
prometheus 配置文件参考与介绍: https://www.dogfei.cn/archives/prometheus-config
告警模板
上篇文章介绍了关于告警规则的一些编写,在使用企业微信告警的时候,提到了告警模板,这里详细说下告警模板如何写。
首先,告警模板是基于go语言的模板来写的,具体可参考官方文档:https://golang.org/pkg/text/template/
,这里列举一些常用的写法,然后再去看下面的示例,就知道什么意思了。
"."
的用法
写过helm的一定知道这个'.'
,就是你定义了一个模板,当给这个模板传数据的时候,可以使用’.'来访问获取对应的变量
{
{
.Country.Name.Age }}
这种就是通过链式访问这个复杂类型的数据。
模板变量
在模板中定义了变量后,在整个模板中都能使用,例如:
{
{
$Name := "fei" }}
hello {
{
$Name }}
define
{
{
define "this.is.template" }}
定义了一个名为"this.is.template"的模板
if/else语句
满足条件继续执行,不满足则去执行else
,不满足条件可以是一些空值,或者false,例如false
,0
,nill
,空字符串
{
{
if .Name }}
hello {
{
.Name }}
{
{
else }}
no one!!!
{
{
end }}
这里就是判断Name
是否有值,有就会输出hello {
{ .Name }},没有输出no one,结束用{
{ end }}
多条件可以使用
{
{
if .Name1 }}
hello {
{
.Name1 }}
{
{
else if .Name2 }}
hello {
{
.Name2 }}
{
{
else }}
no one
{
{
end }}
Range语法
模板里使用range
来进行遍历数据,类似于jinja2
模板语言中的for
,例如:
假设数据结构为:
type Info struct {
Name string
Age int
}
然后模板写法如下:
{
{
range .Info }}
name: {
{
.Name }}
age: {
{
.Age }}
{
{
end }<