如何配置Zabbix告警邮件通知并基于GPT提供解决方案?

news2025/4/17 21:24:24

一、概述
时间来到2023年末,距离Open AI发布GPT-3.5,首次向公众推出ChatGPT已经整整过去了一年。如今,以ChatGPT为代表的人工智能模型已然被应用众多领域,当然也包括IT运维。在IT运维中,通过对接运维监控平台,GPT已经实现为故障告警提供解决方案。本文将以Zabbix对接GPT为例,介绍如何配置Zabbix告警邮件(以QQ邮箱为例),并基于GPT提供运维解决方案。

本文主要实现的目标是:当Zabbix收到告警时,触发邮件通知,并在通知之前,将告警标题发送给互联网上的第三方免费GPT网站进行简单分析,获取相关解决方案。考虑到GPT回答问题需要一定时间,可考虑使用多个通知方式,一部分告警通过GPT获取解决方案,一部分告警直接通知,确保告警的及时性。下面让我们一起来看看如何实现吧。

注:

  1. 本次使用的环境是Zabbix 6版本;

  2. 本文用到了http://www.zaiwen.top/提供的免费GPT接口,该网站为公益免费网站。

二、获取邮箱第三方授权密钥
首先,在邮箱上设置第三方授权密钥。点击设置->账号->管理服务。

在这里插入图片描述
点击生成授权码:在这里插入图片描述
在这里插入图片描述
三、配置告警媒介
创建一个报警媒介类型:

名称:邮件通知-gpt

类型:脚本

脚本名称:CXHEmail.py

脚本参数:依次{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}在这里插入图片描述
通知内容设置:(本文只设置了告警触发时的通知内容,可按需设置其他类型的通知内容)

Message type:问题

主题:【告警通知】: {EVENT.NAME}

消息:

告警主机业务名称: {HOST.NAME}

主机IP:{HOST.IP}

告警等级: {EVENT.SEVERITY}

监控项目1:{ITEM.NAME1}

监控取值1:{ITEM.LASTVALUE1}

监控项目2:{ITEM.NAME2}

监控取值2:{ITEM.LASTVALUE2}

告警时间:{EVENT.DATE} {EVENT.TIME}在这里插入图片描述
选项默认即可:在这里插入图片描述
四、放置告警通知脚本
将CXHEmail.py脚本防置在Zabbix的告警媒介目录下(告警媒介目录主要为Zabbix配置文件zabbix_server.conf里的AlertScriptsPath参数设置的目录)。

CXHEmail.py脚本内容:(其中myemail参数需要填写发送邮件的QQ邮箱号,password参数填写QQ邮箱第三方授权码)

#!/usr/bin/python3

-- coding: utf-8 --

from email.mime.text import MIMEText

from email.header import Header

#from smtplib import SMTP_SSL

from smtplib import SMTP

import sys

import requests

import json

smtpaddr = ‘smtp.qq.com’

myemail=‘xxxxx@qq.com’ ##发送邮件的QQ

password=‘xxx’ ##填写登陆客户端的授权码,在邮箱里生成同时需要打开POP3,IMAP服务

#f = open(‘/usr/local/zabbix/.passwd’,‘r’)

#password = f.readline().strip()

####gpt_url = “https://aliyun.zaiwen.top/message”

gpt_url = “https://bak.cwjiaoyu.cn/message_local”

recvmail=sys.argv[1] ##发送邮件给谁

subject=sys.argv[2] ## 发送的主题

content=sys.argv[3] ##发送的内容

content += ‘\n’

try:

panduan = True  #如果返回的是并发数过高 则重试

while  panduan:

    payload={"message":[{"role":"user","content":"请详细列出关于以下运维问题的推荐解决方案是什么:" + str(subject)}],"mode":"chatglm","key":"null"}

    headers = {

      'Content-Type': 'application/json',

      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36',

      'Host':'jump.zaiwen.top',

      'Origin':'http://www.zaiwen.top',

      'Referer':'http://www.zaiwen.top/'

    }

    response = requests.request("POST", gpt_url, headers=headers, data=json.dumps(payload,ensure_ascii=False).encode('utf-8'))

    if response.text != '[1302][您当前使用该API的并发数过高,请降低并发,或联系客服增加限额。]':

        panduan = False

        content += response.text



