目录

AlertManager接收通知

概述

AlertManger 可以通过配置自定义 webhook 来接收告警信息。

webhook server

通过下面的 main.go 作为 webhook 的接收地址,会把 AlertManager Post 过来的信息作为 Response 打印出来,方便观察。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"time"
)

type MyHandler struct{}

func (am *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		fmt.Printf("read body err, %v\n", err)
		return
	}
	fmt.Println(time.Now())
	fmt.Printf("%s\n\n", string(body))
}

func main() {
	http.Handle("/webhook", &MyHandler{})
	http.ListenAndServe(":10000", nil)
}

配置

下面是关于 AlertManager 的 webhook 配置的地方。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# Whether or not to notify about resolved alerts.
# 告警解决之后是否可以发送
[ send_resolved: <boolean> | default = true ]

# The endpoint to send HTTP POST requests to.
# Webhook的URL,这这里填入上述容器的地址
url: <string>

# The HTTP client's configuration.
# Webhook的一些HTTP的配置,比如配置代理之类的
[ http_config: <http_config> | default = global.http_config ]

# The maximum number of alerts to include in a single webhook message. Alerts
# above this threshold are truncated. When leaving this at its default value of
# 0, all alerts are included.
[ max_alerts: <int> | default = 0 ]

下面是修改过的配置,也可以参考 alertmanager-config-example.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
alertmanager:
  config:
    route:
      group_by: ['namespace']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 12h
      receiver: 'httpserver'
      routes:
      - receiver: 'httpserver'
        matchers:
          - alertname =~ "InfoInhibitor|Watchdog"
    receivers:
    - name: 'httpserver'
      webhook_configs:
      # 这里的ip是httpserver的pod ip
      - url: "http://10.244.4.19:10000/webhook"

部署和效果

1
kubectl -n kube-prometheus-stack run httpserver --restart='Never' --image core.harbor.domain/library/httpserver:latest

这里的 httpserver 会吧 AlertManager 发送过去的 json 原封不动的重新打印出来,仅仅是测试使用,从下面的结果看到,AlertManger 给 httpserver 发送的内容。

/alertmanager%E6%8E%A5%E6%94%B6%E9%80%9A%E7%9F%A5/img.png

参考资料

  1. go webhook server
警告
本文最后更新于 2021年8月9日,文中内容可能已过时,请谨慎参考。