告警渠道开发手册
告警处理流程(飞书为例)
如何开发新的告警代理
- 实现
AlertProxy
接口,
type AlertProxy interface {
// Do a new alert requet
DoRequest(params url.Values, alert Alert) error
}
DoRequest
用来提取本次webhook的数据,并通过你的AlertProxy实例中的模板及原生告警内容,渲染生成新的http request,然后使用自己的客户端发起请求。
- 在
Init()
函数中注册该告警代理
func Init(cfgs *config.ProxyConfigs) {
for _, v := range cfgs.Templates {
if _, ok := alertProxyMap[v.Type]; ok {
log.Fatalf("duplicated alert proxy type: %s", v.Type)
}
tmpl := template.Must(template.New(string(v.Type)).Parse(v.Template))
switch v.Type {
case config.Feishu:
alertProxyMap[v.Type] = NewFeishuRobot(tmpl)
case config.AliyunMsg:
alertProxyMap[v.Type] = NewAliyunMsg(tmpl)
case config.AliyunVoice:
alertProxyMap[v.Type] = NewAliyunVoice(tmpl)
default:
log.Fatalf("unsupported alert proxy type: %s", v.Type)
}
}
}
- 将你的告警代理模板,填写在config/deploy/alertproxy.yaml文件中。
- type: 代理类型
- template: 要渲染的模板内容,你可以在
DoRequest
渲染模板
运行&部署
- 本地运行 自行修改config/deploy/alertproxy.yaml配置
go run main.go serve
- vscode debug
$ cat .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "alertproxy",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"args": [
"serve"
]
}
]
}
- 构建镜像
make docker-build docker-push
- 部署
make deploy