Json

如何僅檢索特定的 cpu、記憶體和介面統計資訊

  • August 4, 2019

需要僅收集特定的統計資訊,例如 %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就像sedJSON 數據一樣 - 您可以使用它來切片、過濾、映射和轉換結構化數據,就像 ,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}

有用的連結: https ://github.com/giampaolo/psutil

引用自:https://unix.stackexchange.com/questions/533508