首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅检索特定的cpu、内存和接口统计信息

如何仅检索特定的cpu、内存和接口统计信息
EN

Unix & Linux用户
提问于 2019-08-02 07:33:36
回答 3查看 2K关注 0票数 1

需要只收集特定的统计数据,如%空闲、memfree、available、pmemused等。我还必须将输出转换为json字符串并使用它。

有任何UNIX工具可以做同样的事情吗?

我尝试了sar和sadf的组合,但是我得到了一个复杂的json格式,我不需要它。

代码语言:javascript
复制
/usr/bin/sar -r 1 1 -o tmp1 &> 1;
/usr/bin/sadf tmp1 -j --iface=eth1 -- -u -r -n DEV

我得到了这个输出:

代码语言:javascript
复制
{
    "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": []
        }]
    }
}

我正在寻找这样的东西(或者是简单的关闭一个):

代码语言:javascript
复制
{
  "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": []
      }
    ]
  }
}
EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2019-08-02 07:56:53

我认为jq是选择的工具。

jq就像用于JSON数据的sed --您可以使用它对结构化数据进行切片、过滤、映射和转换,就像sedawkgrep和朋友让您玩文本一样容易。

关于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

这意味着:

代码语言:javascript
复制
{
  "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
}
票数 1
EN

Unix & Linux用户

发布于 2019-08-02 08:04:37

您可以在python中使用psutil并创建自定义的json。

psutil (python系统和进程实用程序)是一个跨平台库,用于检索Python中运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。它主要用于系统监控、分析、限制流程资源和管理运行过程。它实现了UNIX命令行工具所提供的许多功能,如: ps、top、lsof、netstat、ifconfig、who、df、kill、free、尼斯、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap。

示例:

代码语言:javascript
复制
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)

产出:

代码语言:javascript
复制
{"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

票数 3
EN

Unix & Linux用户

发布于 2019-08-02 09:24:07

使用JSON解析器jq这样做,如下所示,如果您无法像预期的那样调整原始命令(sarsadf)以生成JSON

代码语言:javascript
复制
jq '.sysstat.hosts[] |= { nodename, statistics : [ { timestamp : .statistics[].timestamp | { date, time }, 
    "cpu-load": .statistics[]."cpu-load"[] | [{ idle }], 
    "memory": .statistics[].memory | { memfree, avail, "memused-percent" }, 
    "network" : { "net-dev" : .statistics[].network."net-dev"[] | { iface, rxpck, txpck, "ifutil-percent"} } } ] , restarts}'

您可以看到此过滤器在jq-游乐场在jq-1.6中工作。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/533508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档