1..编写脚本
进入zabbix目录:vi /usr/lib/zabbix/alertscripts/dingding.py
注:access token redis缓存版本,请求多时防止被钉钉禁用(推荐,要安装redis)
#!/usr/bin/python3
import urllib.request
import json
import sys
import redis
import requests
appkey = "dingbbpcvz3urj9iyonn"
appsecret = "2inlxbCWxb2VzOD_V6B2WnNsvIzb4KhPyoK08hlLp_-xQswCaMgrcFwUS6zPbND9"
agentid = "868705171"
receivers = sys.argv[1]
message = sys.argv[2] + ":\n" + sys.argv[3]
def get_access_token():
gettoken_url = 'https://oapi.dingtalk.com/gettoken?appkey=' + appkey \
+ '&appsecret=' + appsecret
token_file = urllib.request.urlopen(gettoken_url)
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token = token_json["access_token"]
return token
def get_access_token_by_redis():
try:
redis_key = "zabbix.dingding.access_token"
rd = redis.Redis(host='localhost', port=6379,decode_responses=True)
if rd.get("redis_key") == None :
token = get_access_token()
rd.set(redis_key,token,ex=7000)
else:
token = rd.get(redis_key)
except Exception as e:
token = get_access_token()
return token
if __name__ == "__main__":
access_token = get_access_token_by_redis()
send_url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token
send_message = {
"agent_id" : "{0}".format(agentid),
"userid_list" : "{0}".format(receivers),
"msg" : {
"msgtype" : "text",
"text":{
"content" : message
}
}
}
send_data = json.dumps(
send_message,
ensure_ascii = False
).encode(encoding='UTF8')
response = requests.post(url = send_url,data = send_data)
res_data = response.text
res_json = json.loads(res_data)
res_code = res_json['errcode']
if res_code != 0 :
print(send_data);
print(res_json)
sys.exit(res_code)
# D:\Python_workplace>Python dingding.py 121832213901231143 "zabbix service check" "zabbix service ok"