zoukankan      html  css  js  c++  java
  • zabbix短信(阿里云短信平台)与邮件报警

    环境说明

    操作系统 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

     

    申请短信签名与模板

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

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

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

    修改const.py为你自己的accesskey

    赋予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"}'

    注意我这里使用的python版本是python3.x的 用python2.x调用会报错.并且zabbix发送短信手机接受会是乱码,请注意

    配置zabbix

    创建媒介类型并保存

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

    绑定用户

    创建动作

    <!--警告-->
    告警主机:{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}
    消息内容

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

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

    查看当前动作日志

    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])
                                          
    Send_mail.py

    配置zabbix

    创建报警媒介

    绑定用户

    配置动作

     

    保存测试即可

  • 相关阅读:
    ⑥nginx location
    ③nginx 多虚拟主机配置
    ①nginx 安装简介
    11.ansible 角色
    10.ansible 标签功能 触发功能 忽略远程主机采集
    9.ansible 循环功能和忽略错误
    8.ansible 判断功能
    7.ansible在剧本中注册信息
    6.ansible变量
    5.ansible 剧本编写规范
  • 原文地址:https://www.cnblogs.com/charles1ee/p/10374738.html
Copyright © 2011-2022 走看看