AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 533508
Accepted
Aditya369
Aditya369
Asked: 2019-08-02 23:33:36 +0800 CST2019-08-02 23:33:36 +0800 CST 2019-08-02 23:33:36 +0800 CST

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

  • 772

需要仅收集特定的统计信息,例如 %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": []
      }
    ]
  }
}
json statistics
  • 3 3 个回答
  • 1559 Views

3 个回答

  • Voted
  1. Rasool Ziafaty
    2019-08-03T00:04:37+08:002019-08-03T00:04:37+08:00

    您可以在 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

    • 3
  2. Best Answer
    Edward
    2019-08-02T23:56:53+08:002019-08-02T23:56:53+08:00

    我认为jq是首选工具。

    jq就像sedJSON 数据一样 - 您可以使用它来切片、过滤、映射和转换结构化数据,就像 ,sed和朋友让您玩文本一样容易。awkgrep

    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
    }
    
    • 1
  3. Inian
    2019-08-03T01:24:07+08:002019-08-03T01:24:07+08:00

    jq如果您无法调整原始命令 (sar或sadf) 以按预期生成 JSON,请使用 JSON 解析器执行此操作,如下所示

    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-1.6 上的 jq-playground 中看到此过滤器

    • 1

相关问题

  • 使用 jq 获取结构化输出

  • 根据子元素值提取json数组元素

  • 如何将嵌入(引用)的 json 字符串转换为 json

  • jq 打印子对象中所有的键和值

  • jq 使用多个 --arg 添加或更新一个值

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve