prometheus 自定义 webhook 发送告警到钉钉
package main
import (
"bytes"
"encoding/json"
"fmt"
"log"
"strings"
"time"
"io/ioutil"
"net/http"
)
const (
DingDingUrl = "https://oapi.dingtalk.com/robot/send?access_token=access_token"
)
type Text struct {
Content string `json:"content"`
}
type Msg struct {
MsgType string `json:"msgtype"`
Text Text `json:"text"`
}
type Alert struct {
Status string `json:"status"`
Labels map[string]string `json:"labels"`
Annotations map[string]string `json:"annotations"`
StartsAt time.Time `json:"startsAt"`
EndsAt time.Time `json:"endsAt"`
}
type Notification struct {
Version string `json:"version"`
GroupKey string `json:"groupKey"`
Status string `json:"status"`
Receiver string `json:"receiver"`
GroupLabels map[string]string `json:"groupLabels"`
CommonLabels map[string]string `json:"commonLabels"`
CommonAnnotations map[string]string `json:"commonAnnotations"`
ExternalURL string `json:"externalURL"`
Alerts []Alert `json:"alerts"`
}
func Dingtalk(w http.ResponseWriter, r *http.Request) {
b, _ := ioutil.ReadAll(r.Body)
defer r.Body.Close()
var notification Notification
log.Println(string(b))
json.Unmarshal(b, ¬ification)
log.Println(notification)
contents := []string{}
headers := fmt.Sprintf("group: %s status:%s", notification.CommonLabels["group"], notification.Status)
log.Println(headers)
contents = append(contents, headers)
for _, each := range notification.Alerts {
body := fmt.Sprintf("status:%s %s", each.Status, each.Annotations["summary"])
contents = append(contents, body)
}
strings.Join(contents, "\n")
msg := Msg{
MsgType: "text",
Text: Text{
Content: strings.Join(contents, "\n"),
},
}
msgJson, _ := json.Marshal(msg)
req, _ := http.NewRequest("POST", DingDingUrl, bytes.NewBuffer(msgJson))
req.Header.Add("Content-Type", "application/json")
client := http.Client{}
res,_ := client.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
log.Printf("%s\n", body)
fmt.Fprint(w, "hello world\n")
}
func main() {
http.HandleFunc("/send", Dingtalk)
http.ListenAndServe(":8090", nil)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)