乐维社区
作者乐维社区·2024-01-05 09:11
研发工程师·广东乐维软件有限公司

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

字数 3132阅读 541评论 0赞 0

作者 广东乐维软件有限公司 许远

概述**

时间来到2023年末,距离Open AI发布GPT-3.5,首次向公众推出ChatGPT已经整整过去了一年。如今,以ChatGPT为代表的人工智能模型已然被应用众多领域,当然也包括IT运维。在运维 实践 中,通过对接运维监控平台,GPT已经实现为故障告警提供解决方案。
本文将以Zabbix对接GPT为例,当Zabbix告警时,触发邮件通知,并在通知之前,将告警标题发送给互联网上的第三方免费GPT网站进行简单分析,并获取推荐的解决方案。
注:

  1. 本次使用的环境是Zabbix 6版本 ;
  2. 本文用到了http://www.zaiwen.top/提供的免费GPT接口, 此 网站 为 公益免费 网站;
  3. 考虑到GPT回答问题需要一定时间,可考虑使用多个通知方式,一部分告警通过GPT获取解决方案,一部分告警直接通知,确保告警的及时性。

一、获取邮箱第三方授权密钥

以QQ邮箱为例。首先, 在邮箱上设置第三方授权密钥。点击设置->账号->管理服务。

点击生成授权码:

二、配置告警媒介**

创建一个报警媒介类型:
名称:邮件通知- 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':
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

本文只设置了告警触发时的操作,可按需设置恢复操作和更新操作。

六、验证邮件通知结果**

人工模拟一个告警,触发一次邮件告警通知,或等待实际告警时,观察收到的邮件内容。




以上就是本期的全部内容。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广