(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

这篇具有很好参考价值的文章主要介绍了(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

近期在琢磨Zabbix邮箱报警的功能,但是网上的教程通常是4.0或5.0版本Zabbix,并使用Python2.7环境,运行在新版本Zabbix6.0上有颇多问题,为此我基于原先教程修改基于Zabbix6.0并使用Python3+的解决方案。期间遇到不少坑,特此分享。

Zabbix自带报警

Zabbix是自带的邮箱的报警功能有限,比如不能实现诸如邮件插入图片的功能,而可以使用执行脚本功能则可以调用本地程序,调用Python脚本从而实现许多如发送企业微信、钉钉使用的功能。

前端设置

报警媒介

在zabbix中保存脚本文件的目录为/usr/lib/zabbix/alertscripts/,目前4.0\5.0\6.0都通用,将shell脚本文件保存于此可以直接在报警媒介类型调用。
(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

参数需要传递给脚本,对于着Shell脚本中的$1$2$3

{ALERT.SENDTO} //发件人(对应着用户\报警媒介中配置的发件人)
{ALERT.SUBJECT} //主题(对应着主题模版)
{ALERT.MESSAGE} //消息内容(对应着消息模版)

发件人
(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

主题\消息内容
(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

报警媒介消息模版

在消息模版中,添加问题发生

// 问题发生
// 主题
发生故障:服务器:{HOSTNAME}->{TRIGGER.NAME}警告!
// 消息
监控ID:{ITEM.ID}
告警主机:{HOST.NAME}
告警主机:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE}
事件ID:{EVENT.ID}

添加问题恢复

//问题恢复
// 主题
问题恢复:服务器:{HOST.NAME}->{TRIGGER.NAME}已恢复!
// 消息
监控ID:{ITEM.ID}
告警主机:{HOST.NAME}
告警主机:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE}
事件ID:{EVENT.ID}

(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

设置用户报警媒介

在管理\用户<用户名>\报警媒介
如果有多个收件人,用,分割,我在python中做了定义
(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

设置动作

要想要脚本触发问题后执行还需要设置
(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

脚本实现

涉及到两个脚本

Shell脚本/usr/lib/zabbix/alertscripts/sedmail.zabbix.sh
主要是用于实现连接Python脚本,测试、删除图片
创建/usr/lib/zabbix/alertscripts/graph
Python脚本
主要是实现Zabbix中图片的下载、邮件发送

Shell脚本

新版本的Zabbix6.0貌似不支持直接执行Python脚本,为此我使用一个shell脚本作为中转,且可实现简单的测试、删除图片文件。
(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

/usr/lib/zabbix/alertscripts/sedmail.zabbix.sh

#!/bin/bash
cd `dirname $0`
echo "{ALERT.SENDTO} = $1" > debug.txt
echo "{ALERT.SUBJECT} = $2" >> debug.txt
echo "{ALERT.MESSAGE} = $3" >> debug.txt
python3 sedmail.zabbix.py "$1" "$2" "$3" >> debug.txt
echo "shell success" >> debug.txt
find graph -type f -name "*.png" | xargs rm

Python脚本

主要是实现Zabbix中图片的下载、邮件发送,本Python脚本使用Python3环境,如果你需

脚本过程

  1. 解析传递过来的主题{ALERT.SENDTO}主题{ALERT.SUBJECT}消息{ALERT.MESSAGE}消息中的监控ID:后的数字,即itemid,此项极为重要
itemid=re.search(r'监控ID:(\d+)',sys.argv[3]).group(1)
# 如果你改了消息模版记得修改一下search匹配规则
  1. 登录Zabbix:使用Post登录http://zabbix:8080/index.php
 "name":user, # 用户
 "password":password, # 密码
 "autologin":"1", # 30天内自动登录
 "enter":"登录", # 请注意这个对应你语言,如果是英文为login on,可以抓包看看

(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

  1. 故障的统计图下载,对应着先前的itemid参数,可以使用get请求http://zabbix:8080/chart.php后带的参数
 "from" :"now-30m",
 "to" : "now",
 "itemids[0]" : itemid,# 请注意,Zabbix6.0中是itemid[0],在更老的4.0\5.0使用的itemid
 "width" : "300",
 #对应的url,以itemid[0]=79672为例
 http://zabbix:8080/chart.php?from=now-30m&to=now&itemids%5B0%5D=79672&width=300

注意需要在登录的前提下,并且login的headers消息头一致,不然对提示错误
文件会保存在graph_path='/usr/lib/zabbix/alertscripts/graph'如果没有此文件夹需要创建

完整脚本

/usr/lib/zabbix/alertscripts/sedmail.zabbix.py

#!/usr/bin/python3
#coding=utf-8
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import smtplib,sys,os,time,re,requests,logging
from smtplib import SMTP

user='Admin'    #定义zabbix用户名
password='password'    #定义zabbix用户密码
graph_path='/usr/lib/zabbix/alertscripts/graph'   #定义图片存储路径
graph_url='http://127.0.0.1:8080/chart.php'     #定义图表的url
loginurl="http://127.0.0.1:8080/index.php"          #定义登录的url
host='127.0.0.1'
to_email=sys.argv[1].split(',')    #传入的第一个参数为收件人邮箱
subject=sys.argv[2]  #传入的第二个参数为邮件主题
subject=subject.encode('utf-8').decode('utf-8')
smtp_host = 'smtp.xxx.net'  #定义smtp主机地址
from_email = 'alittlemc@xxx.com'     #定义发件人地址
mail_pass = 'xxx'       #发件人邮箱校验码\密码

def get_itemid():
    #获取报警的itemid
    itemid=re.search(r'监控ID:(\d+)',sys.argv[3]).group(1)
    return itemid

def get_graph(itemid):
    #获取报警的图表并保存
    session=requests.Session()   #创建一个session会话
    try:
        loginheaders={
        "Host":host,
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
        }
        #定义请求消息头

        payload = {
        "name":user,
        "password":password,
        "autologin":"1",
        "enter":"登录",
        }
        #定义传入的data
        login=session.post(url=loginurl,headers=loginheaders,data=payload)
        # print(login.text)
        #进行登录
        graph_params={
            "from" :"now-30m",
            "to" : "now",
            "itemids[0]" : itemid,
            "width" : "300",
        }
        # print(itemid)
        # http://zabbix:8080/chart.php?from=now-1m&to=now&itemids%5B0%5D=79672

        #定义获取图片的参数
        graph_req=session.get(url=graph_url,params=graph_params,headers=loginheaders)
        #发送get请求获取图片数据
        time_tag=time.strftime("%Y%m%d%H%M%S", time.localtime())
        graph_name='baojing_'+time_tag+'.png'
        #用报警时间来作为图片名进行保存
        graph_name = os.path.join(graph_path, graph_name)
        #使用绝对路径保存图片
        with open(graph_name,'wb') as f:
            f.write(graph_req.content)
            #将获取到的图片数据写入到文件中去
        return graph_name

    except Exception as e:
        # print(e)
        return False
def text_to_html(text):
    #将邮件内容text字段转换成HTML格式
    d=text.splitlines()
    #将邮件内容以每行作为一个列表元素存储在列表中
    html_text=''
    for i in d:
        i='' + i + '<br>'
        html_text+=i + '\n'
    #为列表的每个元素后加上html的换行标签
    return html_text

def send_mail(graph_name):
    #将html和图片封装成邮件进行发送
    msg = MIMEMultipart('related')  #创建内嵌资源的实例

    with open(graph_name,'rb') as f:
        #读取图片文件
        graph=MIMEImage(f.read())  #读取图片赋值一个图片对象
    graph.add_header('Content-ID','imgid1')  #为图片对象添加标题字段和值
    text=text_to_html(sys.argv[3])
    html="""
    <html>
      <body>
      %s  <br><img src="cid:imgid1">
      </body>
    </html>
    """ % text
    html=MIMEText(html,'html','utf-8')  #创建HTML格式的邮件体
    msg.attach(html)   #使用attach方法将HTML添加到msg实例中
    msg.attach(graph)  #使用attach方法将图片添加到msg实例中
    msg['Subject'] = subject
    msg['From'] = from_email
    try:
        server=SMTP(smtp_host,"587")   #创建一个smtp对象
        server.starttls()    #启用安全传输模式
        server.login(from_email,mail_pass)  #邮箱账号登录
        for x in to_email:
            server.sendmail(from_email,x,msg.as_string())  #发送邮件
        server.quit()   #断开smtp连接
    except smtplib.SMTPException as a:
        print(a)

def run():
    itemid=get_itemid()
    graph_name=get_graph(itemid)
    send_mail(graph_name)

if __name__ =='__main__':
    run()
    print('success',sys.argv[1],sys.argv[2],sys.argv[3])

测试

可以直接使用报警媒介的测试功能,对应的传输主题{ALERT.SENDTO}主题{ALERT.SUBJECT}消息{ALERT.MESSAGE}消息
(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警文章来源地址https://www.toymoban.com/news/detail-820430.html

到了这里,关于(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Zabbix +Grafana 服务器监控体系

    声明 使用的是zabbix6.0.7版本。Mysql 8.0.26。演示使用的系统镜像为rocky linux 8.6 按照官方文档来会容易出现连接超时等问题。所以尽量使用国内镜像站 1、进入 cd /etc/yum.repo下,手动创建zabbix.repo 清除yum 缓存 !!!!!!注意:如果您是centos 7版本。请使用以下yum 源!!!!!!

    2024年02月09日
    浏览(26)
  • Zabbix监控联想服务器的配置方法

    图片 随着 科技的发展,对于数据的敏感和安全大部分取决于对硬件性能、故障预判的监测,由此可见实时监测保障硬件的安全很重要,从而衍生了很多对硬件的监测软件,Zabbix就一个不错的选择。 开源 开源 开源! zabbix是一个基于WEB界面提供分布式系统监视以及网络监视功

    2024年02月06日
    浏览(38)
  • Zabbix服务器一些常见问题及处理

    如果您的Zabbix服务器无法启动,请首先检查Zabbix服务器的配置文件是否正确,以及Zabbix服务器使用的端口是否被其他进程占用。您可以使用以下命令检查端口是否被占用: 如果端口被占用,请关闭占用该端口的进程或使用其他可用端口。 如果您的Zabbix服务器无法连接到数据

    2024年02月11日
    浏览(29)
  • 利用zabbix通过IPMI监控服务器硬件

    IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标准由英特尔、惠普、NEC、美国戴尔电脑和SuperMicro等公司制定。用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、

    2024年04月28日
    浏览(32)
  • Minecraft 1.20.1 Forge服务器保姆级搭建教程 (使用mcsm面板 | 两种启动方式)

    使用 Linux 云服务器部署 Minecraft 1.20.1 Forge 服务器 一台 Linux 服务器 :用来做 mc 服务器 一个用来连接服务器的终端工具(如 Xshell) :用来输入命令 Docker(可选,如果你不知道这是什么就不用管了~) 宝塔面板或 Xftp(可选,能可视化管理文件,推荐 xftp,跟 Xshell 搭配比较方

    2024年02月05日
    浏览(58)
  • 【分布式应用】zabbix:代理服务器、及监控其它应用

    分布式监控的作用: 分担 server 的集中式压力 解决多机房之间的网络延时问题 agent -- proxy -- server 配置 Mariadb yum源 初始化数据库 创建数据库并指定字符集 创建 zabbix 数据库用户并授权 导入数据库信息 修改 zabbix-proxy 配置文件 在所有主机上配置 hosts 解析 点击左边菜单栏【配

    2024年02月13日
    浏览(32)
  • 安装及配置zabbix_agent代理端(监控FTP服务器)

    监控agent的linux主机我们在之前的文章里已经做好了 现在直接安装ftp服务即可             监控成功

    2024年02月16日
    浏览(29)
  • 美国Linux服务器安装Grafana和配置zabbix数据源的教程

    美国Linux服务器的Grafana工具是跨平台、开源、时序和可视化面板Dashboard监控平台工具,是在日常管理中帮忙提高效率的实用工具,可以通过将采集的美国Linux服务器系统数据查询后,进行可视化的展示及通知,本文小编就来介绍下美国Linux服务器安装Grafana工具和配置zabbix数据

    2024年02月13日
    浏览(40)
  • Java【网络编程2】使用 TCP 的 Socket API 实现客户端服务器通信(保姆级教学, 附代码)

    📕各位读者好, 我是小陈, 这是我的个人主页 📗小陈还在持续努力学习编程, 努力通过博客输出所学知识 📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽 📙 希望我的专栏能够帮助到你: JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统

    2024年02月05日
    浏览(45)
  • 如何把本地flask项目(框架)上传到服务器(Linux),并后台持续运行(包括requirements文件生成,python项目与域名绑定,保姆级教程)

     2023年中旬,参加了一个比赛,需要搭建一个网站。在不断探索琢磨之后,搭建了一个基于flask的web。直接上干货: 一、首先,在本地准备好自己的flask项目。包括最基本的三个文件: 然后准备生成requirements.txt文件,这个文本文件会告诉服务器你的项目运行所需要的环境,即

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包