弹霄博科

小谈谈一亩三分地



将 ChatGPT 接入 Zabbix 为告警提供修复建议


发布日期: 2023/02/12
更新日期: 2023/02/12
作者: 小谈谈
分类: 运维
标签: zabbix, chatgpt, openai, zabbix 告警
阅读时间: 4 分钟
字数: 1041 字


ChatGPT 是最近很火的 AI 智能机器人程序,2 个月活跃用户突破 1 亿,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

Zabbix 开源社区推文 实测|ChatGPT 对 Zabbix 用户有什么影响? 展示了将一些 Zabbix 相关的问题丢给 ChatGPT 处理来提升工作效率。

既然都说到这里了,那我们能不能将 Zabbix 告警信息丢给 ChatGPT,在告警的第一时间先给出一份可以参考的建议呢?

所以,基于 Zabbix 能力,我们将告警发给了 ChatGPT,并通过企业微信内部应用的方式给出告警信息和修复建议。效果如下图:

[图片: 60631bdd8e369acdb33923b904551db]
https://static.txisfine.cn/upload/60631bdd8e369acdb33923b904551db.png/pkwatermark

准备

因为需要接入 ChatGPT,必须要现有一个 OpenAI 的账号,AirCode 是一个 nodejs 运行时的 Serverless 平台,主要做 OpenAI 的 APIProxy,因为毕竟是国际服务,网络抖动会影响服务质量。

如何注册网络上很多资料,这里不在赘述。

还要准备一个 Zabbix 企业微信内部应用,可以参考 Zabbix 企业微信内部应用发送告警 这个明确了我们的告警和建议会发到哪里。

食用指南

获取 OpenAI 的 KEY

登录到 OpenAI,访问Account API Keys - OpenAI API,点击 Create new secret key,创建一个新的 key,并保存备用。

[图片: 20230212091730]
https://static.txisfine.cn/upload/20230212091730.png/pkwatermark

创建一个 AirCode 项目

登录到 AirCode,创建一个新项目。

[图片: 20230212091910]
https://static.txisfine.cn/upload/20230212091910.png/pkwatermark

给项目命名一下,Runtime 和 Region 默认就好,点击 Create 进入编辑区。

1.创建一个文件,比如 main.js,将 bh1xaq/ChatGPT-zabbixAlert 中的 openai.js 拷贝进去。

[图片: 20230212093330]
https://static.txisfine.cn/upload/20230212093330.png/pkwatermark

2.安装 axios 依赖,在 Dependencies 下面搜axios,找最新版本安装即可。

[图片: 20230212093408]
https://static.txisfine.cn/upload/20230212093408.png/pkwatermark

3.配置环境变量,我们需要把 OpenAI 的 KEY 配置到环境变量,同时为了您的 API 更安全,我们还需要协商一个 Zabbix 请求我们 APIProxy 的 KEY。

[图片: 20230212093111]
https://static.txisfine.cn/upload/20230212093111.png/pkwatermark

OPENAIKEY - 获取到的 OpenAI 的 KEY ZAKEY - Zabbix 请求 APIProxy 的 KEY(需要自定义)

4.发布代码,并获得 APIProxy 地址备用。点击 Deploy,填写 Commit,发布代码。下面红框的位置就是 APIProxy 地址。

[图片: 20230212093629]
https://static.txisfine.cn/upload/20230212093629.png/pkwatermark

配置 Zabbix 通知媒介

1.登录 Zabbix 管理端,选择报警媒介类型创建媒体类型

[图片: 20230212100207]
https://static.txisfine.cn/upload/20230212100207.png/pkwatermark

类型:WebHook 参数: - Agentid:从企业微信获得 - Corpid:从企业微信获得 - Corpsecret:从企业微信获得 - Zakey:Zabbix 请求 APIProxy 的 KEY - Openaiurl: OpenAI APIProxy 地址 - Message:{ALERT.MESSAGE} - Subject:{ALERT.SUBJECT} - To:{ALERT.SENDTO}

超时时间:60s

粘贴脚本,将 bh1xaq/ChatGPT-zabbixAlert 中的 zabbix.js 拷贝进去。

2.创建消息模板。

添加故障和故障恢复两个类型的消息。以下供参考。

```
故障: {EVENT.NAME}
定位ID:{EVENT.ID}
出现时间:{EVENT.DATE} {EVENT.TIME}
所属设备:{HOST.NAME}
严重程度:{EVENT.SEVERITY}
{TRIGGER.URL}

故障恢复:{EVENT.RECOVERY.NAME}
定位ID:{EVENT.ID}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
故障时长:{EVENT.DURATION}
影响设备:{HOST.NAME}
严重程度:{EVENT.SEVERITY}
{TRIGGER.URL}
```

保存即可,我们可以进行一下测试。

[图片: 20230212100052]
https://static.txisfine.cn/upload/20230212100052.png/pkwatermark

3.告警信息定向推送给谁,需要一个 TOUSER 的属性,在这里添加即可。

[图片: 20230212100246]
https://static.txisfine.cn/upload/20230212100246.png/pkwatermark

4.将报警媒介关联到触发器动作中。

[图片: 20230212100506]
https://static.txisfine.cn/upload/20230212100506.png/pkwatermark

特别说明

AI 无法代替人类,提供的建议仅供修复参考,请运维工程师分析合理性后进行执行,以防止扩大故障。

本项目使用的 OpenAI 模型为 text-davinci-003

项目参考


文章封面 BY Zac Wolff on Unsplash