您好,欢迎来到网暖!

当前位置:网暖 » 站长资讯 » 建站基础 » 网络技术 » 文章详细 订阅RssFeed

ZABBIX对接飞书实现报警通知

来源:网络整理 浏览:344次 时间:2020-08-10

飞书提供了丰富的api来实现消息的通知,包括文本消息、图片消息、富文本消息,本次介绍使用飞书api发送文本消息,以下是实现思路
飞书API地址:https://open.feishu.cn/document/ukTMukTMukTM/uITNz4iM1MjLyUzM

实现思路

ZABBIX对接飞书实现报警通知
1.需要获取三个授权凭证

  • app_access_token :访问App资源相关接口。
  • tenant_access_token :访问企业资源相关接口。
  • user_access_token :访问用户资源相关接口。

2.根据zabbix报警的收信人手机号获取user_id,用于后面在群里@相关负责人,或者直接发给某个责任人
3.chat_id用于发送给指定的群,这里我提供两种方法获取chat_id,后面会介绍
4.传入zabbix报警消息,并艾特相关负责人发送到飞书群里或者个人

获取授权凭证1.获取 App ID 和 App Secret

登录开发者后台,在“我的应用”页面创建企业自建应用。进入企业自建应用详情页,获取App ID和App Secret。
ZABBIX对接飞书实现报警通知

2.获取 tenant_access_token

一种方法是通过企业自建应用方式获取,另一种是通过应用商店应用获取,这里我使用第一种方法,直接创建应用即可
ZABBIX对接飞书实现报警通知

3.创建完应用后可根据APP ID和 App Secret构造请求获取
def gettenant_access_token():    tokenurl="https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"    headers={"Content-Type":"application/json"}    data={        "app_id":"cli_9ec625abcdefg",        "app_secret":"f716Gi27Yi25n5K0Wbafgwghhstv"    }    request=requests.post(url=tokenurl,headers=headers,json=data)    response=json.loads(request.content)['tenant_access_token']    return response
获取user_id

user_id可以根据注册的手机号或邮箱获取,可以在zabbix中定义用户的手机号,然后传入参数获取user_id

def getuserid(tenant_access_token):    #mobiles="15101234584"    userurl="https://open.feishu.cn/open-apis/user/v1/batch_get_id?mobiles=%s"%mobiles    headers={"Authorization":"Bearer %s"%tenant_access_token}    request=requests.get(url=userurl,headers=headers)    response=json.loads(request.content)['data']['mobile_users'][mobiles][0]['user_id']    return response
获取chat_id

这里我提供两种方法获取chat_id,一种是将机器人加入到群里,获取群信息中的chat_id;另一种是通过机器人创建群聊获取群信息,当然还有其他的方法,这里我就不过多介绍了,我将使用第一种方法来获取chat_id

首先将机器人加入到群聊

ZABBIX对接飞书实现报警通知

构造请求获取chat_id
def getchatid(tenant_access_token):    #获取chatid    chaturl="https://open.feishu.cn/open-apis/chat/v4/list?page_size=20"    headers={"Authorization":"Bearer %s"%tenant_access_token,"Content-Type":"application/json"}    request=requests.get(url=chaturl,headers=headers)    response=json.loads(request.content)['data']['groups'][0]['chat_id']    return response
向飞书群里或者飞书用户发送消息

这里需要三个参数,一个是user_id,一个是chat_id,另一个是tenant_access_token,并传入报警信息即可发送

def sendmes(user_id,chat_id,tenant_access_token):    #向群里发送消息    sendurl="https://open.feishu.cn/open-apis/message/v4/send/"    headers={"Authorization":"Bearer %s"%tenant_access_token,"Content-Type":"application/json"}    data={"chat_id":chat_id,        "msg_type":"text",        "content":{            "text":"%s<at user_id=\"%s\">test</at>"%(messages,user_id)        }    }    #给个人发送消息    # data={"user_id":user_id,    #     "msg_type":"text",    #     "content":{    #         "text":"%s<at user_id=\"%s\">test</at>"%(messages,user_id)    #     }    # }    request=requests.post(url=sendurl,headers=headers,json=data)    print(request.content)
在ZABBIX上配置报警动作及接收人配置报警媒介类型

注意参数顺序不能乱
ZABBIX对接飞书实现报警通知

配置用户的接收信息

也就是用户注册飞书的手机号
ZABBIX对接飞书实现报警通知

配置动作

ZABBIX对接飞书实现报警通知

报警测试这里我禁掉了其中一台windows的agent进行测试

ZABBIX对接飞书实现报警通知
后续会添加带有图片信息的报警,完整代码请访问github组织遮阳笔记
https://github.com/sunsharing-note/zabbix/blob/master/feishu.py


欢迎关注个人公号“没有故事的陈师傅”
ZABBIX对接飞书实现报警通知

推荐站点

  • 腾讯腾讯

    腾讯网(www.QQ.com)是中国浏览量最大的中文门户网站,是腾讯公司推出的集新闻信息、互动社区、娱乐产品和基础服务为一体的大型综合门户网站。腾讯网服务于全球华人用户,致力成为最具传播力和互动性,权威、主流、时尚的互联网媒体平台。通过强大的实时新闻和全面深入的信息资讯服务,为中国数以亿计的互联网用户提供富有创意的网上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐网是全球最大的中文门户网站,为用户提供24小时不间断的最新资讯,及搜索、邮件等网络服务。内容包括全球热点事件、突发新闻、时事评论、热播影视剧、体育赛事、行业动态、生活服务信息,以及论坛、博客、微博、我的搜狐等互动空间。

    www.sohu.com
  • 网易网易

    网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,开设新闻、娱乐、体育等30多个内容频道,及博客、视频、论坛等互动交流,网聚人的力量。

    www.163.com
  • 新浪新浪

    新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com