1
resposta

Adicionando monitoramento de I/O (Leitura/Escrita) do Disco no script

E aí, galera!

Nosso script de monitoramento já está pegando RAM e CPU. Agora, vamos adicionar a última parte importante do hardware: o I/O (Input/Output) do disco, ou seja, a atividade de leitura e escrita.

Não adianta ter CPU e RAM sobrando se o disco estiver lento e não conseguir entregar ou salvar os dados (o famoso "gargalo").

O Comando Base: 'iostat'

O comando que mostra isso é o 'iostat'. O problema é que, se você rodar ele sozinho, ele traz um monte de informação, incluindo o uso de CPU (que a gente já monitora de outro jeito) e um cabeçalho grande.

A parte que realmente nos interessa é a tabela "Device".

A Tabela "Device"

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.02 1.27 0.00 81929 0 sdb 0.00 0.03 0.00 22284 0 sdc 1.72 23.12 15.19 1489993 979064

'tps': Transações por segundo (quantas operações de leitura/escrita).

'kB_read/s': Quantos KB estão sendo lidos por segundo.

'kB_wrtn/s': Quantos KB estão sendo escritos por segundo.

(Os seus discos podem ter nomes diferentes, como 'sda', 'sdb', ou 'nvme0n1' se for um SSD M.2).

Filtrando a Saída (Grep e Awk)

A gente quer extrair só essa tabela, e melhor ainda, só as colunas que importam (as 4 primeiras).

Passo 1: Usar 'grep -E' para pegar só as linhas que começam ('^') com 'sda', 'sdb', 'sdc' (ou os nomes dos seus discos) e a linha do cabeçalho ('Device'). O '-E' é para usar a regex com o '|' (que significa "OU").

iostat | grep -E "Device|^sda|^sdb|^sdc"

Passo 2: Pegar essa saída e jogar no 'awk' para "fatiar" só as 4 primeiras colunas ($1, $2, $3, $4).

iostat | grep -E "Device|^sda|^sdb|^sdc" | awk '{print $1, $2, $3, $4}'

Adicionando ao Script

Agora é só levar esse comando final para a nossa função 'monitorar_hardware()' no script. Para ficar organizado no log, a gente adiciona um 'echo' antes.

A função 'monitorar_hardware' completa fica assim:

function monitorar_hardware() { echo "$(date)" >> $LOG_DIR/monitoramento_hardware.txt

free -h | grep Mem | awk '{print "Memoria RAM Total: " $2 ", Usada: " $3 ", Livre: " $4}' >> $LOG_DIR/monitoramento_hardware.txt

top -bn1 | grep "Cpu(s)" | sed "s/.*, ([0-9.])% id./\1/" | awk '{print "Uso da CPU: " 100 - $1 "%"}' >> $LOG_DIR/monitoramento_hardware.txt

(Novas linhas aqui:)
echo "Operacoes de leitura e escrita:" >> $LOG_DIR/monitoramento_hardware.txt
iostat | grep -E "Device|^sda|^sdb|^sdc" | awk '{print $1, $2, $3, $4}' >> $LOG_DIR/monitoramento_hardware.txt
}

Testando

Agora é só salvar, sair do editor (Esc, :wq), rodar o script e checar o log:

./monitoramento-sistema.sh cat monitoramento_sistema/monitoramento_hardware.txt

No final do arquivo de log, você vai ver o novo título "Operacoes de leitura e escrita:" e a tabelinha do 'iostat' que a gente filtrou.

Pronto! Nosso log de hardware agora está completo, monitorando RAM, CPU e I/O de disco.

1 resposta

Oi, João! Como vai?

Gostei muito da forma como você explicou a adição do monitoramento de I/O no script. Sua explicação ficou bem completa e didática, mostrando passo a passo como filtrar as informações relevantes do comando iostat.

Continue explorando formas de automatizar a coleta de métricas, isso vai deixar seus scripts ainda mais úteis.

Dica: experimente adicionar um campo no log para mostrar a data e hora junto com os dados de I/O. Assim, você pode acompanhar a variação ao longo do tempo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!