性能数据文件
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'