监控告警02--夜莺飞书告警-v4版本

监控告警02--夜莺飞书告警-v4版本

1 介绍

v4版本的夜莺集成了shell、api、wechat、wechat_robot、dingtalk_robot 等5中常见的告警,然而没有集成飞书告警。当前飞书已经被很多企业采纳,因此做企业运维平台的时候很有必要将告警通知发送到飞书。
使用过钉钉和飞书的小伙伴肯定都知道,可以通过群机器人的webhook来发送告警,基于这种方式我们只需要改动源码中 send_im模块,去掉多余的参数和数据结构,将钉钉相关的接口更改为飞书接口,然后重新编译生成server即可。
本文基于v4源码dingtalk模块,将其改动为支持飞书告警。笔者会在下一篇博文参考dingtalk模块追加一个feishu模块,使其能同时保持飞书和钉钉告警通知功能。

2 方法

笔者在之前的博文 监控告警01–夜莺部署与接入 已经介绍了夜莺的基础安装方法,此处不再重复,本文主要介绍一种快速让夜莺v4向飞书发送告警的方式,具体改动如下。

2.1 源码改动

  1. 修改 src/modules/server/dingtalk/dingtalk.go
    此处修改了部分原有的数据结构,去掉了不必要的参数,也调整了RobotSend 的参数,具体如下:
    package dingtalk
    
    import (
    	   "bytes"
    	   "encoding/json"
    	   "fmt"
        "io/ioutil"
        "net/http"
    )
    
    type Result struct {
        ErrCode int    `json:"errcode"`
        ErrMsg  string `json:"errmsg"`
    }
    
    type dingReqData struct {
        Msgtype string       `json:"msg_type"`
        Content *textContent `json:"content"`
    }
    
    type textContent struct {
        Text string `json:"text"`
    }
    
    // RobotSend robot发送信息
    func RobotSend(tokenUser, sendContent string) error {
        url := "https://open.feishu.cn/open-apis/bot/v2/hook/" + tokenUser
        dingReqData := new(dingReqData)
        dingReqData.Msgtype = "text"
        reqContent := new(textContent)
        reqContent.Text = sendContent
        dingReqData.Content = reqContent
        // fmt.Println(dingReqData)
    
    	   content, err := json.Marshal(dingReqData)
        if err != nil {
     	   return fmt.Errorf("dingtalk marshal req data err: %v", err)
        }
    
        data := bytes.NewReader(content)
        req, err := http.NewRequest("POST", url, data)
        if err != nil {
     	   return fmt.Errorf("dingtalk create new req err: %v", err)
        }
        req.Header.Set("Content-Type", "application/json")
    
        r, err := http.DefaultClient.Do(req)
        if err != nil {
     	   return fmt.Errorf("dingtalk do req err: %v", err)
        }
        defer r.Body.Close()
    
        resp, err := ioutil.ReadAll(r.Body)
        if err != nil {
     	   return fmt.Errorf("dingtalk read req body err: %v", err)
        }
    
        result := Result{}
        err = json.Unmarshal(resp, &result)
        if err != nil {
     	   return fmt.Errorf("dingtalk unmarshal req content err: %v", err)
        }
    
        if result.ErrCode != 0 {
     	   err = fmt.Errorf("dingtalk req return ErrCode = %d ErrMsg = %s", result.ErrCode, result.ErrMsg)
        }
        return err
    }
    
    //func main() {
    //	ret := RobotSend("********-change to your webhook code-************", "This is a test")
    //	fmt.Println(ret)
    //}
    
  2. 修改 src/modules/server/cron/sender_im.go
    需要同步修改sendImByDingTalkRobot 函数中的 dingtalk.RobotSend 调用
    func sendImByDingTalkRobot(message *dataobj.Message) {
        ......
        for _, u := range tokenUser {
     	   err := dingtalk.RobotSend(u, message.Content)
     	   if err != nil {
     		   logger.Warningf("im dingtalk_robot send to %s fail: %v", u, err)
     	   } else {
     		   logger.Infof("im dingtalk_robot send to %s succ", u)
     	   }
        }
    }
    

2.2 测试效果

修改代码后,直接在src/modules/server 执行go build 就会生成server可执行文件,此时将该文件拷贝到之前安装的目录,覆盖已有的二进制文件,然后重启server即可。
此处为测试的告警信息:
在这里插入图片描述

3 说明

nightingale github
监控告警01–夜莺部署与接入

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值