#去掉空行

lines = content.split('\n')

lines = [line for line in lines if line.strip() != '']

content = '\n'.join(lines)



print(content)

msg = MIMEText("""%s"""%(content), "plain", "utf-8")    ##发送的内容

msg['Subject'] = Header(subject, 'utf-8').encode()

msg['From'] = myemail

msg['To'] =  recvmail

print(msg)



#smtp = SMTP_SSL( smtpaddr )

smtp = SMTP(smtpaddr,"587")

smtp.starttls()    #启用安全传输模式

smtp.login(myemail, password)

smtp.sendmail(myemail, recvmail.split(','), msg.as_string())

smtp.quit()

print("success")

except Exception as e:

print("fail: "+str(e))

在这里插入图片描述
五、配置告警通知接收用户
在Zabbix界面上,点击管理->用户->接收通知的用户名->报警媒介->添加。

类型:邮件通知-gpt

收件人:告警通知接收用户的邮箱号在这里插入图片描述
六、配置告警通知动作
在Zabbix界面上,点击配置->动作->Trigger actions->创建动作。

名称:邮件告警通知-gpt

条件:按照自己的想法进行设置。在这里插入图片描述
点击操作标签页,添加一个操作。

Operation:发送消息

设置告警通知接收用户或用户组。

仅送到:邮件通知-gpt在这里插入图片描述
本文只设置了告警触发时的操作,可按需设置恢复操作和更新操作。在这里插入图片描述
七、验证邮件通知结果
人工模拟一个告警,触发一次邮件告警通知,或等待实际告警时,观察收到的邮件内容。如下,成功实现基于GPT提供运维解决方案并发送告警邮件。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上就是本期的全部内容。大家好,我是乐乐,专注运维技术研究与分享,关注我学习更多Zabbix等使用技巧,更多运维问题、Zabbix部署需求、Zabbix二开需求还可以到乐维社区留言。
乐维社区是运维监控领域的垂直社区,专注打造Zabbix等技术栈的线上交流与共享平台,每周三下午,社区关联答疑群还提供免费专家在线答疑,欢迎小伙伴们加入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1356158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人生重开模拟器

前言: 人生重开模拟器是前段时间非常火的一个小游戏,接下来我们将一起学习使用c语言写一个简易版的人生重开模拟器。 网页版游戏: 人生重开模拟器 (ytecn.com) 1.实现一个简化版的人生重开模拟器 (1) 游戏开始的时…

【JAVA】深入了解 Java 中的 DelayQueue

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 Java中的DelayQueue是一个强大的工具,常用于处理需要延迟执行的任务或具有过期时间的元素。通过实现Delayed接口&#x…

MySQL慢查询日志分析(慢查询日志)

一、背景   MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。 &em…

CAAC无人机操作证考证报名流程及白底证件照片制作方法

在这个无人机技术日新月异的时代,拥有一张CAAC民用无人机操作证不仅意味着你能够合法地在天空翱翔,也象征着你对飞行技术的尊重和对规章制度的遵守。如果你怀揣着成为无人机飞行员的梦想,那么,让我们一起揭开CAAC民用无人机操作证…

Docker安装Elasticsearch,kibana,ik分词器

安装elasticsearch 下载elasticsearch,查看版本:Elasticsearch Guide [8.11] | Elastic docker pull elasticsearch:7.17.16 查看镜像是否下载成功 docker images 创建网络,因为需要部署kibana容器,要让es和kibana容器互联 …

由浅入深理解C#中的事件

目录 本文较长,给大家提供了目录,可以直接看自己感兴趣的部分。 前言有关事件的概念示例​ 简单示例​ 标准 .NET 事件模式​ 使用泛型版本的标准 .NET 事件模式​ 补充总结 参考前言 前面介绍了C#中的委托,事件的很多部分都与委托…

MySQL——事物

