美文网首页
grafana发送企业微信报警(alerting)配置,webh

grafana发送企业微信报警(alerting)配置,webh

作者: 吃馍夹菜 | 来源:发表于2021-02-04 16:46 被阅读0次

    开始配置

    在grafana管理界面 WechatIMG7.jpeg

    Name: 自己随便取
    Type: 选择webhook

    封装发消息类型

    通过配置上图中的Url(这里可以自己随便写个api,接收grafana传过来的参数),所传参数如下

    {
        "imageUrl": "https://domain.com/assets/img/blog/mixed_styles.png",
        "message": "Someone is testing the alert notification within grafana.",
        "ruleUrl": "http://domain.com/rules/",
        "title": "[Alerting] Test notification"
    }
    

    上代码(通过自己封装的api, 去请求微信)

    部分代码

    type Hook struct {
        DashboardId string `json:"dashboardId"`
        EvalMatches string `json:"evalMatches"`
        ImageUrl    string `json:"imageUrl"`
        Message     string `json:"message"`
        OrgId       string `json:"orgId"`
        PanelId     string `json:"panelId"`
        RuleId      string `json:"ruleId"`
        RuleName    string `json:"ruleName"`
        RuleUrl     string `json:"ruleUrl"`
        State       string `json:"state"`
        Tags        string `json:"tags"`
        Title       string `json:"title"`
    }
    
    const (
        Url         = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key="
        OKMsg       = "告警恢复"
        AlertingMsg = "触发告警"
        OK          = "OK"
        Alerting    = "Alerting"
        ColorGreen  = "info"
        ColorGray   = "comment"
        ColorRed    = "warning"
    )
    // 发送消息
    func SendMsg(c *gin.Context) {
        h := &Hook{}
        if err := c.BindJSON(&h); err != nil {
            fmt.Println(err)
            _, _ = c.Writer.WriteString("Error on JSON format")
            return
        }
    
        marshal, _ := json.Marshal(h)
        fmt.Println("接受参数数据:", string(marshal))
        // 字符串替换
        h.RuleUrl = strings.ReplaceAll(h.RuleUrl, ":3000", "")
        color := ColorGreen
        if strings.Contains(h.Title, OK) {
            h.Title = strings.ReplaceAll(h.Title, OK, OKMsg)
        } else {
            h.Title = strings.ReplaceAll(h.Title, Alerting, AlertingMsg)
            color = ColorRed
        }
    
        // Send to WeChat Work
        url := Url + c.Query("key")
        // 处理数据格式
        msgStr := MsgMarkdown(h, color)
        if c.Query("type") == "news" {
            msgStr = MsgNews(h)
        }
    
        fmt.Println("发送的消息是:", msgStr)
    
        jsonStr := []byte(msgStr)
        // 发送http请求
        req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
        req.Header.Set("Content-Type", "application/json")
        client := &http.Client{}
        resp, err := client.Do(req)
        if err != nil {
            _, _ = c.Writer.WriteString("Error sending to WeChat Work API")
            return
        }
        defer resp.Body.Close()
        body, _ := ioutil.ReadAll(resp.Body)
        fmt.Println("shuju:", string(body))
    
        _, _ = c.Writer.Write(body)
    
        return
    }
    
    // 发送消息类型 news
    func MsgNews(h *Hook) string {
        return fmt.Sprintf(`
            {
                "msgtype": "news",
                "news": {
                  "articles": [
                    {
                      "title": "%s",
                      "description": "%s",
                      "url": "%s",
                      "picurl": "%s"
                    }
                  ]
                }
              }
            `, h.Title, h.Message, h.RuleUrl, h.ImageUrl)
    }
    
    // 发送消息类型
    func MsgMarkdown(h *Hook, color string) string {
        return fmt.Sprintf(`
        {
           "msgtype": "markdown",
           "markdown": {
               "content": "<font color=\"%s\">%s</font>\r\n<font color=\"comment\">%s\r\n[点击查看详情](%s)![](%s)</font>"
           }
      }`, color, h.Title, h.Message, h.RuleUrl, h.ImageUrl)
    }
    

    完整代码 github

    企业微信配置这里不再讲解

    打包文件

        go build -o wechat-alert main.go 
    

    配置请求方式

     1. 在grafana中配置webhook
     2. Webhook settings里添写 
        http://你的ip:88/send?key=微信的key
     3. 点击Send Test 
     
     备注:Username和Password 无关紧要,可以随意填写。
    

    备注

    代码里实现了 发送企业微信的两种类型的消息。

    • markdown(默认)
    • news

    结束

    相关文章

      网友评论

          本文标题:grafana发送企业微信报警(alerting)配置,webh

          本文链接:https://www.haomeiwen.com/subject/lwibtltx.html