AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 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

Como recuperar apenas estatísticas específicas de CPU, memória e interface

  • 772

Existe a exigência de coletar apenas estatísticas específicas como %idle, memfree, available, pmemused etc. Além disso, tenho que converter a saída em uma string json e consumi-la.

Existe alguma ferramenta UNIX que possa fazer o mesmo?

Eu tentei sar e sadf em combinação, mas estou recebendo um formato json complexo que não preciso.

/usr/bin/sar -r 1 1 -o tmp1 &> 1;
/usr/bin/sadf tmp1 -j --iface=eth1 -- -u -r -n DEV

Eu recebo esta saída:

{
    "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": []
        }]
    }
}

Estou procurando algo assim (ou fechar um que é simples):

{
  "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 respostas
  • 1559 Views

3 respostas

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

    Você pode usar psutil em python e criar seu json personalizado.

    psutil (utilitários de sistema e processo python) é uma biblioteca multiplataforma para recuperar informações sobre processos em execução e utilização do sistema (CPU, memória, discos, rede, sensores) em Python. É útil principalmente para monitoramento do sistema, criação de perfil, limitação de recursos de processo e gerenciamento de processos em execução. Ele implementa muitas funcionalidades oferecidas pelas ferramentas de linha de comando do UNIX, como: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap.

    Exemplo:

    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)
    

    resultado:

    {"swap_used": 14061568, "percent_mem": 48.3, "free_mem": 1792401408, "total_mem": 12447776768, "mem_used": 5128196096, "swap_total": 11999899648, "swap_percent": 0.1}
    

    link útil: https://github.com/giampaolo/psutil

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

    Eu acho que jq é a ferramenta de escolha.

    jqé como sedpara dados JSON - você pode usá-lo para fatiar, filtrar, mapear e transformar dados estruturados com a mesma facilidade que sed, awk, grepe friends permitem que você brinque com texto.

    Um tutorial brilhante sobre jqpode ser encontrado no Github https://stedolan.github.io/jq/tutorial/ e um bom aqui: https://programminghistorian.org/en/lessons/json-and-jq .

    Por exemplo, para chegar à parte "memfree", canalize a saída de seus comandos para ficar jqassim:

    ... | jq .[].hosts[].statistics[].memory.memfree

    que dá:

    3707764

    Ou, para obter toda a parte da memória em um JSON:

    ... | | jq .[].hosts[].statistics[].memory

    que dá:

    {
      "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

    Faça isso com o analisador JSON jqconforme abaixo se você não conseguir ajustar o comando original ( sarou sadf) para produzir o JSON conforme o esperado

    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}'
    

    Você pode ver este filtro funcionando no jq-playground no jq-1.6

    • 1

relate perguntas

  • Usando jq para obter uma saída estruturada

  • Extraia o elemento da matriz json com base em um valor de subelemento

  • Como converter string json incorporada (entre aspas) em json

  • chave de impressão jq e valor para todos no subobjeto

  • jq adicionar ou atualizar um valor com vários --arg

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve