Zabbix报警脚本

最近上线zabbix由于自带的报警不够直观,领导要求增加监控项的图片,网上找了很多相关的脚本,多少都有些问题,于是自己写了一个,可能不够完善异常判断没加很多,不过线上跑了一段时间没发现啥问题,贴代码共大家参考(其中url及账户密码请自行修改)

#!/usr/bin/env python
# encoding: utf8
import sys, os
import datetime
import cookielib, urllib2, urllib, re
import smtplib, mimetypes, time, traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

class ZabbixGraph(object):
    def __init__(self, url, name, password):
        self.url = url
        self.name = name
        self.password = password
        # 初始化的时候生成cookies
        cookiejar = cookielib.CookieJar()
        urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
        values = {"name": self.name, ‘password‘: self.password, ‘autologin‘: 1, "enter": ‘Sign in‘}
        data = urllib.urlencode(values)
        request = urllib2.Request(url, data)
        try:
            urlOpener.open(request, timeout=10)
            self.urlOpener = urlOpener
        except urllib2.HTTPError, e:
            print e

    # 爬取zabbix报警图片,并保存到本地
    def GetGraph(self, url, values, image_dir):
        key = values.keys()
        if "itemids" not in key:
            print u"请确认是否输入graphid"
            sys.exit(1)
        # 以下if 是给定默认值
        if "period" not in key:
            # 默认获取一天的数据,单位为秒
            values["period"] = 86400
        if "stime" not in key:
            # 默认为当前时间开始
            values["stime"] = datetime.datetime.now().strftime(‘%Y%m%d%H%M%S‘)
        if "width" not in key:
            values["width"] = 800
        if "height" not in key:
            values["height"] = 200

        data = urllib.urlencode(values)
        request = urllib2.Request(url, data)
        url = self.urlOpener.open(request)
        image = url.read()
        imagename = "%s/%s.png" % (image_dir, values["itemids"])
        f = open(imagename, ‘wb‘)
        f.write(image)

    # 传入zabbix报警内容,通过正则过滤itemid
    def getvalue(self, string):
        r = re.compile("^ITEMID:[0-9]*", re.M)
        for i in string:
            d = r.findall(string)
        str1 = d[0]
        arrstr = str.split("\xa3\xba")
        arrstr = str1.split(":")
        result = arrstr[1]
        return result

    # 格式化报警内容
    def printmlinestr(self,mlinestr):
        d = mlinestr.splitlines()
        res = ""
        for i in d:
            i = "<br>" + i + "</br>"
            res += i + ‘\n‘
        return res

    # 发送邮件
    def SendMail(self,receivers, subject, data, picpath, itemid):
        msg = MIMEMultipart()
        msg[‘From‘] = "[email protected]"
        receives = receivers
        msg[‘To‘] = receivers
        msg[‘Subject‘] = subject
        body = self.printmlinestr(data)
        file1 = picpath
        image = MIMEImage(open(file1, ‘rb‘).read())
        image.add_header(‘Content-ID‘, ‘<image1>‘)
        msg.attach(image)
        html = """
        <html>
          <body>
        """
        html += body
        html += "<br><img src=cid:image1></br>"

        html += """
            </body>
        </html>
        """
        htm = MIMEText(html, ‘html‘, ‘gb2312‘)
        msg.attach(htm)
        server = smtplib.SMTP()
        server.connect(‘你的邮箱‘)
        server.login(‘用户名‘, ‘密码‘)
        server.sendmail(msg[‘From‘], receives, msg.as_string())
        server.quit()

#此url是获取图片是的,请注意饼图的URL 和此URL不一样,请仔细观察!
gr_url="http://x.x.x.x/zabbix/chart.php"
#登陆URL
indexURL="http://x.x.x.x/zabbix/index.php"
username="username"
password="password"
#用于图片存放的目录
image_dir="/tmp/"
#图片的参数,该字典至少传入graphid。
b=ZabbixGraph(indexURL,username,password)
rex = b.getvalue(sys.argv[3])
values={"itemids":"%s" %(rex),"period":86400,"stime":20160101000000,"width":800,"height":200 }
b.GetGraph(gr_url,values,image_dir)
picpath = ‘%s%s.png‘ %(image_dir,rex)
# 将zabbix传入的信息从utf8转为gbk
title = sys.argv[2].decode(‘utf-8‘).encode(‘gbk‘)
msg = sys.argv[3].decode(‘utf-8‘).encode(‘gbk‘)
# 发送邮件
b.SendMail(sys.argv[1], title, msg,picpath,rex)
# 删除本地无用的png图片
os.remove(picpath)

效果图:

时间: 2024-09-30 11:18:00

Zabbix报警脚本的相关文章

线上使用zabbix报警脚本(含图片)

