首页 > 编程语言 >python3使用pyVmomi获取vCenter中告警信息语音告警

python3使用pyVmomi获取vCenter中告警信息语音告警

时间:2024-08-10 17:17:44浏览次数:10  
标签:socket alarm 告警信息 host pyVmomi print vCenter 告警

原创文档编写不易,未经许可请勿转载,目前仅发布于博客园,其他平台均为非法转载。文档中有疑问的可以邮件联系我文章。 邮箱:[email protected]

一、说明

文章分享在pyVmomi获取vCenter中的告警信息,对red级别的告警信息进行本地语音告警,记录告警信息到本地txt文件后清空当前vCenter上的告警信息。

1.1 文件描述

list_socket.py:python3脚本文件,通过socket模块实现实时监听来自外部的网络数据;通过pyttsx3模块实现文字转为为语音并播放。

alarm_vcenter.py:python3脚本文件,通过pyVim模块实现采集vCenter告警、清除vCenter当前告警;通过socket模块推送整合过后的告警信息至接收端;open内置函数在vCenter告警清除前保留red告警至本地txt文件。

alert_log.txt:文本文件,保存vCenter红色告警信息,文件存在云alarm_vcenter.py同级目录中,如果本地没有这个文件程序会自动创建。

1.2 程序启动顺序

  1. list_socket.py
  2. alarm_vcenter.py

1.3 网络拓扑图

 

1.4 函数工作流

二、Python脚本

2.1 list_socket.py

import socket
import pyttsx3

# 初始化tts引擎
engine = pyttsx3.init()

def realtime_data_receiver(host, port):
    try:
        # 创建 socket 对象
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            # 绑定端口
            s.bind((host, port))
            # 设置最大连接数
            s.listen(1)
            print(f"Listening for connections on {host}:{port}...")
            while True:
                # 接受一个新的连接
                conn, addr = s.accept()
                print(f"Connected by {addr[0]}:{addr[1]}")
                # 无限循环以接收数据
                while True:
                    data = conn.recv(1024)  # 接收数据,bufsize 为 1024 字节
                    if not data:
                        break
                    # 处理数据进行语音播报
                    # 设置要转换的文本
                    text =  str(data.decode())
                    # 转换文本为语音
                    engine.say(text)
                    # 播放语音
                    engine.runAndWait()
                # 关闭连接
                conn.close()
    except Exception as e:
        print("Listening  faile: ", str(e))

#定义主函数
def main():
    host = '0.0.0.0'  # 监听的主机地址
    port = 5000  # 监听的端口
    realtime_data_receiver(host, port)

#调用主函数
if __name__ == "__main__":
    main()

效果图

 

2.2 alarm_vcenter.py

import ssl
import datetime
from pyVmomi import vim
from pyVim.connect import SmartConnect, Disconnect
from pyVmomi import vmodl
import socket
import datetime

#定义发送tcp信息函数
def send_tcp_data(ip, port, data):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((ip, port))
        sock.send(data.encode())
        sock.close()
    except Exception as e:
        print("sent alarm info  faile: ",str(e))

# 连接vCneter函数
def connect_to_vcenter(hostname,username,password):
    try:
        #忽略ssl证书验证
        ssl._create_default_https_context = ssl._create_unverified_context
        #连接到vCenter
        service_instance = SmartConnect(host=hostname, user=username, pwd=password)
        return service_instance
    except Exception as e:
        print("connect vCenter faile: ",str(e))

# 获取vCenter告警函数,清空所有的告警,并记录告警信息至本地alert_log.txt文件
def get_vCenter_alarm_info(service_instance,host_ip,host_port,current_time_t):
    try:
        #获取vcenter告警
        contents = service_instance.RetrieveContent()
        Alarmcontents= contents.rootFolder.triggeredAlarmState
        #输出共计多少个告警,可注释
        print(f"当前vc告警总数: {len(Alarmcontents)},告警已经自动确认请检查")
        send_alarm_sum = f"当前vc告警总数: {len(Alarmcontents)},告警已经自动确认请检查"
        send_tcp_data(host_ip, host_port, send_alarm_sum)
        #获取vc中定义的告警清单信息
        alarmcontents = contents.alarmManager.GetAlarm()
        tt = vim.alarm.AlarmFilterSpec()
        print("**" * 60)  #输出数据分割线
        for targer in Alarmcontents:
            dd = targer.entity
            #清除摘要信息页告警提示和所有问题,清除不了“已触发的警报”。
            contents.alarmManager.AcknowledgeAlarm(targer.alarm,entity=dd)
            #设置红色的告警才进行语音提示
            if str(dd.overallStatus) == 'red' :
                #print(f"实体类型: {type(targer.alarm)}")
                #print(f"宿主机IP地址: {dd.name}")
                #print(f"告警等级: {dd.overallStatus}")
                #print(f"告警类别:{targer.alarm}")
                #print(f"数据类别:{type(targer.alarm)}")
                for alarminfo in  alarmcontents:
                    if targer.alarm == alarminfo.info.alarm :
                        send_alarm_data = f"重要告警:告警主体 {dd.name } 告警信息: {alarminfo.info.name}"
                        # 调用函数发送tcp信息至接收端示例
                        print(send_alarm_data)
                        #写入告警信息至本地txt文件
                        with open('alert_log.txt', "a") as file:
                            file.write(f"{current_time_t} : {send_alarm_data}\n")  # 将追加内容写入文件
                            file.close()
                        send_tcp_data(host_ip, host_port, send_alarm_data)
        #清除已触发告警
        contents.alarmManager.ClearTriggeredAlarms(filter=tt)
        # 分割线
        print("##" * 60)
        # 断开vc连接
        Disconnect(service_instance)
    except Exception as e:
        Disconnect(service_instance)
        print("get vCenter alarm info faile: ", str(e))

