安装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. 【bzoj1594-猜数游戏】线段树

    题解: 矛盾只有两种情况: 一.先前确定了x在区间(l,r),但是现在发现x在区间(l1,r1),并且两个区间不相交. 二.一个区间的最小值是x,这个区间中有一个子区间的最小值比x更小. 首先可以明确 ...

  2. Vuejs - 单文件组件

    为什么需要单文件组件 在之前的实例中,我们都是通过 Vue.component 或者 components 属性的方式来定义组件,这种方式在很多中小规模的项目中还好,但在复杂的项目中,下面这些缺点就非 ...

  3. HDU - 5327 Olympiad(一维前缀和)

    Olympiad Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem ...

  4. 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  5. ASP.NET 设置DropDownList的当前选项

    1.通过显示字符Text DropDownList.Items.FindByText("你的值").Selected=true; 如果在设置之前,进行过设置,应用如下格式: Dro ...

  6. ButterKnife用法详解

    http://www.cnblogs.com/zhaoyanjun/p/6016341.html 本文出自[赵彦军的博客] 前言 ButterKnife 简介 ButterKnife是一个专注于And ...

  7. TensorFlow中get_variable共享变量调用

    import tensorflow as tf with tf.variable_scope('v_scope',reuse=True) as scope1: Weights1 = tf.get_va ...

  8. perl中设置POST登录时的重定向

    默认地, perl提交post登录时是不会重定向的 要让它重定向, 可以用如下方法: my $cookie = HTTP::Cookies->new(); push @{$ua->requ ...

  9. 【Python学习笔记】有关包的基本知识

    python的包(package)是一个有层次的文件目录结构.它定义了一个由模块和子包组成的Python应用程序执行环境. AAA/ __init__.py bbb.py CCC/ __init__. ...

  10. python基础===函数的几个要点

    函数 可接受任意数量参数的函数 位置参数   和  关键字参数 为了能让一个函数接受任意数量的位置参数,可以使用一个*参数. def avg(first, *r): return (first + s ...