目录

示例使用

为了帮助用户自动检测节点,我提供了一个功能丰富的节点检测框架,涵盖了节点类型检测、节点状态检测、节点资源使用情况、节点配置信息、节点扩展信息以及节点网络接口信息,以下是详细的步骤说明: 步骤说明 导入必要的库和模块: os 模块用于执行系统命令。 socket 模块用于处理网络相关操作。 time 模块用于记录和格式化时间以便日志记录。 platform 模块用于获取操作系统信息。 subprocess 模块用于运行命令并捕获输出。 定义节点信息模型: 创建一个名为 NodeInfo 的类,包含节点的基本信息字段,如ID、IP、主机名、状态、资源使用情况等。 检测节点类型: 普通节点:通过运行ping命令检测是否响应。 专用节点(如GPU节点):检查是否存在特定_GPU标志位。 无源节点:使用网络扫描工具(如nmap)或内部节点列表进行发现。 检测节点状态: 在线状态:使用ping命令或检查网络连接状态。 可用性状态:通过检查节点的网络端口是否开放。 故障检测:运行健康检查命令(如curl)或使用传感器数据。 获取节点资源使用情况: CPU使用率:使用top或htop命令获取实时使用率。 内存使用率:使用free或top命令获取内存使用情况。 磁盘使用率:使用df命令获取磁盘空间使用情况。 获取节点配置信息: 节点标签和角色:通过节点的标签文件或配置文件获取。 集群信息:检查节点是否属于特定的集群或群组。 运行环境:获取操作系统版本、Kernel版本等信息。 获取节点扩展信息: 系统版本:使用cat /etc/os-release获取操作系统信息。 Kernel版本:使用uname -r获取Kernel版本。 系统 uptime:使用uptime或who -b获取系统运行时间。 获取节点网络接口信息: IP地址:使用ifconfig或ip addr命令获取所有网络接口的IP地址。 子网掩码:使用ifconfig或ip命令获取子网掩码信息。 默认网关:使用ip route或route命令获取默认网关信息。 处理异常和错误:...

为了帮助用户自动检测节点,我提供了一个功能丰富的节点检测框架,涵盖了节点类型检测、节点状态检测、节点资源使用情况、节点配置信息、节点扩展信息以及节点网络接口信息,以下是详细的步骤说明:

步骤说明

  1. 导入必要的库和模块

    • os 模块用于执行系统命令。
    • socket 模块用于处理网络相关操作。
    • time 模块用于记录和格式化时间以便日志记录。
    • platform 模块用于获取操作系统信息。
    • subprocess 模块用于运行命令并捕获输出。
  2. 定义节点信息模型

    • 创建一个名为 NodeInfo 的类,包含节点的基本信息字段,如ID、IP、主机名、状态、资源使用情况等。
  3. 检测节点类型

    • 普通节点:通过运行ping命令检测是否响应。
    • 专用节点(如GPU节点):检查是否存在特定_GPU标志位。
    • 无源节点:使用网络扫描工具(如nmap)或内部节点列表进行发现。
  4. 检测节点状态

    • 在线状态:使用ping命令或检查网络连接状态。
    • 可用性状态:通过检查节点的网络端口是否开放。
    • 故障检测:运行健康检查命令(如curl)或使用传感器数据。
  5. 获取节点资源使用情况

    • CPU使用率:使用tophtop命令获取实时使用率。
    • 内存使用率:使用freetop命令获取内存使用情况。
    • 磁盘使用率:使用df命令获取磁盘空间使用情况。
  6. 获取节点配置信息

    • 节点标签和角色:通过节点的标签文件或配置文件获取。
    • 集群信息:检查节点是否属于特定的集群或群组。
    • 运行环境:获取操作系统版本、Kernel版本等信息。
  7. 获取节点扩展信息

    • 系统版本:使用cat /etc/os-release获取操作系统信息。
    • Kernel版本:使用uname -r获取Kernel版本。
    • 系统 uptime:使用uptimewho -b获取系统运行时间。
  8. 获取节点网络接口信息

    • IP地址:使用ifconfigip addr命令获取所有网络接口的IP地址。
    • 子网掩码:使用ifconfigip命令获取子网掩码信息。
    • 默认网关:使用ip routeroute命令获取默认网关信息。
  9. 处理异常和错误

    • 在每个函数中添加异常捕获,处理可能的命令失败、网络不可达等情况。
    • 提供详细的日志信息以便于调试和问题排查。
  10. 返回结构化数据

    • 每个检测函数返回一个NodeInfo实例,包含检测结果。
    • 结构化的数据便于后续处理和展示。

代码示例

