如何僅檢索特定的 cpu、記憶體和介面統計資訊
需要僅收集特定的統計資訊,例如 %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": [] } ] } }
我認為jq是首選工具。
jq
就像sed
JSON 數據一樣 - 您可以使用它來切片、過濾、映射和轉換結構化數據,就像 ,sed
和朋友讓您玩文本一樣容易。awk``grep
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
這使:
{ "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 }
您可以在 python 中使用psutil並創建自定義的 json。
psutil(python 系統和程序實用程序)是一個跨平台庫,用於在 Python 中檢索有關正在執行的程序和系統使用率(CPU、記憶體、磁碟、網路、感測器)的資訊。它主要用於系統監控、分析、限制程序資源和管理正在執行的程序。它實現了 UNIX 命令行工具提供的許多功能,例如:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap。
例子:
import json import psutil def used_mem(json_key): mem_total = psutil.virtual_memory().total mem_percent = psutil.virtual_memory().percent mem_used = psutil.virtual_memory().used mem_free = psutil.virtual_memory().free swap_percent = psutil.swap_memory().percent swap_total = psutil.swap_memory().total swap_used = psutil.swap_memory().used json_key['free_mem'] = mem_free json_key['total_mem'] = mem_total json_key['mem_used'] = mem_used json_key['percent_mem'] = mem_percent json_key['swap_percent'] = swap_percent json_key['swap_total'] = swap_total json_key['swap_used'] = swap_used json_key={} used_mem(json_key) print json.dumps(json_key)
輸出:
{"swap_used": 14061568, "percent_mem": 48.3, "free_mem": 1792401408, "total_mem": 12447776768, "mem_used": 5128196096, "swap_total": 11999899648, "swap_percent": 0.1}