saída iostat muito específica necessária em tempo real

2

Existe alguma maneira de obter a saída do iostat -m e adicionar apenas a coluna que aguarda a saída estendida em tempo real? Eu sei que esta pergunta soa nutso, mas eu preciso ser capaz de obter todas essas colunas em tempo real, sem saída para um arquivo ou executando o iostat duas vezes desde que daria resultados enganosos. Isto é centos 6.2 iostat 9.0.4. kernel 2.6.36.4. Então, para resumir, preciso disso.

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda               0.56         0.00         0.00        324        485

e preciso adicionar o aguardar para que fique assim.

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn   await
sda               0.56         0.00         0.00        324        485   10.72

Estou sonhando? Eu estou olhando para isto do jeito errado? Preciso compilar meu próprio iostat?

Obrigado antecipadamente.

    
por egorgry 23.08.2012 / 16:23

4 respostas

2

Não sei como obter a formatação iostat que você está procurando. A ferramenta que uso para esse tipo de monitoramento, no entanto, é personalizável até o ponto em que você pode exibir os campos relevantes. Também é excelente para gerar dados para fins de replay e gráficos.

Eu uso o monitoramento Collectl (disponível no CentOS via yum), e o arquivos de verificação de disco devem fornecer o que você precisa:

collectl -sD --dskfilt sda

Exemplo de saída (você pode alterar as unidades e colunas impressas):

collectl -sD --dskfilt sdb
waiting for 1 second sample...

# DISK STATISTICS (/sec)
#          <---------reads---------><---------writes---------><--------averages--------> Pct
#Name       KBytes Merged  IOs Size  KBytes Merged  IOs Size  RWSize  QLen  Wait SvcTim Util
sdb              0      0    0    0     336      0   52    6       6     0     0      0    1
sdb             16      0    1   16     389      1   52    7       7     0     0      0    3
sdb              0      0    0    0    1236      9  109   11      11     0     0      0    0
sdb             16      0    1   16     676      3  140    5       4     0     1      1   14
sdb              0      0    0    0      64      1   16    4       4     0     2      1    2
    
por 23.08.2012 / 16:37
1

Por que não criar um wrapper no bash?

A versão de uma linha seria semelhante a:

iostat 1 2 | grep -w sda | tail -1 | awk {'print $7'}

Isso executará o iostat duas vezes e retornará o valor correto de await (que é a 7a coluna)

Você pode fazer o mesmo com o vmstat passando a coluna da direita para o awk para obter todo o iowait da CPU. Por exemplo:

vmstat 1 2 | tail -1 | awk {'print $16'}

Note que o iostat e o vmstat são diferentes em cada distribuição do Linux e você tem que escolher a coluna da direita.

    
por 23.08.2012 / 16:39
1

Isso parece algo que deve ser monitorado com munin, grafite, etc.

EDITAR : Se o seu sistema tiver watch , você pode configurar o iostat para executar automaticamente um determinado número (ou infinitamente reapível) de vezes, com uma lacuna especificada entre as execuções! awk dos campos que você realmente quer!

    
por 23.08.2012 / 16:33
1

Relendo a pergunta original, se o autor está procurando informações em tempo real, eu concordo que collectl é o caminho a percorrer. é por isso que eu escrevi. ;)

Se houver algo específico que você esteja tentando fazer com os dados, talvez eu possa ajudar, mas precisaria saber mais. Quanto ao tempo real desejado, você pode escolher qualquer intervalo de monitoração de sub-segundo que desejar.

-mark

    
por 24.08.2012 / 14:46