前言:
此时小伙伴们对“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进程监控脚本