百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

zabbix 钉钉报警带监控波动图(钉钉报警机器人)

suiw9 2024-11-16 00:34 21 浏览 0 评论

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

要做以下工作
1 在/opt/建立zabbix_alert_images目录,主要是存放报警时候存储的图片位置
2 http://192.168.1.2:81/脚本里地址是我自己搭建的一个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

Bash
#!/bin/bash
ItemID=$1
cookie=/tmp/zabbix-cookie.txt
name="admin"
password="zabbix"
url=http://10.1.1.1/zabbix
#设定工作目录 
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=939
period1=3600
stime1=`/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脚本如下:

Bash
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from dingtalkchatbot.chatbot import DingtalkChatbot
import urllib2,chardet,random,string
import sys,json,re,os,requests
#from urllib.parse import urljoin
from urlparse import urljoin
def 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 = 'http://10.1.1.1/zabbix/' 
    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 = 'http://192.168.1.2:81'
    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 = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx'
    # 初始化机器人小丁
    xiaoding = DingtalkChatbot(webhook)
    #发送带图片的钉钉告警信息
    webdav_url = "http://192.168.1.2:81/" + 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()

相关推荐

俄罗斯的 HTTPS 也要被废了?(俄罗斯网站关闭)

发布该推文的ScottHelme是一名黑客,SecurityHeaders和ReportUri的创始人、Pluralsight作者、BBC常驻黑客。他表示,CAs现在似乎正在停止为俄罗斯域名颁发...

如何强制所有流量使用 HTTPS一网上用户

如何强制所有流量使用HTTPS一网上用户使用.htaccess强制流量到https的最常见方法可能是使用.htaccess重定向请求。.htaccess是一个简单的文本文件,简称为“.h...

https和http的区别(https和http有何区别)

“HTTPS和HTTP都是数据传输的应用层协议,区别在于HTTPS比HTTP安全”。区别在哪里,我们接着往下看:...

快码住!带你十分钟搞懂HTTP与HTTPS协议及请求的区别

什么是协议?网络协议是计算机之间为了实现网络通信从而达成的一种“约定”或“规则”,正是因为这个“规则”的存在,不同厂商的生产设备、及不同操作系统组成的计算机之间,才可以实现通信。简单来说,计算机与网络...

简述HTTPS工作原理(简述https原理,以及与http的区别)

https是在http协议的基础上加了一层SSL(由网景公司开发),加密由ssl实现,它的目的是为用户提供对网站服务器的身份认证(需要CA),以至于保护交换数据的隐私和完整性,原理如图示。1、客户端发...

21、HTTPS 有几次握手和挥手?HTTPS 的原理什么是(高薪 常问)

HTTPS是3次握手和4次挥手,和HTTP是一样的。HTTPS的原理...

一次安全可靠的通信——HTTPS原理

为什么HTTPS协议就比HTTP安全呢?一次安全可靠的通信应该包含什么东西呢,这篇文章我会尝试讲清楚这些细节。Alice与Bob的通信...

为什么有的网站没有使用https(为什么有的网站点不开)

有的网站没有使用HTTPS的原因可能涉及多个方面,以下是.com、.top域名的一些见解:服务器性能限制:HTTPS使用公钥加密和私钥解密技术,这要求服务器具备足够的计算能力来处理加解密操作。如果服务...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

图解HTTPS「转」(图解http 完整版 彩色版 pdf)

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。...

HTTP 和 HTTPS 有何不同?一文带你全面了解

随着互联网时代的高速发展,Web服务器和客户端之间的安全通信需求也越来越高。HTTP和HTTPS是两种广泛使用的Web通信协议。本文将介绍HTTP和HTTPS的区别,并探讨为什么HTTPS已成为We...

HTTP与HTTPS的区别,详细介绍(http与https有什么区别)

HTTP与HTTPS介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的...

一文让你轻松掌握 HTTPS(https详解)

一文让你轻松掌握HTTPS原文作者:UC国际研发泽原写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。...

如何在Spring Boot应用程序上启用HTTPS?

HTTPS是HTTP的安全版本,旨在提供传输层安全性(TLS)[安全套接字层(SSL)的后继产品],这是地址栏中的挂锁图标,用于在Web服务器和浏览器之间建立加密连接。HTTPS加密每个数据包以安全方...

一文彻底搞明白Http以及Https(http0)

早期以信息发布为主的Web1.0时代,HTTP已可以满足绝大部分需要。证书费用、服务器的计算资源都比较昂贵,作为HTTP安全扩展的HTTPS,通常只应用在登录、交易等少数环境中。但随着越来越多的重要...

取消回复欢迎 发表评论: