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('|', "\n\n")
    robot = DtalkRobot(webhook)
    print robot.sendMarkdown(title, text)
发送钉钉脚本-ding.py 
posted @ 2018-10-12 17:10  sellsa  阅读(430)  评论(0编辑  收藏  举报