当前位置: 首页 > article >正文

zabbix报警结合AI进行智能分析

zabbix报警结合AI进行智能分析

  • 一、功能介绍
  • 二、实现流程
    • 1、登录kimi api获取api key
    • 2、安装openssl1.1.1版本
      • 2.1 安装openssl 1.1.1
      • 2.2 查看openssl版本
    • 3、编译安装python-3.12
      • 3.1 安装python3
      • 3.2 测试正常加载ssl模块
    • 4、配置国内pip仓库
    • 5、安装python脚本需要的requests库
    • 6、编写python脚本
    • 7、将脚本复制到zabbix路径
    • 8、返回zabbix web前端进行报警配置
      • 8.1 创建报警媒介
      • 8.2 在Admin用户关联报警媒介
      • 8.3 创建报警动作
    • 9、测试验证

一、功能介绍

为了协助运维人员加速故障处理修复问题,在配置zabbix报警时,可以通过以脚本的方式调用AI api(本案例中采用的是调用kimi api的方式,尝试调用过deepseek,由于deepseek经常出现服务器繁忙, 经常会出现zabbix调用脚本超时的问题)将zabbix报警信息发送到AI进行智能分析,分析过后,将AI智能分析结果以邮件的方式发送到运维人员处,可协助运维人员快速定位故障。

二、实现流程

1、登录kimi api获取api key

https://platform.moonshot.cn
在这里插入图片描述

2、安装openssl1.1.1版本

由于centos7.9系统自带的openssl为1.0版本,后续调用kimi api时,需要python中加载1.1.1版本的openssl

2.1 安装openssl 1.1.1

[root@localhost ~]# yum -y groupinstall "Development Tools"
[root@localhost ~]# yum -y install wget zlib-devel perl-core

[root@localhost ~]# wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz
[root@localhost ~]# tar xf openssl-1.1.1t.tar.gz 
[root@localhost ~]# cd openssl-1.1.1t/
[root@localhost ~]# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl 
[root@localhost ~]# make
[root@localhost ~]# make install
[root@localhost ~]# vim /etc/profile
export PATH=$PATH:/usr/local/openssl/bin
export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH

[root@localhost ~]# source /etc/profile
[root@localhost ~]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/openssl/lib

[root@localhost ~]# ldconfig

2.2 查看openssl版本

[root@localhost shell_gpt]# openssl version
OpenSSL 1.1.1t  7 Feb 2023

3、编译安装python-3.12

注意:安装python3时需要注意加载openssl模块

3.1 安装python3

[root@localhost shell_gpt]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
[root@localhost shell_gpt]#  tar xf Python-3.12.8.tar.xz 
[root@localhost shell_gpt]#  cd Python-3.12.8/
[root@localhost shell_gpt]#  ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
[root@localhost shell_gpt]#  make 
[root@localhost shell_gpt]#  make install
[root@localhost ~]# vim /etc/profile
export PATH=$PATH:/usr/local/python3/bin

[root@localhost ~]# source /etc/profile
[root@localhost ~]# python3 --version
Python 3.12.8

3.2 测试正常加载ssl模块

[root@localhost ~]# python3
Python 3.12.8 (main, Mar 11 2025, 17:59:42) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> import ssl

>>> exit()
[root@localhost ~]# 

4、配置国内pip仓库

[root@localhost ~]# cat /root/.pip/pip.conf 
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

5、安装python脚本需要的requests库

[root@localhost ~]# pip3 install requests

6、编写python脚本

#!/usr/local/python3/bin/python3
import sys
import json
import requests
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from typing import Tuple

# ========== 配置区 ==========
KIMI_API_URL = "https://api.moonshot.cn/v1/chat/completions"   # Kimi API端点
KIMI_API_KEY = "kimi api kkey"                          				# 平台获取的API密钥
QQ_SMTP = ('smtp.qq.com', 465)                                 # SSL端口
SENDER = '发送邮箱'                                      				# 发件邮箱
AUTH_CODE = '邮箱授权码'                                  			# QQ邮箱授权码
RECEIVER = '接收邮箱'                                						# 收件邮箱

def parse_zabbix_args() -> Tuple[str, str]:
    """解析Zabbix传入参数"""
    if len(sys.argv) < 3:
        raise ValueError("参数格式错误,正确格式:脚本名 '报警标题' '报警内容'")
    return sys.argv[1], sys.argv[2]

