一、背景引入

在现代企业的 IT 基础设施管理中,服务器等硬件资产的有效管理变得越来越重要。准确掌握服务器的型号、序列号以及详细的配置信息 ,对于企业的运维、采购、成本控制等工作具有至关重要的意义。传统的人工采集和维护硬件资产信息的方式效率低下、容易出错,且难以做到实时更新。而利用 Redfish 标准进行硬件资产信息采集,并实现自动入库的资产管理方案,则可以很好地解决这些问题。

二、Redfish 简介

Redfish 是一种基于 RESTful API 的标准,用于管理服务器等 IT 硬件设备。它采用 JSON 数据格式和 HTTPS 协议,提供了一种简单、高效、安全的方式来与硬件设备进行通信和交互。相比于传统的 IPMI(Intelligent Platform Management Interface)等管理方式,Redfish 具有更好的扩展性和互操作性,能够方便地实现跨厂商、跨平台的硬件设备管理。

例如,我们可以使用以下 Python 代码来通过 Redfish API 获取服务器的基础信息:

import requests

# 禁用 SSL 警告(用于测试环境,生产环境不建议这样做)
requests.packages.urllib3.disable_warnings()

# 服务器的 Redfish API 地址
url = 'https://192.168.1.100/redfish/v1/Systems/System.Embedded.1'

# 认证信息
headers = {
    'Content-Type': 'application/json',
    'X-Auth-Token': 'your_auth_token'  # 替换为实际的认证令牌
}

try:
    # 发送 GET 请求
    response = requests.get(url, headers=headers, verify=False)

    # 检查响应状态码
    if response.status_code == 200:
        # 解析 JSON 数据
        data = response.json()
        print(data)
    else:
        print(f"请求失败,状态码: {response.status_code}")
except requests.RequestException as e:
    print(f"请求发生错误: {e}")

这段代码的注释解释如下:

  • import requests:导入 Python 的 requests 库,用于发送 HTTP 请求。
  • requests.packages.urllib3.disable_warnings():在测试环境中禁用 SSL 警告。
  • url:定义要访问的 Redfish API 地址,这里是获取服务器系统信息的接口。
  • headers:设置请求头,包括内容类型和认证令牌。
  • requests.get(url, headers=headers, verify=False):发送 GET 请求,verify=False 表示不验证 SSL 证书。
  • response.json():将响应内容解析为 JSON 格式。

三、应用场景

1. 企业 IT 资产管理

企业拥有大量的服务器,通过 Redfish 自动采集硬件资产信息并入库,可以方便地对服务器的型号、序列号、CPU、内存、硬盘等配置信息进行统一管理。例如,在进行服务器采购时,可以根据已有的资产信息,合理规划采购数量和配置,避免重复购买和资源浪费。

2. 数据中心运维

在数据中心运维过程中,实时掌握服务器的硬件状态和配置信息非常重要。通过 Redfish 采集信息并入库,可以及时发现硬件故障和异常,提前进行预警和处理,减少停机时间,提高数据中心的可靠性和可用性。

3. 合规性审计

企业需要定期进行合规性审计,确保服务器的配置符合相关的安全和法规要求。通过 Redfish 采集的硬件资产信息可以作为审计的重要依据,帮助企业快速完成合规性检查。

四、技术实现步骤

1. 信息采集

使用 Redfish API 从服务器获取硬件资产信息,如服务器型号、序列号、CPU 信息、内存信息、硬盘信息等。以下是一个使用 Python 采集服务器 CPU 信息的示例:

import requests

# 服务器的 Redfish API 地址
url = 'https://192.168.1.100/redfish/v1/Systems/System.Embedded.1/Processors'

# 认证信息
headers = {
    'Content-Type': 'application/json',
    'X-Auth-Token': 'your_auth_token'  # 替换为实际的认证令牌
}

try:
    # 发送 GET 请求
    response = requests.get(url, headers=headers, verify=False)

    # 检查响应状态码
    if response.status_code == 200:
        # 解析 JSON 数据
        data = response.json()
        for processor in data.get('Members', []):
            processor_url = processor.get('@odata.id')
            processor_response = requests.get('https://192.168.1.100' + processor_url, headers=headers, verify=False)
            if processor_response.status_code == 200:
                processor_data = processor_response.json()
                print(f"CPU 型号: {processor_data.get('Model')}")
                print(f"CPU 核心数: {processor_data.get('TotalCores')}")
    else:
        print(f"请求失败,状态码: {response.status_code}")