分享一个线上使用的自定义zabbix报警脚本,脚本思路大致如下: 1.使用爬虫获取报警图片(前提是要获得报警的item) 2.将图片与邮件内容整合 3.发送邮件 4.日志记录 脚本内容如下: #!/usr/bin/python #coding:utf-8 import sys,time,re,os,glob import smtplib from email.mime.text import MIMEText from email.mime.image import MIMEImage from

Zabbix报警脚本-微信

#!/bin/bash ###SCRIPT_NAME:weixin.sh######send message from weixin for zabbix monitor######write by lvkaineng######2015-11-3####1CropID='wx4ad02e53cdceccd7'#3Secret='pczpXfpvDqfLaBhVhssk-XaNbSMw4jwwpYNAuh_FQPo'GURL="https://qyapi.weixin.qq.com/cgi-bi

Python脚本通过邮件发送zabbix报警图片

Python脚本通过邮件发送zabbix报警图片流程如下: 通过zabbix传递给脚本的message参数,筛选出报警信息的itemid; 通过获取的itemid,在数据库中查找对应的grpahid; 拉取对应graphid的图片并保存; 将报警信息和图片组装成html; 发送邮件. Python脚本如下: #!/usr/bin/python #coding=utf-8 from email.mime.text import MIMEText from email.mime.multipart 

九爷带你了解 通过微信企业号发送 zabbix 报警

最近飞信不能用了-zabbix报警无法收到短信 - 其实搭建的方法很简单,微信官网的API文档也非常详细了.只是之前网上没有找到具体的文档..自己饶了不少弯路.. 刚开始用微信公众平台试了下..有一个非官网的sdk..可以模拟登陆..但是需要关注的用户48小时内和公众号有过互动-这个显然是不行的-不然每天早上起床还得记得往自己的公众号上面发个消息 -..才能收到发出来的报警消息. 相关链接:http://wechat-python-sdk.readthedocs.org/zh_CN/master

使用钉钉自定义应用的方式实现zabbix报警

先给大家展示一下完成后的效果图 下面我们就按照下面的步骤来实现我们想要的效果 首先去钉钉后台管理添加自定义应用,关于如何创建自定义应用可以咨询钉钉客服或者查看钉钉相关文档,创建好应用后我们需要获取三个信息: AgentID:创建好应用后再点击应用进去就可以查看 CorpId:管理员才可以查看 CorpSecret:需要最高管员才可以查看 然后在附件中下载我们对应的程序到我们的zabbbix server的AlertScriptsPath目录,可以通过以下命令查看目录所在位置 grep "Aler

zabbix统一脚本监控方式

几周的zabbix使用之后几点心得,暂时记在这儿 简单命令监控,直接配置Userparameter参数,以应用来分类conf文件,将不同应用的配置写在不同的conf文件里,并将之放到统一的配置引入目录,每次修改均要重启zabbix-agent:配置文件的修改统一配置方式参考svn(这种方式文件检出会覆盖linux系统文件权限及所有者,每次更新后要修改权限等不太方便).使用salt在salt-master文件目录入svn并在更新后以salt cp.get_file方式配置到各服务器上(该方式不会覆

7.配置zabbix报警

1.配置报警媒介: (1)点击administration下面的media types (2)点击右上角的create media type 邮件报警我们使用centos的sendmail 短信报警我们使用云片网的短信通道 报警脚本的存放位置我们可以通过查看zabbix_server.conf确认: [[email protected] ~]# cat /etc/zabbix/zabbix_server.conf | grep Alert AlertScriptsPath=/usr/lib/za

Zabbix报警执行远程命令

日常Zabbix报警案例中,大多都是报警发送邮件,场景里很少有需要报警后执行一个命令(启动服务.清空磁盘空间.关停服务器):而今天就给大家讲讲最近需要做的事:报警后执行远程命令 首先讲讲需求吧,  遥远的一天,小伙伴们用上了mongodb,而且需要大力使用,日后一些数据存储在mongodb:从生产环境迁移数据进mongodb,那么问题来了,经常听到别人说,mongodb量大就挂了.mongodb有些数据是在程序当中被引用到,白天某个时刻挂了,那么用户.客服.运营就呼唤着了..团队中也在查问题,找

zabbix 报警

首先我们需要明白: zabbix报警的媒介: E-mail:使用sendmail发送邮件,从这边出去的邮件基本是垃圾邮件,我一直不喜欢用 SMS:需要短信设备,没有,一直都没用过这东西 Jabber:Jabber有第三方插件,能让Jabber用户和MSN.YahooMessager.ICQ等IM用户相互通讯.因为Google遵从Jabber协议,并且Google已经将Gtalk的服务器开放给了其它的Jabber服务器.所以PSI.Giam等Jabber客户端软件支持GTalk用户登陆.国内没啥人