概述
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 发送的内容。
参考资料
- go webhook server
警告
本文最后更新于 2021年8月9日,文中内容可能已过时,请谨慎参考。