目录 一.发现问题 二.什么时事物 三.事务提交方式 四.事物的常规操作方式 五. 事务隔离级别 1.如何理解隔离性 2.隔离级别 3.查看与设置隔离性 4.读未提交【Read Uncommitted】 5.读提交【Read Committed】 6.可重复读【Repeatable Read】 7.串行化【serializabl…

A01、class文件简要说明

关于 .class 文件的相关结构说明 1、字节码文件相关名词 类型名称数量u4magic1u2minor_version1u2major_version1u2constant_pool_count1cp_infoconstant_poolconstant_pool_count - 1u2access_flags1u2this_class1u2super_class1u2interfaces_count1u2interfacesinterfaces_c…

vue登录 滑动验证,记住密码及AES加密解密

相关依赖 npm install js-cookie //js-cookie npm install crypto-js //AES加密解密 npm install -S vue-puzzle-vcode //滑动验证 vue2 <template><div class"login"><div class"login-box"><div class"imgbox">&…

进阶学习——Linux系统——程序和进程

目录 一、程序和进程的关系 1.程序 2.进程 2.1线程 2.2协程 3.进程与线程的区别 4.总结 4.1延伸 5.进程使用内存的问题 5.1内存泄漏——Memory Leak 5.2内存溢出——Memory Overflow 5.3内存不足——OOM&#xff08;out of memory&#xff09; 5.4进程使用内存出现…

听GPT 讲Rust源代码--compiler(11)

File: rust/compiler/rustc_mir_transform/src/simplify.rs 在Rust源代码中&#xff0c;rust/compiler/rustc_mir_transform/src/simplify.rs文件是Rust编译器中一系列进行MIR&#xff08;中间表示&#xff09;简化的转换的实现。MIR是Rust编译器中用于进行优化和代码生成的中间…

PDF.js实现搜索多个不同的关键词高亮显示效果

static\PDF\web\viewer.js 392行左右 // 自定义搜索关键词---------------------------------------- this.searchKeywords keyword > {if (typeof PDFViewerApplication ! undefined) {PDFViewerApplication.eventBus.dispatch(find, {query: keyword,caseSensitive: fal…

HTML5+CSS3⑥——CSS三大特性、表格、列表

CSS特性 继承性 层叠性 优先级 叠加计算规则 表格 表格结构标签 合并单元格 列表 无序列表 有序列表 定义列表

「数据结构」八大排序1

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;初阶数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 文章目录 &#x1f349;插入排序&#x1f34c;直接插入排序&#x1f95d;复杂度及稳定性 &#x1f34c;希尔排序&#x1f95d;预…

Required request body is missing报错及解决

今天&#xff0c;我在尝试调用后端接口展示文章数据时遇到了错误&#xff0c;错误原因是请求体缺失&#xff0c; 但是我明明传了参数 然后我找了很久错误原因&#xff0c;发现在之前跟着写的一个差不多的功能时&#xff0c;请求方式是post 而我写的确是get 将get改为post后&…

【DevOps-06】Jenkins实现CI/CD操作

一、简要说明 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 二、准备Springboot工程 1、IDEA新建工程 2、填写项目工程信息 3、选择Springboot版本…

【MATLAB】EEMD_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 EEMD-LSTM神经网络时序预测算法是一种结合了扩展经验模态分解&#xff08;EEMD&#xff09;和长短期记忆神经网络&#xff08;LSTM&#xff09;的时间序列预测方法。 EEMD是一种改进的EM…

Numpy基础

目录&#xff1a; 一、简介:二、array数组ndarray&#xff1a;1.array( )创建数组&#xff1a;2.数组赋值和引用的区别&#xff1a;3.arange( )创建区间数组&#xff1a;4.linspace( )创建等差数列&#xff1a;5.logspace( )创建等比数列&#xff1a;6.zeros( )创建全0数组&…

云消息队列 Kafka 版生态谈第一期:无代码转储能力介绍

作者&#xff1a;娜米 云消息队列 Kafka 版为什么需要做无代码转储 云消息队列 Kafka 版本身是一个分布式流处理平台&#xff0c;具有高吞吐量、低延迟和可扩展性等特性。它被广泛应用于实时数据处理和流式数据传输的场景。然而&#xff0c;为了将云消息队列 Kafka 版与其他数…

C++第四天

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…