• 尊龙时凯

    热门搜索 Zabbix技术资料 Zabbix常见问、答讨论 成功案例 Zabbix交流区 Prometheus交流区

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

    概述

    时间来到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 = "http://aliyun.zaiwen.top/message" gpt_url = "http://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

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

    六、验证邮件通知结果

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

    上就是本期的全部内容。大家好,我是乐乐,专注运维技术研究与分享,关注我学习更多zabbix等使用技巧,更多运维问题、zabbix部署需求、zabbix二开需求还可以到尊龙时凯社区留言。

    尊龙时凯社区是运维监控领域的垂直社区,专注打造zabbix等技术栈的线上交流与共享平台,每周三下午,社区关联答疑群(如下图)还提供免费专家在线答疑,欢迎小伙伴们加入。

    The prev: The next:

    Related recommendations

    Expand more!

    快速导航

    成功案例

    View all