安装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

zabbix报警-邮件-钉钉的更多相关文章

  1. zabbix监控系列(4)之zabbix报警邮件无法发送

    情况介绍 首先确保邮箱规则没有把报警邮件作为垃圾邮件拉黑了. 服务器断电重启后,发现zabbix报警邮件无法发送,断电之前是好好的,但是重启后不行了,于是查看maillog日志,发现这个错误: Hos ...

  2. zabbix报警邮件qq邮箱收不到的问题

    出现这样问题的根本原因是因为zabbix对中文支持不太友好,乱码导致了邮件无法正常接收. 一.解决zabbix邮件内容为附件 1.安装发送邮件的mailx 以及windows文件转unix文件的命令 ...

  3. zabbix的搭建及操作(4)实现邮件,钉钉,微信报警

    实现邮件报警 网页版邮箱中开启 POP3/SMTP/IMAP 生成授权码并记录 Server端安装配置邮件服务器 1.Yum安装邮件服务器 yum -y install mailx dos2unix ...

  4. zabbix创建钉钉报警

    https://juejin.im/post/5c8708eef265da2dd168a1c1 简介 家里搭建了zabbix去监控主机,邮件报警什么的都太麻烦了,所以直接使用钉钉机器人来提醒,下面是我 ...

  5. 钉钉机器人zabbix报警

    首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...

  6. elk报警监控之sentinl 钉钉+邮件告警

    注:我的elk sentinl版本都是6.5.1 前期知识 es的查询语法.es watcher使用方法. https://www.cnblogs.com/pilihaotian/p/5830754. ...

  7. zabbix钉钉报警

    我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人: 编写,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找) find / -iname a ...

  8. zabbix 配合钉钉群机器人(webhook) 报警

    首先建钉钉群,添加一个自定义机器人拿到webhook zabbix添加一个报警媒介 搞一个shell脚本来启动Python脚本(直接用zabbix调Python脚本不行,不知道什么原因) vim di ...

  9. zabbix利用python脚本发送钉钉报警

    #!/usr/bin/python # -*- coding: utf-8 -*- import requests import json import sys import os headers = ...

随机推荐

  1. bzoj 2079: [Poi2010]Guilds——结论题

    Description Zy皇帝面临一个严峻的问题,两个互相抵触的贸易团体,YYD工会和FSR工会,他们在同一时间请求在王国各个城市开办自己的办事处.这里有n个城市,其中有一些以双向马路相连,这两个工 ...

  2. 【Luogu】P3933 Chtholly Nota Seniorious

    [题意]将n*m矩阵分成两个区域,要求满足一定条件,求两区域内部极差较大值最小.n,m<=2000 [算法]二分 [题解]极差的数值满足单调性,所以考虑二分极差. 对于给定的极差,将所有数值排序 ...

  3. Vuejs - 花式渲染目标元素

    Vue.js是什么 摘自官方文档: Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库 ...

  4. js_判断当前url是否合法http(s)

    alert(checkURL('http:555')); //false function checkURL(URL) { var str = URL, Expression = /http(s)?: ...

  5. vue_使用npm搭建vue2.0脚手架开发环境

    前言: 在使用vue进行开发时需要搭建vue的运行环境,这里主要是使用淘宝镜像cnpm进行搭建vue的脚手架开发环境.主要是分为mac和window两个版本,两个环境的搭建都是大同小异. mac开发环 ...

  6. javascript执行上下文学习一

    原文: http://web.jobbole.com/84044/ http://blog.csdn.net/github_34514750/article/details/52901781 1.三种 ...

  7. Spring Boot:定制自己的starter

    在学习Spring Boot的过程中,接触最多的就是starter.可以认为starter是一种服务——使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boo ...

  8. Android控件——ToggleButton多状态按钮(实现灯泡的开关)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxoAAAFxCAIAAAB7jkm1AAAgAElEQVR4nOy9eXgUVb7/Dy7j3BnH8T

  9. bootstrap-select属性

    # 参考:https://blog.csdn.net/zxl_langya/article/details/79247307 # bootstrap-select属性: <select mult ...

  10. TCP之Nagle算法与延迟ACK

    (一)Nagle算法 为了减少网络中小分组的数目,减少网络拥塞的情况.Nagle算法要求在一条TCP连接上最多只能有一个未被确认的未完成小分组,在该分组ACK到达之前不能够发送其他的小分组,发送端需要 ...