环境说明

操作系统

centos7

zabbix_server

zabbix 4.0.3

python

3.6.5

短信平台

阿里云短信

 

 

 

zabbix_server配置信息



1 [root@cp-hb-bj-dev-001 etc]# cat zabbix_server.conf|egrep -v '^$|^#'
 2 ListenPort=10051
 3 LogFile=/data/logs/zabbix/zabbix_server.log
 4 DebugLevel=3
 5 PidFile=/data/logs/zabbix/zabbix_server.pid
 6 DBHost=********************
 7 DBName=dev_zabbix
 8 DBUser=mysql_zabbix_w
 9 DBPassword=************
10 DBPort=3306
11 Timeout=4
12 AlertScriptsPath=/usr/local/cpgroup/zabbix/share/zabbix/alertscripts  #alertscripts 执行脚本存放路径,在zabbix安装目录下 
13 LogSlowQueries=3000



配置zabbix发送短信报警

登录阿里云官网下载sdk

 

zabbix短信没有了 zabbix发短信_运维

申请短信签名与模板

zabbix短信没有了 zabbix发短信_运维_02

zabbix短信没有了 zabbix发短信_json_03

 

模板详情信息,这里只用了一个参数,而且告警与恢复都用的同一个模板。

zabbix短信没有了 zabbix发短信_json_04

将下载下来的demo上传到服务器/usr/local/cpgroup/zabbix/share/zabbix/alertscripts目录下 

注:最好在该目录下创建一个python虚拟环境,很好管理下载下来的依赖包,但我这里并没有使用

zabbix短信没有了 zabbix发短信_json_05

修改const.py为你自己的accesskey

zabbix短信没有了 zabbix发短信_json_06



赋予demo_sms_send.py为可执行权限
并执行 python setup.py install 安装依赖包



修改demo_sms_send.py



#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest
from aliyunsdkcore.client import AcsClient
import uuid
from aliyunsdkcore.profile import region_provider
from aliyunsdkcore.http import method_type as MT
from aliyunsdkcore.http import format_type as FT
import const

"""
短信业务调用接口示例,版本号:v20170525

Created on 2017-06-12

"""
try:
    reload(sys)
    sys.setdefaultencoding('utf8')
except NameError:
    pass
except Exception as err:
    raise err

# 注意:不要更改
REGION = "cn-hangzhou"
PRODUCT_NAME = "Dysmsapi"
DOMAIN = "dysmsapi.aliyuncs.com"

acs_client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, REGION)
region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)

def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None):
    smsRequest = SendSmsRequest.SendSmsRequest()
    # 申请的短信模板编码,必填
    smsRequest.set_TemplateCode(template_code)

    # 短信模板变量参数
    if template_param is not None:
        smsRequest.set_TemplateParam(template_param)

    # 设置业务请求流水号,必填。
    smsRequest.set_OutId(business_id)

    # 短信签名
    smsRequest.set_SignName(sign_name)

    # 数据提交方式
        # smsRequest.set_method(MT.POST)

        # 数据提交格式
    # smsRequest.set_accept_format(FT.JSON)

    # 短信发送的号码列表,必填。
    smsRequest.set_PhoneNumbers(phone_numbers)

    # 调用短信发送接口,返回json
    smsResponse = acs_client.do_action_with_exception(smsRequest)

    # TODO 业务处理

    return smsResponse



if __name__ == '__main__':
    __business_id = uuid.uuid1()
    sendto = str(sys.argv[1])  # zabbix传过来的第一个参数
    message = str(sys.argv[2])  # zabbix传过来的第二个参数
    params = {'message':message}  # 对应短信模板里设置的变量名
    print(send_sms(__business_id, sendto, "签名名称", "模板code" ,params))



本地测试



python demo_sms_send.py PhoneNumber Message
#返回信息
b'{"Message":"OK","RequestId":"582BC524-2542-4A67-8C96-F7A5522B2331","BizId":"434800850125393357^0","Code":"OK"}'



配置zabbix

zabbix短信没有了 zabbix发短信_python脚本_07

创建媒介类型并保存

ALERT.SENTO对应着python脚本中的第一个参数,ALERT.MESSAGE对应着python脚本中的第二个参数

zabbix短信没有了 zabbix发短信_python脚本_08

绑定用户

zabbix短信没有了 zabbix发短信_python脚本_09

创建动作

zabbix短信没有了 zabbix发短信_python_10

zabbix短信没有了 zabbix发短信_python_11

zabbix短信没有了 zabbix发短信_json_12



zabbix短信没有了 zabbix发短信_运维_13

zabbix短信没有了 zabbix发短信_python脚本_14



<!--警告-->
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

<!--恢复-->
恢复主机:{HOSTNAME1}
恢复时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}


消息内容


配置完成后,修改触发器测试短信是否可用

zabbix短信没有了 zabbix发短信_运维_15

这个触发器是判断当前系统可用内存,默认是20M,可以看到我这里为了测试已经将它修改,所以我这边直接将其修改回来即可

查看当前动作日志

zabbix短信没有了 zabbix发短信_python_16

zabbix短信没有了 zabbix发短信_运维_17

zabbix短信没有了 zabbix发短信_python_18

zabbix 配置告警邮件 

将邮件脚本上传到服务器/usr/local/cpgroup/zabbix/share/zabbix/alertscripts目录下 


#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:hc.li

import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.163.com'    
mail_user = 'user@163.com'  #修改为自己的邮箱与密码
mail_pass = 'passwd'    
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
    me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = to_list
    try:
        s = smtplib.SMTP_SSL(mail_host,465)
        #s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception as e:
        print (str(e))
        return False
if __name__ == "__main__":
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])


 

配置zabbix

创建报警媒介

zabbix短信没有了 zabbix发短信_python脚本_19

绑定用户

zabbix短信没有了 zabbix发短信_json_20

配置动作

zabbix短信没有了 zabbix发短信_python脚本_21

zabbix短信没有了 zabbix发短信_json_22

 

zabbix短信没有了 zabbix发短信_运维_23

 

zabbix短信没有了 zabbix发短信_python脚本_24

保存测试即可