zoukankan      html  css  js  c++  java
  • zabbix报警-邮件-钉钉

    安装zabbix的时候已经配置了zabbix_server的脚本目录

    AlertScriptsPath=/opt/app/zabbix/script

    所以把邮件、钉钉、微信相关的脚本都放在/opt/zabbix/script目录下

    邮件

    效果图

     

    <table width="800px" border="0" cellspacing="0", cellpadding="4">
        <tr bgcolor="#EFEBDE">
            <td >时间</td>
            <td>at {EVENT.TIME} on {EVENT.DATE}</td>
        <tr>
    
        <tr bgcolor="#C0C0C0">
            <td >问题</td>
            <td>{TRIGGER.NAME}</td>
        <tr>
    
        <tr bgcolor="#EFEBDE">
            <td>主机</td>
            <td>{HOST.NAME}</td>
        <tr>
    
        <tr bgcolor="#C0C0C0">
            <td >级别</td>
            <td>{TRIGGER.SEVERITY}</td>
        <tr>
    
        <tr bgcolor="#EFEBDE">
            <td >ID</td>
            <td>{EVENT.ID}</td>
        <tr>
        
        <tr bgcolor="#C0C0C0">
            <td >相关图表</td>
            <td><img src="cid:zbx_img" /></td>
        <tr>    
    </table>
    zabbix-action-Default message
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import HTMLParser
    import urlparse
    import urllib
    import urllib2
    import cookielib
    import string
    import os
    
    # 登录的主页面
    hosturl = 'http://zabbix.heboan.com/screens.php'  # 根据自己的实际地址填写
    # post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据)
    posturl = 'http://zabbix.heboan.com/index.php'  # 从数据包中分析出,处理post请求的url
    
    # 设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie
    cj = cookielib.LWPCookieJar()
    cookie_support = urllib2.HTTPCookieProcessor(cj)
    opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
    urllib2.install_opener(opener)
    
    # 打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)
    h = urllib2.urlopen(hosturl)
    
    # 构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1',
               'Referer': '******'}
    # 构造Post数据,他也是从抓大的包里分析得出的。
    postData = {
        'name': 'admin',    # 用户名
        'password': 'zabbix',   # 密码
        'autologin': 1,
        'enter': 'Sign in'
    }
    
    # 需要给Post数据编码
    postData = urllib.urlencode(postData)
    
    # 通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程
    request = urllib2.Request(posturl, postData, headers)
    response = urllib2.urlopen(request)
    text = response.read()
    
    
    def get_graph(graphid, period, image_name):
        host = 'zabbix.heboan.com'
        path = '/tmp/image/'  # 保存图片的地址
        #zabbix的图片的地址的构造
        url = "http://%s/chart2.php?graphid=%s&period=%s&width=500&height=100" % (host, graphid, period)
    
        img_req = urllib2.Request(url)
        png = urllib2.urlopen(img_req).read()
    
        file = path + image_name + '.png'
        with open(file,'wb') as f:
            f.write(png)
    获取图片的脚本-zbx_g.sh
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import sys
    from zbx_g import get_graph
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    import time
    
    mailto_list=[]   # 收件人列表
    mailto_list.append(sys.argv[1])
    mail_host="smtp.xxx.com:25"   # 邮件服务器
    mail_user="xxxx"              # 用户名
    mail_pass="xxxxx"                # 密码
    mail_postfix="xxxxx.com"        #  邮件后缀
    
    title = sys.argv[2]
    content = sys.argv[3]
    
    def send_mail(to_list, sub):
        # 增加图片
        def addimg(src, imgid):
            fp = open(src, 'rb')
            msgImage = MIMEImage(fp.read())
            fp.close()
            msgImage.add_header('Content-ID', imgid)
            return msgImage
    
        msg = MIMEMultipart('related')
        #HTML代码
        msgtext = MIMEText(content, "html", "utf-8")
        msg.attach(msgtext)
    
        # 全文件路径,后者为ID 根据ID在HTML中插入的位置
        msg.attach(addimg("/tmp/image/cpu_load.png", "zbx_img"))
    
        me = mail_user + "@" + mail_postfix 
        msg['Subject'] = sub
        msg['From'] = me
        msg['To'] = ",".join(to_list)
        send_to = to_list
        try:
            server = smtplib.SMTP()
            server.connect(mail_host)
            server.login(mail_user, mail_pass)
            server.sendmail(me, send_to, msg.as_string())
            server.close()
            return True
        except Exception, e:
            print str(e)
            return False
    
    if __name__ == '__main__':
        get_graph(790, 10800, 'cpu_load')
        send_mail(mailto_list, title)
    发送邮件脚本-mail.sh

    钉钉

    效果图

    创建一个群组,添加你需要发送报警人

    点击个人头像--机器人管理

    在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”

    点击“复制”按钮,即可获得这个机器人对应的Webhook地址

    >{TRIGGER.NAME}|
    主机:{HOST.NAME}|
    时间:{EVENT.DATE} {EVENT.TIME}|
    等级:{TRIGGER.SEVERITY}|
    详情:{ITEM.NAME}:{ITEM.VALUE}|
    状态:{TRIGGER.STATUS}:{ITEM.VALUE1}|
    事件ID:{EVENT.ID}
    zabbix-action-Default message
    #!/usr/bin/env python
    # coding=utf-8
    
    
    import sys
    import urllib2
    import json
    
    
    class DtalkRobot(object):
        """自定义机器人的封装类"""
    
        def __init__(self, webhook):
            self.webhook = webhook
    
        # markdown类型
        def sendMarkdown(self, title, text):
            data = {
                "msgtype": "markdown",
                "markdown": {
                    "title": title,
                    "text": text
                }
            }
            return self.post(data)
    
        def post(self, data):
            post_data = json.dumps(data)
            # print post_data
            headers = {'Content-Type': 'application/json'}
            req = urllib2.Request(self.webhook, post_data, headers)
            content = urllib2.urlopen(req).read()
            return content
    
    
    if __name__ == "__main__":
        webhook = "你的钉钉webhook"
        #标题
        title = sys.argv[1]
        #内容
        text  = sys.argv[2].replace('|', "
    
    ")
        robot = DtalkRobot(webhook)
        print robot.sendMarkdown(title, text)
    发送钉钉脚本-ding.py 
  • 相关阅读:
    面向对象的三个基本特征(讲解)
    GridView 72般绝技
    Asp.net 将数据库里的记录转换成json
    jquery json asp.net 将各种对象:list ..等转换成
    sql2000 分页存储过程
    .NET中DataSet转化Json工具类
    从攻击者痕迹看内网常见命令
    从攻击者角度看SetMpreference小结
    Java NIO 实现服务端和客户端的通信示例
    spark streaming 监听器执行顺序
  • 原文地址:https://www.cnblogs.com/sellsa/p/9779263.html
Copyright © 2011-2022 走看看