企业微信机器人脚本python_Zabbix + Python/Bash脚本实现使用企业微信发送监控报警...

1、再企业微信后台上先自建一个应用“ZABBIX报警”,获取AgentId和Secret:

再点击“我的企业”获取企业ID。

2、再zabbix服务器安装python3运行环境:

# 让python支持https

yum install openssl-devel -y

# 安装python3

wget https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tgz

tar zxvf Python-3.5.7.tgz

./configure

make && make install

# 安装 requests 库

pip3 install requests

3、python报警脚本

把报警脚本放到 zabbix_server 相应的目录下,文件名为:wechat.py (需加可执行权限),报警脚本代码如下(替换下面的 'xxxxx' 部分) :

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import requests

import json

import sys

import os

import time

# 企业号及应用相关信息

CORP_ID = 'wwe12bxxxxxxxxxxx'

CORP_SECRET = 'tgICJlyH2-IbxxxxxxxxxxxxxxxMQNGUx4zg'

AGENT_ID = 1xxxx02

# access_token 请求地址

ACCESS_TOKEN_REQUEST_URL = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'

# 发送应用消息请求地址

SEND_MESSAGES_REQUEST_URL = 'https://qyapi.weixin.qq.com/cgi-bin/message/send'

# 存储 access_token 文件

ACCESS_TOKEN_FILE = 'access_token.txt'

# 获取 access_token,并写入文件

def get_access_token():

get_token_url = '{}?corpid={}&corpsecret={}'.format(ACCESS_TOKEN_REQUEST_URL,

CORP_ID,

CORP_SECRET)

r = requests.get(get_token_url)

r = r.json()

access_token = r['access_token']

with open(ACCESS_TOKEN_FILE, 'w') as f:

f.write(access_token)

return access_token

# 从文件获取 access_token

def get_access_token_from_file():

if os.path.exists(ACCESS_TOKEN_FILE):

with open(ACCESS_TOKEN_FILE, 'r') as f:

access_token = f.read()

else:

access_token = get_access_token()

return access_token

# 发送应用消息

def main():

access_token = get_access_token_from_file()

i = 0

while i < 3:

try:

#message = sys.argv[3]

message = '来自python的测试消息'

send_message_url = '{}?access_token={}'.format(SEND_MESSAGES_REQUEST_URL,

access_token)

message_params = {"touser": "@all",

"msgtype": "text",

"agentid": AGENT_ID,

"text": {"content": message},

"safe": 0

}

r = requests.post(send_message_url, json=message_params, timeout=5)

r = r.json()

if r['errmsg'] == 'ok':

break

else:

access_token = get_access_token()

except Exception as e:

print(e)

i += 1

time.sleep(2)

if __name__ == '__main__':

main()

附一个bash版本的脚本、功能相同:

#!/usr/bin/env bash

# create by sunkai/1987.name

# Zabbix 企业微信报警脚本

# 需要安装 jq 命令

# yum install jq   /  apt-get install jq

#set -x

# 企业号及应用相关信息

CORP_ID='wwexxxxxxxxxxxxx7eeb'

CORP_SECRET='tgICJlxxxxxxxxxxxxxxxxxxQNGUx4zg'

AGENT_ID=1xxxx02

# access_token 请求地址

ACCESS_TOKEN_URL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${CORP_ID}&corpsecret=${CORP_SECRET}"

# 发送应用消息请求地址

SEND_MESSAGES_REQUEST_URL='https://qyapi.weixin.qq.com/cgi-bin/message/send'

# 存储 access_token 文件

ACCESS_TOKEN_FILE='access_token.txt'

# 命令路径

CURL='/usr/bin/curl'

JQ='/usr/bin/jq'

# 获取 access_token,并写入文件

get_access_token()

{

access_token=$($CURL -s -G $ACCESS_TOKEN_URL | $JQ '.access_token' | tr -d \")

echo $access_token > $ACCESS_TOKEN_FILE

}

# 在文件中获取 access_token

get_access_token_from_file()

{

if [ -e $ACCESS_TOKEN_FILE ]; then

access_token=$(cat $ACCESS_TOKEN_FILE)

else

get_access_token

fi

}

message=$3

message_params="{\"touser\":\"@all\",\"msgtype\":\"text\",\"agentid\":$agent_id,\"text\":{\"content\":\"$message\"},\"safe\":0}"

# 发送应用消息

main()

{

get_access_token_from_file

for (( i=1; i<3; i++ )); do

send_message_url="${SEND_MESSAGES_REQUEST_URL}?access_token=$access_token"

$CURL -sS -H "Content-Type:application/json" \

-X POST --data $message_params $send_message_url &> $$

errmsg=$($JQ '.errmsg' $$ | tr -d \")

if [ "$errmsg" = "ok" ]; then

break

else

get_access_token

fi

sleep 1

done

rm -f $$

}

main

4、配置zabbix报警

点击“管理 -- 报警媒介类型 -- 创建媒体类型”:

参数解释如下:

{ALTER.SENDTO} 发送给谁,该参数在邮件告警中有作用,但微信告警中没有。

{ALTER.SUBJECT} 告警标题,该参数在邮件告警中有作用,但微信告警中没有。

{ALTER.MESSAGE} 告警内容,在微信告警中有用 。

点击“配置 -- 动作 -- 创建动作”:

操作消息内容:

故障发生:{TRIGGER.NAME}

故障主机:{HOSTNAME1}

IP地址:{HOST.CONN}

告警时间:{EVENT.DATE}{EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME} : {ITEM.VALUE}

当前状态:{TRIGGER.STATUS} : {ITEM.VALUE1}

事件ID:{EVENT.ID}

恢复操作消息内容:

故障恢复:{HOSTNAME1} 已恢复!

IP地址:{HOST.CONN}

告警时间:{EVENT.DATE}{EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME} : {ITEM.VALUE}

当前状态:{TRIGGER.STATUS} : {ITEM.VALUE1}

事件ID:{EVENT.ID}

参考:https://www.zabbix.com/documentation/4.0/zh/manual/config/notifications/action/operation/macros

点击“管理 -- 用户(报警媒介)-- 添加”:

至此全部配置完毕,测试效果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值