美文网首页
open-falcon 微信报警45009 优化

open-falcon 微信报警45009 优化

作者: jojo1313 | 来源:发表于2022-10-07 18:01 被阅读0次

    组件:falcon-wechat

    现象:告警消息发送失败,错误状态码45009


    image.png

    原因:每发一次告警都去获取 access_token,腾讯对access_token获取频率有限制

    解决方法: 使用redis缓存access_token 2小时,不要每次发告警都取access_token

    我的方案:
    1.自己写微信告警消息发送api,falcon-wechat把消息发给自己api, api发到微信
    2.也可直接改falcon-wechat源码,实现redis读写功能也可修复此问题

    我的示例:


    image.png

    falcon-wechat源码修改后,go build 重新编译即可使用

    API部分代码示例:

    func SendMs(datas Warndata)(rep string){
            var token string
            var tkstr  interface{}
            idstr := strconv.Itoa(datas.Agentid)
            //发送告警前,先redis取access_token,redis没有就去腾讯api拿,拿完存redis
            tokenofcache,_ :=gredis.GetLocal(idstr)
            if tokenofcache != nil {
                err := json.Unmarshal(tokenofcache,&tkstr)
                if err!=nil{
                  fmt.Println(err)
                }
                token = tkstr.(string)
            }else{
                //请求腾讯api拿access_token, 拿完再存redis
                token=Token(datas.Agentid)
                if len(token)>20{
                    gredis.SetLocal(idstr,token,7100) //缓存tonken近2小时
                }
            }
            url:= fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s", token)
            jsonStr, _ := json.Marshal(datas)
            req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
            if err != nil {
                    panic(err)
            }
            defer req.Body.Close()
            client := &http.Client{Timeout: 5 * time.Second}
            resp, error := client.Do(req)
            if error != nil {
                    panic(error)
            }
            defer resp.Body.Close()
            result, _ := ioutil.ReadAll(resp.Body)
            rep = string(result)
            return rep
    }
    
    

    相关文章

      网友评论

          本文标题:open-falcon 微信报警45009 优化

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