#定义主函数
def main():
    #定义vc登录信息
    vcenter_ip = '192.168.10.222'
    vcenter_user = '[email protected]'
    vcenter_password = 'Tyroot!#123'
    #定义告警接收端信息
    post_host_ip='192.168.10.1'
    post_host_port=5000
    #获取当前时间
    current_time = datetime.datetime.now()
    #调用功能函数
    vc_instance = connect_to_vcenter(vcenter_ip,vcenter_user,vcenter_password)
    get_vCenter_alarm_info(vc_instance,post_host_ip,post_host_port,current_time)

#调用主函数
if __name__ == "__main__":
    main()

 

效果图

 

 

标签:socket,alarm,告警信息,host,pyVmomi,print,vCenter,告警
From: https://www.cnblogs.com/Pigs-Will-Fly/p/18352350

相关文章

  • 【VMware vCenter】一次性说清楚 vCenter Server 的 CLI 部署方式。
    VMwarevCenterServer是VMwarevSphere解决方案的核心组件,用于管理多个ESXi主机并实现更多高级功能特性(如HA、DRS以及FT等),相信大家已经非常熟悉了。对于vCenterServer的安装和部署,可能大部分人会选择使用GUI方式部署vCenterServer,并使用vCenterServerISO镜像......
  • Zabbix 5.0 LTS 配置企业微信(Webhook)自动发送告警信息
    依据前面文章《Zabbix5.0LTSURL健康监测》环境,实现企业微信(Webhook)自动发送告警信息。一、创建企业微信机器人先在自己的企业微信群里创建一个机器人,并获取其WebHook地址。右击群聊天卡片,添加群机器人。获得一个类似下图的WebHook地址。注意,这个WebHook地址非常......
  • 通过微软证书服务器自签名证书替换VMware vCenter证书:达到域内主机访问vCenter Server
    通过微软证书服务器自签名证书替换VMwarevCenter证书:达到域内主机访问vCenterServer是信任状态开始之前的必要条件是已经搭建好微软AD域和对应的证书服务器。确认这些都没有问题,才可以继续下一步操作。已经通过域名的形式安装好了vCenterServer,并且可以正常访问。整体操......
  • VMware vCenter Server 6.5 U3w (安全更新) - ESXi 集中管理软件
    VMwarevCenterServer6.5U3w(安全更新)-ESXi集中管理软件集中式控制vSphere环境请访问原文链接:https://sysin.org/blog/vmware-vcenter-6-5/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarevCenterServer是一款高级服务器管理软件,提供了一个集中式......
  • VMware vCenter Server 6.7 U3u (安全更新) - ESXi 集中管理软件
    VMwarevCenterServer6.7U3u(安全更新)-ESXi集中管理软件集中式控制vSphere环境请访问原文链接:https://sysin.org/blog/vmware-vcenter-6-7/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarevCenterServer是一款高级服务器管理软件,提供了一个集中式......
  • VMware vCenter Server 8.0U3a - 集中式管理 vSphere 环境
    VMwarevCenterServer8.0U3a-集中式管理vSphere环境ServerManagementSoftware|vCenter请访问原文链接:https://sysin.org/blog/vmware-vcenter-8-u3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarevCenterServer是一款高级服务器管理软件,提供了一......
  • 【VMware vCenter】VMware vCenter Server(VCSA) 5.5 版本证书过期问题处理过程。
    之前帮客户处理了一个因证书过期导致vCenterServer无法登录的问题,在此记录一下,因为时间过去有点久了,可能会有些地方描述的不是很清楚,所以就当作参考就行。客户环境是一个非常老的vCenterServer5.5版本并基于Linux版本的VCSA(当时这个版本还有基于Windows的,注意区别),早......
  • VMware vCenter Server 7.0U3r 下载 - 修复堆溢出 (远程执行代码) 和本地权限提升漏洞
    VMwarevCenterServer是一款高级服务器管理软件,提供了一个集中式平台来控制vSphere环境,以实现跨混合云的可见性。简化且高效的服务器管理什么是vCenterServer?实现集中式可见性、简化且高效的大规模管理,以及在整个混合云中的可延展性,所有这一切,均可通过单一控制台来实现......
  • vCenter登录失败报500错误:no healthy upstream
    过了个周末登录vCenter的时候提示:HTTP状态500-内部服务器错误;重启服务后提示:nohealthyupstream。如下图:看到这个情况,肯定就是部分不服务异常了或者压根就没有启动。至于说因为啥异常还不得而知。想着登录管理服务(访问端口:5480)重启一下异常服务,结果提示证书过期。问题......
  • VMware vSphere Tanzu部署_04_vCenter管理esxi并迁移网卡到DSwitch
    本次操作采用powershell来进行操作1.安装powershell和VM插件1.1.安装powershell在如下位置下载powershell进行:https://github.com/PowerShell/PowerShell/releases1.2.安装vm组件在cmd内输入pwsh后,输入:Install-Module-NameVMware.PowerCLI-ScopeCurrentUser......