Zabbix阿里云短信告警

环境准备

(不一定要这样子的环境,可根据具体的生产环境配置)

应用 版本
CentOS 7.4
Zabbix 6.0.4
Python v2
阿里云短信服务SDK 2.0.22

准备阿里云短信签名和模板

阿里云短信签名

添加完签名再添加模板,有不清楚的问阿里服务人员

阿里云短信模版

模版内容可以根据需求变更,这里使用的模版是以下内容

A warning has occurred ${title} 
Time:${datetime} 
Host:${name} 
Info:${info}

接收到的样子大概长这个样子

【签名】A warning has occurred Nginx Down
Time:2022.12.03 16:42:44 
Host:node.if010.com 127.0.0.1 
Info:nginx status:0

这里需要注意以下几点:
1、变量属性选择“其他”;
2、申请后要和客户沟通,及时修改,不然会被审核不通过

准备key和秘钥

鼠标放到右上角用户处,可以看到一个AccessKey管理,入不记得秘钥可以重新生成
AccessKey

编写sms.py脚本

vim /usr/local/zabbix/share/zabbix/alertscripts/sms.py
#!/usr/bin/env python
#coding=utf-8

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

import logging
import json

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkdysmsapi.request.v20170525.SendSmsRequest import SendSmsRequest

# 创建一个日志器,就是一个logger对象
logger = logging.getLogger('logger')
# 设置logger输入级别
logger.setLevel(logging.DEBUG)
# 创建日志格式器
formator = logging.Formatter(fmt="%(asctime)s [ %(filename)s ]  %(lineno)d line | [ %(levelname)s ] | [%(message)s]",
                             datefmt="%Y/%m/%d/%X")
# 创建一个输出的处理器,让它输入到控制台
sh = logging.StreamHandler()

# 1.创建一个把日志信息存储到文件中的处理器
# 要加编码,不然后可能会乱码
fh = logging.FileHandler("/var/log/sms.log", encoding="utf-8")

# 把输出处理器添加到日志器中
logger.addHandler(sh)

# 给处理器添加格式器
sh.setFormatter(formator)

# 2.把文件处理器,加载到logger中
logger.addHandler(fh)

# 3.给文件处理器添加格式器
fh.setFormatter(formator)

credentials = AccessKeyCredential('<这里填写你的AccessKey>', '<这里填写你的AccessSecret>')
client = AcsClient(region_id='cn-hangzhou', credential=credentials)

request = SendSmsRequest()
request.set_accept_format('json')
request.set_SignName("<这里填写你的短信签名名称>")
request.set_TemplateCode("<这里填写你的短信模版ID>")
request.set_PhoneNumbers(sys.argv[1])

message=json.loads(sys.argv[2])
logger.info("PhoneNumber:" + sys.argv[1])
logger.info("Title:" + message['title'])
logger.info("Datetime:" + message['datetime'])
logger.info("HostName:" + message['name'])
logger.info("Info:" + message['info'])

request.set_TemplateParam(sys.argv[2])

response = client.do_action_with_exception(request)
# python2:  print(response) 
# print(str(response, encoding='utf-8'))

# 输出日志信息
#logger.debug('输出debug级别的日志')
logger.info(sys.argv)
logger.info(response)
#logger.info(response)
#logger.warning('输出warning级别的日志')
#logger.error('输出error级别的日志')
#logger.critical('输出critical级别的日志')

此脚本的路径需要和你的zabbix_server.conf文件中AlertScriptsPath定义的路径一致,否则后面会报错找不到脚本执行!!!此外,还需要给脚本在/var/log/创建sms.log日志文件,最后给脚本赋予执行权限

chmod 777 /usr/local/zabbix/share/zabbix/alertscripts/sms.py
chmod 777 /var/log/sms.log

配置zabbix报警媒介类型

报警媒介

信息模版

信息模版编写成josn格式,方便脚本的读写

{"title":"{EVENT.NAME}","datetime":"{EVENT.DATE} {EVENT.TIME}","name":"{HOST.NAME} {HOST.IP}","info":"{ITEM.KEY1}:{ITEM.VALUE1}"}

关于阿里云JDK的环境

pip 安装 阿里云的JDK模块

pip install alibabacloud_dysmsapi20170525==2.0.23

猜你喜欢

转载自blog.csdn.net/qq_32262243/article/details/128190141
今日推荐