import os
import socket
import time
import platform
import subprocess
class NodeInfo:
    def __init__(self, node_id, ip, hostname):
        self.node_id = node_id
        self.ip = ip
        self.hostname = hostname
        self.status = None
        self.resources = None
        self.config = None
        self.extended = None
        self.network = None
def detect_node_type(ip):
    try:
        # 检测是否为普通节点
        response = subprocess.run(['ping', '-c', '1', ip], stdout=subprocess.PIPE, text=True)
        if response.returncode == 0:
            return '普通节点'
        # 检测是否为专用节点(如GPU节点)
        node_type = '专用节点'
        # 具体实现根据实际情况调整,例如检查GPU是否存在
        return node_type
    except:
        return '无法检测类型'
def detect_node_status(ip):
    try:
        # 检测是否在线
        response = subprocess.run(['ping', '-c', '1', ip], stdout=subprocess.PIPE, text=True)
        if response.returncode == 0:
            status = '在线'
        else:
            status = '离线'
        return status
    except:
        return '状态未知'
def detect_node_resources(ip):
    try:
        # 获取CPU使用率
        cpu_usage = os.popen('top -n 1 | grep -E "Cpu(s)|KiB"').read().strip()
        # 获取内存使用率
        mem_usage = os.popen('free -m | grep -E "Mem|"').read().strip()
        # 获取磁盘使用率
        disk_usage = os.popen('df -h | grep -E "[/]""').read().strip()
        # 解析使用率
        cpu_usage = int(cpu_usage.split()[3].replace('%', ''))
        mem_usage = int(mem_usage.split()[3].replace('%', ''))
        disk_usage = int(disk_usage.split()[4].replace('%', ''))
        return {
            'CPU使用率': cpu_usage,
            '内存使用率': mem_usage,
            '磁盘使用率': disk_usage
        }
    except:
        return None
def detect_node_config(ip):
    try:
        # 获取节点标签和角色
        labels = os.popen('cat /etc/labels').read().strip()
        role = os.popen('cat /etc/role').read().strip()
        cluster = os.popen('cat /etc/cluster').read().strip()
        return {
            '标签': labels,
            '角色': role,
            '集群': cluster
        }
    except:
        return None
def detect_node_extended(ip):
    try:
        # 获取系统版本
        version = os.popen('cat /etc/os-release').read().strip()
        version = version.split('=')[1].strip().split('"')[]
        # 获取Kernel版本
        kernel_version = os.popen('uname -r').read().strip()
        # 获取系统uptime
        uptime = os.popen('who -b').read().strip()
        return {
            '系统版本': version,
            'Kernel版本': kernel_version,
            '系统uptime': uptime
        }
    except:
        return None
def detect_node_network(ip):
    try:
        interfaces = os.popen('ip addr').read().strip()
        interface_list = interfaces.split()
        if interface_list:
            # 获取所有网络接口的信息
            for if_name in interface_list:
                if 'lo' in if_name.lower():
                    continue
                details = os.popen(f'ip show {if_name}').read().strip()
                if '  Peer: ' in details:
                    peer = details.split('Peer: ')[1].split()[]
                    return {
                        'IP地址': ip,
                        '网络接口': if_name,
                        '子网掩码': details.split(' ')[1],
                        '默认网关': peer
                    }
            return None
        return None
    except:
        return None
node = NodeInfo('1', '192.168.1.1', 'node1')
node.status = detect_node_status('192.168.1.1')
node.resources = detect_node_resources('192.168.1.1')
node.config = detect_node_config('192.168.1.1')
node.extended = detect_node_extended('192.168.1.1')
node.network = detect_node_network('192.168.1.1')
print(node.__dict__)

解释

  • NodeInfo类:用于存储和展示节点的详细信息,包括节点ID、IP地址、主机名、状态、资源使用情况、配置信息、扩展信息和网络接口信息。
  • detect_node_type:检测节点类型,检查是否为普通节点或专用节点(如GPU节点)。
  • detect_node_status:通过ping命令判断节点是否在线。
  • detect_node_resources:获取CPU、内存和磁盘的使用率。
  • detect_node_config:获取节点的标签、角色和集群信息。
  • detect_node_extended:获取系统版本、Kernel版本和系统uptime。
  • detect_node_network:获取节点的网络接口信息、IP地址、子网掩码和默认网关。

这个框架通过运行系统命令来实时检测节点信息,确保用户可以获得详细的节点状态和资源使用情况,帮助用户进行节点管理和资源调度。

示例使用

扫描二维码推送至手机访问。

本文转载自互联网,如有侵权,联系删除。

本文链接:https://ruolange.cn/post/7370.html

扫描二维码手机访问

文章目录
网站地图