Cortar cabeçalhos do comando vmstat?

2

Existe uma maneira de executar o comando VMSTAT (ou algo parecido) e ter um timestamp incluído na linha? Eu sei que posso canalizar a saída do comando e manipular os resultados, mas, se eu fizer isso, receberei informações indesejadas; Disseram-me que a primeira linha do VMSTAT contém dados falsos, e eu estaria essencialmente recebendo uma lista repetida de primeiras linhas.

Existe uma maneira de obter este tipo de dados, seja com VMSTAT ou algo similar:

20090826.134908 0  0      0 241832 120064 3023856    0    0     0     1    0     0  0  0 100  0

Obrigado!
Vingador IVR

    
por IVR Avenger 27.08.2009 / 18:43

6 respostas

2

vmstat -n 1 | (while read; do echo "$(date +%Y%m%d.%H%M%S) $REPLY"; done) | tail -n +3
    
por 27.08.2009 / 19:36
2
while sleep 1 ; do echo 'date '+%Y%m%d.%H%M%S'' 'vmstat | head -3 | tail -1' ; done
    
por 27.08.2009 / 19:55
0

Sar pode funcionar melhor:
Eu recomendaria o comando sar, que faz parte do pacote sysstat. Por padrão, isso inclui timestamps e há opções para obter todos os tipos de dados. O uso mais básico seria apenas:

sar 1 3 #interval of 1, for a count of 3

Veja 'man sar' para obter estatísticas de memória e paginação.

Se você usa vmstat:
Se você for usar o vmstat, uma vez que o terminal esteja cheio, ele irá imprimir o cabeçalho novamente (pelo menos minha versão GNU), então use a opção -n para suprimir isso.

    
por 27.08.2009 / 20:19
0

Não tenho certeza do que você quer dizer com "se eu [manipular os resultados], receberei informações de lixo eletrônico". Você pode fazer algo assim:

vmstat 8 | sed '3d'

Isso removerá a linha que sempre é dito para ignorar. Como alternativa, se você quiser remover isso e o cabeçalho também:

vmstat 8 | sed '1,3d'

Isso também cuidará do cabeçalho. Se o cabeçalho se repetir, você pode usar algo assim:

vmstat 8 | sed '3d; /memory/d; /free/d;'

No meu caso, "memória" estava na linha 1 e "livre" na linha 2; substitua por suas próprias seqüências apropriadas.

    
por 27.08.2009 / 18:55
0

Aqui está uma solução rápida e suja:

 while true; do date;vmstat 1 2|tail -n1; done

A propósito, a primeira linha não é falsa - ela contém médias desde a última reinicialização.

    
por 27.08.2009 / 18:56
0

I know that I can pipe the output of the command and manipulate the results, but if I do that, I'll get junk information

Não tenho certeza do que você quer dizer com isso. Se os comandos não derem a saída que você deseja, não consigo pensar em nada além de canalizar e formatar a saída.

De qualquer forma, isso produz o formato que você deseja.

$ date='date "+%Y%m%d.%H%M%S"' && vmstat='vmstat | tail -1' && echo $date$vmstat
20090827.175715 3  1      8 116848 121072 599320    0    0     0     4    3    6  0  0 100  0
    
por 27.08.2009 / 18:58