def kimi_analysis(alert_msg: str) -> str:
    """调用Kimi进行智能分析"""
    headers = {
        "Authorization": f"Bearer {KIMI_API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "model": "moonshot-v1-8k",
        "temperature": 0.3,  # 控制回答随机性
        "messages": [
            {
                "role": "system",
                "content": "作为资深运维工程师,请分析以下Zabbix告警(需包含:1.故障定位 2.可能原因 3.处理建议)"
            },
            {"role": "user", "content": alert_msg}
        ]
    }
    
    try:
        resp = requests.post(KIMI_API_URL, headers=headers, json=payload, timeout=30)
        resp.raise_for_status()
        return resp.json()['choices'][0]['message']['content']
    except requests.exceptions.RequestException as e:
        return f"API请求失败:{str(e)}"
    except KeyError:
        return "解析Kimi响应失败,请检查API格式"

from email.utils import formataddr  # 新增导入

def compose_email(alert_subject: str, alert_msg: str, analysis: str) -> MIMEText:
    """构建MIME邮件体(修复From头编码)"""
    content = f"""
    【Zabbix原始告警】
    主题:{alert_subject}
    内容:{alert_msg}

    【Kimi智能诊断】
    {analysis}
    """
    msg = MIMEText(content, 'plain', 'utf-8')
    # 使用 formataddr 正确处理中文显示名称和邮箱地址
    msg['From'] = formataddr(('Zabbix监控系统', SENDER))  # 关键修改
    msg['To'] = Header(RECEIVER, 'utf-8')  # 确保接收方编码正确
    msg['Subject'] = Header(f'告警分析报告 - {alert_subject}', 'utf-8')
    return msg

def send_email(msg: MIMEText) -> None:
    """改进版邮件发送(显式管理连接)"""
    server = smtplib.SMTP_SSL(*QQ_SMTP)
    server.set_debuglevel(0)  # 调试时开启
    
    try:
        server.login(SENDER, AUTH_CODE)
        server.sendmail(SENDER, RECEIVER, msg.as_string())
        print("邮件发送成功", flush=True)
    except smtplib.SMTPException as e:
        print(f"邮件发送失败:{str(e)}", flush=True)
    finally:
        try:
            server.quit()  # 优雅退出
        except:
            server.close()  # 强制关闭连接

    return
if __name__ == "__main__":
        # 步骤1:获取Zabbix参数
        subject, message = parse_zabbix_args()
        
        # 步骤2:调用Kimi分析
        analysis = kimi_analysis(message)
        
        # 步骤3:构造并发送邮件
        email_msg = compose_email(subject, message, analysis)
        send_email(email_msg)

7、将脚本复制到zabbix路径

[root@localhost ~]# cp test.py /usr/lib/zabbix/alertscripts/send_to_kimi.py
[root@localhost ~]# chmod 755 /usr/lib/zabbix/alertscripts/send_to_kimi.py
[root@localhost ~]# chown zabbix.zabbix /usr/lib/zabbix/alertscripts/send_to_kimi.py

[root@localhost ~]# ls -l /usr/lib/zabbix/alertscripts/send_to_kimi.py
-rwxr-xr-x 1 zabbix zabbix 3568 Mar 12 10:10 /usr/lib/zabbix/alertscripts/send_to_kimi.py

8、返回zabbix web前端进行报警配置

8.1 创建报警媒介

在这里插入图片描述

8.2 在Admin用户关联报警媒介

在这里插入图片描述

8.3 创建报警动作

在这里插入图片描述在这里插入图片描述

9、测试验证

关闭被监控机的服务,测试报警
在这里插入图片描述打开邮箱查看
在这里插入图片描述


http://www.kler.cn/a/582549.html

相关文章:

  • 某快餐店用户市场数据挖掘与可视化
  • c++ enum使用笔记
  • RocketMQ 集群架构与部署实践(一)
  • Flutter_学习记录_device_info_plus 插件获取设备信息
  • Java糊涂包(Hutool)的安装教程并进行网络爬虫
  • FreeBSD下安装npm Node.js的22版本 并简单测试js服务器
  • 【Golang】第三弹----运算符
  • Python多版本环境管理UV
  • Linux上位机开发实战(qt编译之谜)
  • Spring 框架面试题集:常见问题解析
  • mysql安装与使用
  • 2024年广州市智能网联汽车创新实践年度报告
  • 文件上传漏洞 upload-labs靶场
  • upload-labs-靶场(1-19关)通关攻略
  • 一次解决Andriod Studio Build Gradle很慢或报错下载失败等问题
  • 蓝桥杯第二天:2023省赛C 1题 分糖果
  • 数字电子技术基础(二十七)——输入端电阻的负载特性
  • 微商模式的演进与开源链动2+1模式、AI智能名片及S2B2C商城小程序源码的应用探索
  • 游戏开发商 Nimblebites 携 Super-B 在 Sui 上推动游戏创新
  • 蓝桥杯备考:数据结构堆之序列合并