龙空技术网

zabbix 钉钉报警带监控波动图

朕由心声 139

前言:

此时小伙伴们对“zabbixnginx进程监控脚本”大致比较珍视,姐妹们都想要知道一些“zabbixnginx进程监控脚本”的相关知识。那么小编也在网摘上网罗了一些对于“zabbixnginx进程监控脚本””的相关知识,希望大家能喜欢,姐妹们快快来学习一下吧!

由于项目需要,自己弄了一个钉钉报警带监控波动图的功能,网上找了下都没有符合要求的脚本,所以自己就编写了一个,脚本里引用了dingding的python库用模拟登录(shell脚本实现)。我这个只是给大家一个参考,希望大家在此基础上做一个更好的功能来。

要做以下工作

1 在/opt/建立zabbix_alert_images目录,主要是存放报警时候存储的图片位置

2 脚本里地址是我自己搭建的一个webdav服务器,这个网上大家一搜就有,目的是存放报警的图片,也就是在/opt/zabbix_alert_images目录里的图片,为什么还在要这台服务器里存储,是在因为我们的zabbix服务器是在内网,不想映射公网的一个地址,所以就得借助外网的一台webdav服务器来转存下,这样钉钉在调取图片才会正常显示的。192.168.1.2这里只是一个例子,其实他是一个可以在外网正常访问的一台服务器

3 zabbix配置运作时候要配置成这样才行,如下

告警主机:{HOST.NAME},IP地址:{HOST.CONN}在{EVENT.DATE}-{EVENT.TIME}{TRIGGER.NAME},告警监控项:({ITEM.ID}),请尽快处理

以上可以大家随便 定义的,主要得有告警监控项:({ITEM.ID}),是通过它来找到报警时候的监控图的。

4 我当时测试时候钉钉报警第一次可以正常抓取到报警时候的图片,可是同一个报警他就只显示我第一次抓取时候的图片,时间一直在那,可能钉钉缓存的关系,所以我在脚本里写了一个随机字符串的一个功能,生成的图片是随机,这样钉钉就不会以为是同一个图片了,也就不缓存,也就实现了报警时候抓取的图片是正常的。

以上做完后大家就可以试试你的zabbix效果了,看看是不是和我的一样了。

有什么问题大家尽管提,一起交流下。

报警脚本放在/usr/lib/zabbix/alertscripts目录里,权限是nginx,我这里搭建的是nginx+php+zabbix,大家根据自己配置情况把脚本放在相应报警脚本里即可。

最终效果

a.sh

#!/bin/bashItemID=$1cookie=/tmp/zabbix-cookie.txtname="admin"password="zabbix"url=设定工作目录 cd /opt/zabbix_alert_images#模拟登录zabbix/usr/bin/curl -k -c $cookie -b $cookie  -d "request=&name=$name&password=$password&autologin=1&enter=Sign+in" $url/index.php#graphid=939period1=3600stime1=`/bin/date +%Y%m%d%H%M%S`width1=800/usr/bin/curl -k -b $cookie -F "period=$period1" -F "isNow=1" -F "itemids[0]=$ItemID" -F "type=0" -F "profileIdx=web.item.graph" -F "profileIdx2=29123" -F "width=1387" $url/chart.php > /opt/zabbix_alert_images/$ItemID.png

dingding脚本如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-from dingtalkchatbot.chatbot import DingtalkChatbotimport urllib2,chardet,random,stringimport sys,json,re,os,requests#from urllib.parse import urljoinfrom urlparse import urljoindef get_imgurl():        #获取监控项波动图片地址    ItemID = re.search('(告警监控项:.*\()(.*)(\))', sys.argv[1]).group(2)    png_url = zabbix_url + "chart.php?period=3600&isNow=1&itemids%5B0%5D=" + ItemID + "&type=0&profileIdx=web.item.graph&profileIdx2=29123&width=1387"    return ItemID if __name__ == '__main__':    defaultencoding = 'utf-8'    if sys.getdefaultencoding() != defaultencoding:        reload(sys)        sys.setdefaultencoding(defaultencoding)        zabbix_url = ';     itemid = get_imgurl()    os.environ['itemid']=str(itemid)    #根据itemid转换成png文件    os.system("/usr/lib/zabbix/alertscripts/a.sh ${itemid}")     with open("/opt/zabbix_alert_images/a.txt","a") as f:         f.write(sys.argv[1]+'\n')    #把png文件上传到webdav服务器中    os.chdir("/opt/zabbix_alert_images/")    #生成随机字符串改名    ran = ''.join(random.sample(string.ascii_letters + string.digits, 8))    os.rename(itemid+".png",ran+".png")    BASE_URL = ';    def put(name):        url = urljoin(BASE_URL, name)        response = requests.put(url, data=open(name, 'rb'))        response.raise_for_status()    file_png = ran + ".png"    put(file_png)    def del_file(name):        url = urljoin(BASE_URL, name)        response = requests.delete(url)        response.raise_for_status()    # WebHook地址    webhook = ';    # 初始化机器人小丁    xiaoding = DingtalkChatbot(webhook)    #发送带图片的钉钉告警信息    webdav_url = "; + file_png    MSG = ''    for i in sys.argv[1].split(','):        MSG += i + '\n\n'    xiaoding.send_markdown(title='xx监控', text='#### xx监控\n'                           '> 监控图表\n\n'                           '> ![实际图表]' + '(' + webdav_url + ')' + '\n'                           '> ######' + '\n\n' + MSG,                           is_at_all=True)    #清空日志文件    d = open("/opt/zabbix_alert_images/a.txt","r+")    d.truncate()

标签: #zabbixnginx进程监控脚本