grafana發(fā)送企業(yè)微信報警(alerting)配置,webhook

開始配置

在grafana管理界面
WechatIMG7.jpeg

Name: 自己隨便取
Type: 選擇webhook

封裝發(fā)消息類型

通過配置上圖中的Url(這里可以自己隨便寫個api,接收grafana傳過來的參數(shù)),所傳參數(shù)如下

{
    "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       = "告警恢復(fù)"
    AlertingMsg = "觸發(fā)告警"
    OK          = "OK"
    Alerting    = "Alerting"
    ColorGreen  = "info"
    ColorGray   = "comment"
    ColorRed    = "warning"
)
// 發(fā)送消息
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("接受參數(shù)數(shù)據(jù):", 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")
    // 處理數(shù)據(jù)格式
    msgStr := MsgMarkdown(h, color)
    if c.Query("type") == "news" {
        msgStr = MsgNews(h)
    }

    fmt.Println("發(fā)送的消息是:", msgStr)

    jsonStr := []byte(msgStr)
    // 發(fā)送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
}

// 發(fā)送消息類型 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)
}

// 發(fā)送消息類型
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

企業(yè)微信配置這里不再講解

打包文件

    go build -o wechat-alert main.go 

配置請求方式

 1. 在grafana中配置webhook
 2. Webhook settings里添寫 
    http://你的ip:88/send?key=微信的key
 3. 點擊Send Test 
 
 備注:Username和Password 無關(guān)緊要,可以隨意填寫酌摇。

備注

代碼里實現(xiàn)了 發(fā)送企業(yè)微信的兩種類型的消息轧简。

  • markdown(默認)
  • news

結(jié)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驰坊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哮独,更是在濱河造成了極大的恐慌拳芙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皮璧,死亡現(xiàn)場離奇詭異舟扎,居然都是意外死亡,警方通過查閱死者的電腦和手機悴务,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門睹限,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惨寿,你說我怎么就攤上這事邦泄。” “怎么了裂垦?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵顺囊,是天一觀的道長。 經(jīng)常有香客問我蕉拢,道長特碳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任晕换,我火速辦了婚禮午乓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闸准。我一直安慰自己益愈,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒸其,像睡著了一般敏释。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摸袁,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天钥顽,我揣著相機與錄音,去河邊找鬼靠汁。 笑死蜂大,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝶怔。 我是一名探鬼主播奶浦,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼添谊!你這毒婦竟也來了财喳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斩狱,失蹤者是張志新(化名)和其女友劉穎耳高,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體所踊,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡泌枪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秕岛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碌燕。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖继薛,靈堂內(nèi)的尸體忽然破棺而出修壕,到底是詐尸還是另有隱情,我是刑警寧澤遏考,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布慈鸠,位于F島的核電站,受9級特大地震影響灌具,放射性物質(zhì)發(fā)生泄漏青团。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一咖楣、第九天 我趴在偏房一處隱蔽的房頂上張望督笆。 院中可真熱鬧,春花似錦诱贿、人聲如沸娃肿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咸作。三九已至锨阿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間记罚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工壳嚎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桐智,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓烟馅,卻偏偏與公主長得像说庭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子郑趁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355