需要仅收集特定的统计信息,例如 %idle、memfree、available、pmemused 等。我还必须将输出转换为 json 字符串并使用它。
是否有任何 UNIX 工具可以做到这一点?
我尝试了 sar 和 sadf 的组合,但我得到了一个我不需要的复杂 json 格式。
/usr/bin/sar -r 1 1 -o tmp1 &> 1;
/usr/bin/sadf tmp1 -j --iface=eth1 -- -u -r -n DEV
我得到这个输出:
{
"sysstat": {
"hosts": [{
"nodename": "ESDNAS1",
"sysname": "Linux",
"release": "4.4.143-94.47-default",
"machine": "x86_64",
"number-of-cpus": 8,
"file-date": "2019-08-02",
"file-utc-time": "04:53:09",
"statistics": [{
"timestamp": {
"date": "2019-08-02",
"time": "04:53:10",
"utc": 1,
"interval": 1
},
"cpu-load": [{
"cpu": "all",
"user": 0.25,
"nice": 0.00,
"system": 1.00,
"iowait": 0.00,
"steal": 0.00,
"idle": 98.75
}],
"memory": {
"memfree": 3707764,
"avail": 12451860,
"memused": 12013448,
"memused-percent": 45.01,
"buffers": 225176,
"cached": 4361204,
"commit": 28665304,
"commit-percent": 107.41,
"active": 13473076,
"inactive": 1535816,
"dirty": 616
},
"network": {
"net-dev": [{
"iface": "eth1",
"rxpck": 1.00,
"txpck": 1.00,
"rxkB": 0.11,
"txkB": 0.00,
"rxcmp": 0.00,
"txcmp": 0.00,
"rxmcst": 0.00,
"ifutil-percent": 0.00
}]
}
}],
"restarts": []
}]
}
}
我正在寻找这样的东西(或关闭一个很简单的东西):
{
"sysstat": {
"hosts": [
{
"nodename": "HOSTNAME",
"statistics": [
{
"timestamp": {
"date": "2019-08-02",
"time": "04:53:10"
},
"cpu-load": [
{
"idle": 98.75
}
],
"memory": {
"memfree": 3707764,
"avail": 12451860,
"memused-percent": 45.01
},
"network": {
"net-dev": [
{
"iface": "eth1",
"rxpck": 1,
"txpck": 1,
"ifutil-percent": 0
}
]
}
}
],
"restarts": []
}
]
}
}
您可以在 python 中使用psutil并创建自定义的 json。
例子:
输出:
有用的链接: https ://github.com/giampaolo/psutil
我认为jq是首选工具。
jq
可以在 Github https://stedolan.github.io/jq/tutorial/找到一个精彩的教程,这里有一个很好的教程:https ://programminghistorian.org/en/lessons/json-and-jq 。例如,要进入“memfree”部分,将命令的输出通过管道输出
jq
如下:... | jq .[].hosts[].statistics[].memory.memfree
这使:
3707764
或者,要在 JSON 中获取整个内存部分:
... | | jq .[].hosts[].statistics[].memory
这使:
jq
如果您无法调整原始命令 (sar
或sadf
) 以按预期生成 JSON,请使用 JSON 解析器执行此操作,如下所示您可以在 jq-1.6 上的 jq-playground 中看到此过滤器