Estatísticas de largura de banda, CPU e memória retornadas em uma única linha do terminal

1

Estou tentando criar um sistema de monitoramento simples que mostrará um gráfico de vendas totalmente vinculado a dados de largura de banda, CPU e estatísticas de memória relacionadas a vendas. Portanto, se eu vender um widget por 5 segundos, isso dependerá da minha largura de banda, etc. acima de um certo limite. Então, eu formulei uma maneira de fazer o gráfico, mas estou apenas tendo tempo para obter as estatísticas. Eu posso usar qualquer um dos vários sistemas de monitoramento, mas eu só preciso de uma linha para largura de banda, uso da CPU e uso da memória uma vez por segundo. Eu fiz um script python que obtém todas as informações de IP de todas as interfaces. Mas para se eu tivesse um script eu poderia executar a partir do terminal que simplesmente a saída de uma única linha eu poderia apenas canalizar isso para um arquivo e depois acessar o arquivo para executar meu gráfico em tempo real.

Então, para a rede, posso usar:

$ ifconfig

Eu canalizo em um arquivo json para facilitar a referência.

Eu posso usar:

$ free -m

para memória que eu suponho que eu possa canalizar em um arquivo também

Então eu poderia usar:

$ cat /proc/loadavg

para a CPU e novamente canalizar isso.

Existe uma maneira mais fácil de fazer isso? Para que eu receba uma única linha para cada comando e possa facilmente (mais importante rapidamente) enviar essa informação via Javascript ou HTML5 FileReader para a solução gráfica?

    
por Verber 01.02.2013 / 08:39

2 respostas

1

Eu não acho que haja uma maneira fácil de agregar os dados que você deseja, mas você pode colocar vários comandos juntos e enviá-los para qualquer coisa. Passei um pouco de tempo para dar um exemplo.

{
  printf '%s' '{"load":["'$(cut -d' ' --output-delimiter='","' -f-3 /proc/loadavg)
  printf '%s' '"],"net":{'
  tail -n+3 /proc/net/dev|awk -F' ' '{
    gsub(/:/,"");
    printf "\"%s\":{\"rxbytes\":\"%s\",\"rxpackets\":\"%s\",\"rxerrs\":\"%s\",\"rxdrop\":\"%s\",\"txbytes\":\"%s\",\"txpackets\":\"%s\",\"txerrs\":\"%s\",\"txdrop\":\"%s\"},",$1,$2,$3,$4,$5,$10,$11,$12,$13
  }'|sed 's/,$//'
  printf '%s' '},"mem":{'
  grep -E '^(MemTotal|MemFree|SwapTotal|SwapFree):' /proc/meminfo|tr 'A-Z' 'a-z'|awk -F' ' '{gsub(/:/,""); printf "\"%s\":\"%s\",",$1,$2}'|sed 's/,$//'
  printf '%s' '}}'
}

Você poderia esmagar isso:

{ printf '%s' '{"load":["'$(cut -d' ' --output-delimiter='","' -f-3 /proc/loadavg); printf '%s' '"],"net":{'; tail -n+3 /proc/net/dev|awk -F' ' '{ gsub(/:/,""); printf "\"%s\":{\"rxbytes\":\"%s\",\"rxpackets\":\"%s\",\"rxerrs\":\"%s\",\"rxdrop\":\"%s\",\"txbytes\":\"%s\",\"txpackets\":\"%s\",\"txerrs\":\"%s\",\"txdrop\":\"%s\"},",$1,$2,$3,$4,$5,$10,$11,$12,$13 }'|sed 's/,$//'; printf '%s' '},"mem":{'; grep -E '^(MemTotal|MemFree|SwapTotal|SwapFree):' /proc/meminfo|tr 'A-Z' 'a-z'|awk -F' ' '{gsub(/:/,""); printf "\"%s\":\"%s\",",$1,$2}'|sed 's/,$//'; printf '%s' '}}'; }

Isso deve gerar um JSON (válido) semelhante a este:

{"load":["0.00","0.01","0.05"],"net":{"lo":{"rxbytes":"2524231953","rxpackets":"1381864","rxerrs":"0","rxdrop":"0","txbytes":"2524231953","txpackets":"1381864","txerrs":"0","txdrop":"0"},"eth0":{"rxbytes":"2093914043","rxpackets":"2859952","rxerrs":"0","rxdrop":"0","txbytes":"1774385937","txpackets":"1485252","txerrs":"0","txdrop":"0"}},"mem":{"memtotal":"1692584","memfree":"20248","swaptotal":"917500","swapfree":"916288"}}

Você pode então adicionar | whatever após o fechamento para canalizar para qualquer coisa.

    
por 02.02.2013 / 04:53
0

Você pode querer analisar o i3status . Não é realmente projetado para esse propósito, mas parece que atenderia muito bem aos seus requisitos.

    
por 01.02.2013 / 08:58