文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么用go开发alertmanger实现钉钉报警

2023-06-20 16:36

关注

这篇文章主要讲解了“怎么用go开发alertmanger实现钉钉报警”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用go开发alertmanger实现钉钉报警”吧!

通过自己的url实现alertmanager的钉钉报警

webhook在alertmanger的配置

- name: 'dingding'      webhook_configs:      - send_resolved: true        url: 'http://xxxx:8080/Alert'

go实现钉钉报警的程序

package mainimport ( "bytes" "encoding/json" "fmt" "net/http" "strings" "time" "log" "github.com/gin-gonic/gin")const ( webHook_Alert = "https://oapi.dingtalk.com/robot/send?access_token=xxxx")type Message struct { MsgType string `json:"msgtype"` Text struct {  Content string `json:"content"`  Mentioned_list string `json:"mentioned_list"`  Mentioned_mobile_list string `json:"mentioned_mobile_list"` } `json:"text"`}type Alert struct { 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 getAlertInfo(notification Notification) string { var m Message m.MsgType = "text" msg,err := json.Marshal(notification.GroupLabels) if err != nil {  log.Println("notification.GroupLabels Marshal failed",err) } msg1,err := json.Marshal(notification.CommonAnnotations["summary"]) if err != nil {  log.Println("notification.CommonAnnotations Marshal failed",err) } //告警消息 var buffer bytes.Buffer buffer.WriteString(fmt.Sprintf("告警: %v\n",string(msg))) buffer.WriteString(fmt.Sprintf("Endpoint: %v\n",string(msg1))) buffer.WriteString(fmt.Sprintf("告警描述: \"我挂了,快来救我^OO^\"\n")) buffer.WriteString(fmt.Sprintf("Status:%v\n",notification.Status)) //恢复消息 var buffer2 bytes.Buffer buffer2.WriteString(fmt.Sprintf("告警: %v\n",string(msg))) buffer2.WriteString(fmt.Sprintf("Endpoint: %v\n",string(msg1))) buffer2.WriteString(fmt.Sprintf("告警描述: \"哈哈哈,我又回来了!!!\"\n")) //buffer2.WriteString(fmt.Sprintf("mentioned_mobile_list: %v\n",msgres["mentioned_mobile_list"])) buffer2.WriteString(fmt.Sprintf("Status:%v\n",notification.Status)) if notification.Status == "resolved"{  m.Text.Content = buffer2.String() }else {  m.Text.Content = buffer.String() } jsons, err := json.Marshal(m) resp := string(jsons) return resp}//钉钉报警func SendAlertDingMsg(msg string) { defer func() {  if err := recover(); err != nil {   fmt.Println("err")  } }() content := `{"msgtype": "text",  "text": {"content": "` + msg + `"} }` //创建一个请求 req, err := http.NewRequest("POST", webHook_Alert, strings.NewReader(content)) if err != nil {  fmt.Println(err)  fmt.Println("钉钉报警请求异常") } client := &http.Client{} //设置请求头 req.Header.Set("Content-Type", "application/json; charset=utf-8") //发送请求 resp, err := client.Do(req) if err != nil {  // handle error  fmt.Println(err)  fmt.Println("顶顶报发送异常!!!") } defer resp.Body.Close()}func alert( c *gin.Context)  { var notification Notification err := c.BindJSON(&notification) if err != nil {  c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})  return } msg := getAlertInfo(notification) SendAlertDingMsg(msg)}func main()  { t := gin.Default()        t.GET("/",func(c *gin.Context){            c.String(http.StatusOK,"关于alertmanager实现钉钉报警的方法!!!!")        }) t.POST("/Alert",alert) t.Run(":8080")}

可以通过编译二进制打包部署在k8s环境(可以参考下篇文章,如果在k8s环境中部署gin程序)

感谢各位的阅读,以上就是“怎么用go开发alertmanger实现钉钉报警”的内容了,经过本文的学习后,相信大家对怎么用go开发alertmanger实现钉钉报警这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