Como salvar em formato XML / JSON todas as informações do comando “free” e do comando “vmstat” incluindo o tempo?

1

Eu preciso disso a cada 2 minutos:

Estou usando o Debian (somente em modo texto).

    
por Ed S 29.03.2017 / 22:55

1 resposta

4

Como posso (simplesmente) agrupar essa saída em XML / JSON?

Supondo que você não deseja tags individuais para total , used , free shared etc, é possível envolver toda a saída em tags delimitadoras, conforme apropriado:

XML

O seguinte script pode ser salvo como (por exemplo) memoryinfo-xml.sh :

#!/bin/bash
# memoryinfo-xml.sh - wrap output of free + vmstat in XML tags
echo "<output>"
  echo -e "\t<date>$(date)</date>"
  echo -e "\t<free>$(free)</free>"
  echo -e "\t<vmstat>$(vmstat)</vmstat>"
echo "</output>" 
Exemplo de saída

:

<output>                                                                                                          
    <date>Thu 30 Mar 16:21:18 BST 2017</date>
    <free>             total       used       free     shared      buffers     cached
Mem:       3853532    3721596     131936     100868     227652    3024584
-/+ buffers/cache:     469360    3384172
Swap:      1182716       2512    1180204</free>
    <vmstat>procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
1  0   2512 132084 227652 3024584    0    0     3     2    4    4  1  0 99  0  0</vmstat>
</output>

Como você pode ver, não é exatamente bonito!

JSON

Muito semelhante a antes, salve como (por exemplo) memoryinfo-json.sh :

#!/bin/bash
# memoryinfo-json.sh - wrap output of free + vmstat in json
# thanks to https://stackoverflow.com/a/1252191 for \n replacement
echo "{ \"output\":"
  echo -e "\t { \"date\":  \"$(date)\", "
  echo -e "\t  \"free\":   \"$(free | sed ':a;N;$!ba;s/\n/||/g')\", "
  echo -e "\t  \"vmstat\": \"$(vmstat| sed ':a;N;$!ba;s/\n/||/g')\" "
echo "}"
Exemplo de saída

:

{
    "output": {
        "date": "Thu 30 Mar 16: 48: 51 BST 2017",
        "free": "total used free shared buffers cached || Mem: 3853532 3722428 131104 100868 227888 3024844 || -/+ buffers/cache: 469696 3383836 || Swap: 1182716 2512 1180204",
        "vmstat": "procs-- -- -- -- -- - memory-- -- -- -- -- -- - swap-- -- -- - io-- -- - system-- -- -- --cpu-- -- - || r b swpd free buff cache si so bi bo in cs us sy id wa st || 1 0 2512 131096 227888 3024844 0 0 3 2 4 4 1 0 99 0 0"
    }
}

Observe que, para obter JSON válido , as novas linhas foram substituídas por um caractere de canal duplo ( || ), via sed replacement .

    
por 30.03.2017 / 17:55