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.
 
             
             Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
   Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!