性能数据文件

IBM® Storage Virtualize的性能统计数据存储在性能数据文件中。

IBM Storage Virtualize系统会收集性能统计数据,并将其存储在管理节点上一段时间,统计数据通常每 5 分钟更新一次,可通过 chsystem 命令进行配置,并可使用 lssystem 命令查看。 可通过 REST API 端点访问性能数据文件。 您可以使用脚本语言(如Python或cURL 等Linux®工具)列出和下载文件。 REST API 接受 JSONJavaScriptObject Notation)响应类型,这是一种与语言无关的数据格式,在各种脚本语言中都有内置支持。 您可以过滤来自客户机上 REST API 服务器的 JSON 响应,并使客户机端程序能够从数据中除去任何噪声。

注: 以下示例使用 Python 编程语言以及先前示例中声明的代码和变量。

正在认证

获取令牌以使用 REST API 在系统上完成操作。 如需申请API令牌,请向 /auth 终端发送 HTTP ,并在请求标题中提供用户名和密码。 请参阅以下示例。

请求
import requests

url = "https://example.com:7443/rest/v1"
username = "myuser"
password = "mypassword"

headers = {
    "X-Auth-Username": username,
    "X-Auth-Password": password
}

response = requests.post(url + "/auth", headers=headers, verify=False)
token = response.json()['token']

response.json()
响应
{"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3MDg1MjY4NzYsImV4cCI6MTcwODUzMDQ3NiwianRpIjoiZTEzMzQ4YmUzZGRkMWRjZTQ4YzhkYzE5Y2RhMTFjYzMiLCJzdiI6eyJ1c2VyIjoic3VwZXJ1c2VyIn19.I--KYnXUsFQ4wbtw_zmfkHrZ6V4bsWJgZA1j3WeHchw_kJVFRrPAhrjzJlYybIIDBYA05OSnmIZ9YWjpFY9uUQ"}

列出文件

包含性能数据的 XML 统计信息文件存储在配置节点上的 /dumps/iostats/ 目录中。 /lsdumps API 端点标识可通过 API 进行下载的文件。 要列出 /dumps/iostats/的内容,请在请求主体中使用 prefix 参数。 请参阅以下示例。

请求
headers = {
    "X-Auth-Token": token,
}
data = {
    "prefix": "/dumps/iostats/"
}
response = requests.post(url + "/lsdumps", json=data, headers=headers, verify=False)
response.json()
响应
[{'id': '0', 'filename': 'Nm_stats_F304745-2_240221_151627'},
 {'id': '1', 'filename': 'Ng_stats_F304745-2_240221_151627'},
 {'id': '2', 'filename': 'Nn_stats_F304745-2_240221_151627'},
 {'id': '3', 'filename': 'Nv_stats_F304745-2_240221_151627'},
…
]

过滤文件名

系统将收集某个时间间隔内的统计信息,并创建可下载的文件。 对于每个收集时间间隔,系统将创建五个统计信息文件:
  • Nm_stats 表示受管磁盘 (MDisk)
  • 卷和卷拷贝的 Nv_stats
  • Ng_stats (对于卷组)
  • Nn_stats 表示节点
  • Nd_stats 针对磁带机

文件名由几个部分组成,如以下描述中所示:

<category>_<panel_name>_<yymmdd>_<hhmmss>

例如, Nv_stats_F304745-2_240221_151627

命名约定支持客户机端脚本可用于下载的过滤功能:
  • 特定类型的文件
  • 在特定时间间隔创建的文件。
请参阅以下示例。
请求
import re
 
headers = {
    "X-Auth-Token": token,
}
data = {
    "prefix": "/dumps/iostats/"
}
response = requests.post(url + "/lsdumps", json=data, headers=headers, verify=False)
files = [row['filename'] for row in response.json()]

# Filter on category
nm_files = [name for name in files if re.match("Nm_stats", name)]
nv_files = [name for name in files if re.match("Nv_stats", name)]
ng_files = [name for name in files if re.match("Ng_stats", name)]
nn_files = [name for name in files if re.match("Nn_stats", name)]
nd_files = [name for name in files if re.match("Nd_stats", name)]
# Filter on time interval
tm_files = [name for name in files if re.match(".*_142127$", name)]
# Filter on panel name
pn_files = [name for name in files if re.match(".*F304745-2.*", name)]
# Make a selection
target_file = nm_files[0]
# Print
pn_files[:2]
响应
['Nm_stats_F304745-2_240222_143127', 'Nn_stats_F304745-2_240222_143127']

正在下载文件

您可以使用 /lsdumps API 端点通过 /download 端点下载可列出的文件。 /download 接口接受两个参数:
  • prefix: 目标目录的名称
  • filename: 目标文件的名称

下载的文件的内容可以在内存中进行处理,也可以存储在主机上进行后处理。

注: 系统上会不断更新性能数据文件。 如果在文件下载期间发生错误,那么表示文件已轮换。 通常,您可以访存最新的文件列表,然后是另一个下载请求。 如果没有,请重新评估统计信息时间间隔和收集时间间隔,以确保在网络和系统限制内完成列表和下载。

请参阅以下示例。

请求
headers = {
    "X-Auth-Token": token,
}
data = {
    "prefix": "/dumps/iostats",
    "filename": target_file
}
response = requests.post(url + "/download", json=data, headers=headers, verify=False)

if response.status_code != 200:
    raise Exception("File not found")

response.content[:100]
响应
b'<?xml version="1.0" encoding="utf-8" ?>\n<diskStatsColl\nxmlns="http://ibm.com/storage/management/perf'