except requests.RequestException as e:
    print(f"请求发生错误: {e}")

此示例使用 Python 的 requests 库通过 Redfish API 获取服务器的 CPU 信息,注释部分说明了代码的功能和步骤。

2. 数据处理

对采集到的信息进行清洗和整理,去除不必要的信息,将数据转换为适合入库的格式。例如,将采集到的 CPU 频率信息从字符串转换为数字类型。

3. 数据入库

将处理后的数据存储到数据库中。可以选择使用关系型数据库(如 MySQL、SQL Server)或非关系型数据库(如 MongoDB)。以下是一个使用 Python 和 MySQL 进行数据入库的示例:

import requests
import mysql.connector

# 服务器的 Redfish API 地址
url = 'https://192.168.1.100/redfish/v1/Systems/System.Embedded.1'

# 认证信息
headers = {
    'Content-Type': 'application/json',
    'X-Auth-Token': 'your_auth_token'  # 替换为实际的认证令牌
}

try:
    # 发送 GET 请求
    response = requests.get(url, headers=headers, verify=False)

    # 检查响应状态码
    if response.status_code == 200:
        # 解析 JSON 数据
        data = response.json()
        model = data.get('Model')
        serial_number = data.get('SerialNumber')

        # 连接到 MySQL 数据库
        mydb = mysql.connector.connect(
            host="localhost",
            user="your_username",
            password="your_password",
            database="your_database"
        )

        mycursor = mydb.cursor()

        # 插入数据
        sql = "INSERT INTO servers (model, serial_number) VALUES (%s, %s)"
        val = (model, serial_number)
        mycursor.execute(sql, val)

        mydb.commit()

        print(mycursor.rowcount, "记录插入成功。")
    else:
        print(f"请求失败,状态码: {response.status_code}")
except requests.RequestException as e:
    print(f"请求发生错误: {e}")
except mysql.connector.Error as err:
    print(f"数据库操作出错: {err}")

五、技术优缺点

优点

  • 标准化:Redfish 是一个开放的标准,具有良好的跨厂商、跨平台兼容性,能够方便地管理不同品牌和型号的服务器。
  • 高效性:采用 RESTful API 和 JSON 数据格式,通信效率高,能够快速获取硬件资产信息。
  • 安全性:使用 HTTPS 协议进行通信,保证了数据传输的安全性。
  • 可扩展性:可以方便地扩展功能,如添加新的信息采集项、支持更多的硬件设备类型等。

缺点

  • 兼容性问题:虽然 Redfish 是一个标准,但不同厂商的实现可能存在差异,需要进行一定的适配工作。
  • 依赖网络:信息采集依赖网络连接,如果网络不稳定或中断,可能会影响信息采集的准确性和及时性。

六、注意事项

1. 安全认证

在使用 Redfish API 进行信息采集时,必须进行严格的安全认证,如使用用户名和密码、认证令牌等,防止未授权的访问。

2. 网络稳定性

确保服务器与采集系统之间的网络连接稳定,避免因网络问题导致信息采集失败或数据丢失。

3. 数据准确性

在进行数据处理和入库时,要对采集到的信息进行严格的验证和清洗,确保数据的准确性和完整性。

4. 兼容性测试

在实际应用前,要对不同厂商和型号的服务器进行兼容性测试,确保 Redfish API 能够正常工作。

七、文章总结

通过使用 Redfish 进行硬件资产信息采集,并实现自动入库的资产管理方案,可以大大提高企业 IT 资产管理的效率和准确性。该方案利用 Redfish 的标准化、高效性和安全性等优点,能够方便地获取服务器的型号、序列号、配置信息等,并将其存储到数据库中,为企业的运维、采购、合规性审计等工作提供有力支持。

同时,我们也需要注意该方案在实施过程中可能遇到的兼容性问题、网络稳定性问题和数据准确性问题等,并采取相应的措施加以解决。随着 IT 技术的不断发展,Redfish 标准也将不断完善和扩展,为企业的硬件资产管理带来更多的便利和价值。