Skip to content

zabbix邮箱AI告警

拓扑结构

主机名 IP 主机角色 linux版本
zabbix-server 192.168.242.61 server Rocky9.4
zabbix-proxy 192.168.242.62 proxy Rocky9.4
zabbix-agent 192.168.242.63 agent CentOS7

zabbix-server安装pypl包

yum install pip
pip install --upgrade spark_ai_python

同步时间

dnf install -y chrony # rocky用这个
yum install -y chrony

vi /etc/chrony.conf

# 添加以下NTP服务器(请注释原来的NTP服务器)
pool ntp1.aliyun.com iburst
pool ntp.tencent.com iburst
pool ntp1.bce.baidu.com iburst


# 设置开机自启
systemctl restart chronyd
systemctl enable chronyd

编写邮箱告警代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Project: zxnbmk
# @Author: zxnbmk
# @File name: Email_AI_Warnning
# @Create time: 2024/12/29 下午2:14
# @Date : PyCharm
# encoding=utf-8
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP
import sys
import spark_ai

smtpaddr = 'smtp.qq.com'  ## 邮件服务器域名
myemail = '你的账户'  ##发送邮件的账户
password = '你的授权码'  ## 填写登陆客户端的授权码,在邮箱里生成同时需要打开POP3,IMAP服务
recvmail = sys.argv[1]  ##发送邮件给谁
subject = sys.argv[2]  ## 发送的主题
content = sys.argv[3]  ##发送的内容
content += '\n'


def ai_api()->str:
    issue="请详细列出关于以下运维问题的推荐解决方案是什么:\n"+ content
    messages=content+"=======================================\n"+spark_ai.chat_dispose(issue)
    return messages
def send_mail():
    msg = MIMEText("""%s""" % ai_api(), "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()
if __name__ == '__main__':
    send_mail()

编写spark接口

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Project: zxnbmk
# @Author: zxnbmk
# @File name: spark_ai
# @Create time: 2024/12/29 下午2:22
# @Date : PyCharm
# coding: utf-8

from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage
from json import loads

#星火认知大模型Spark Max的URL值,其他版本大模型URL值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
#星火认知大模型调用秘钥信息,请前往讯飞开放平台控制台(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = '你的id'
SPARKAI_API_SECRET = '你的secret'
SPARKAI_API_KEY = '你的key'
#星火认知大模型Spark Max的domain值,其他版本大模型domain值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'generalv3.5'

def chat_dispose(issue: str)->str:
    """
    用于调用sparkai的接口进行对话
    :param issue: 你的问题
    :return: 将会返回问题的答案
    """
    spark = ChatSparkLLM(
        spark_api_url=SPARKAI_URL,
        spark_app_id=SPARKAI_APP_ID,
        spark_api_key=SPARKAI_API_KEY,
        spark_api_secret=SPARKAI_API_SECRET,
        spark_llm_domain=SPARKAI_DOMAIN,
        streaming=False,
    )
    messages = [ChatMessage(
        role="user",
        content=issue
    )]
    handler = ChunkPrintHandler()
    a = spark.generate([messages], callbacks=[handler])
    print(a.generations[0][0].text)
    return a.generations[0][0].text

上述代码位置:server主机的 /usr/lib/zabbix/alertscripts/下

并将这两个py文件权限加上x权限

修改server配置文件

vi /etc/zabbix/zabbix_server.conf

添加如下
TrapperTimeout=300



# 修改完需要重启
systemctl restart zabbix-server

开启邮箱媒介

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

recording

配置告警通知接收用户

recording

配置告警通知动作

recording

自定义监控项(检测登录数量)

下载zabbix-get(proxy端)

yum install zabbix-get.x86_64


测试(没有反应请重启各项服务)
zabbix_get -s 192.168.242.63 -p 10050 -k "login.user"

手动创建zabbix的配置文件(扩展目录中),用于自定义key

mkdir /etc/zabbix/zabbix_agentd.d/

创建配置文件,以及内容如下:(这里需要明确下我们是监控哪个服务器,就往哪个服务器写配置,这里是agent)

vi userprameter_login.conf
UserParameter=login.user,who|wc -l

创建模板与监控项

recording

创建触发器

recording

创建图像

recording

关联主机

recording

手动触发

手动新建多个窗口登录

image-20241229220039696

image-20241229220056366

Comments