Pergunta

Nesta questão alguém perguntou maneiras de exibir o uso do disco no Linux.Eu gostaria de dar um passo adiante no cli-path ...que tal um script de shell que obtém a saída de algo como uma resposta razoável à pergunta anterior e gera um gráfico/gráfico a partir dela (saída em um arquivo png ou algo assim)?Isso pode ser um código um pouco demais para ser solicitado em uma pergunta normal, mas meu palpite é que alguém já tem um oneliner em algum lugar ...

Foi útil?

Solução

eu recomendaria Munin.Ele foi projetado exatamente para esse tipo de coisa - representar graficamente o uso da CPU, o uso da memória, o uso do disco e outros.mais ou menos como o MRTG (mas o MRTG tem como objetivo principal representar graficamente o tráfego do roteador, representar graficamente qualquer coisa, exceto a largura de banda, é muito hackeado)

Escrever plugins Munin é muito fácil (era um dos objetivos do projeto).Eles podem ser escritos em quase qualquer coisa (shell script, perl/python/ruby/etc, C, qualquer coisa que possa ser executada e produzir uma saída).O formato de saída do plugin é basicamente disc1usage.value 1234.E depurar os plugins é muito fácil (em comparação com MRTG)

Eu configurei-o no meu laptop para monitorar o uso do disco, o uso da largura de banda (extraindo dados do painel de controle do meu ISP, ele representa graficamente minhas duas "caixas" de download, uploads e uso de grupos de notícias), média de carga e número de processos.Depois de instalá-lo (atualmente um pouco difícil no OS X, mas é trivial no Linux/FreeBSD), escrevi um plugin em poucos minutos e funcionou na primeira vez!

Eu descreveria como está configurado, mas o site munin fará isso muito melhor do que eu!

Há um exemplo de instalação aqui

Algumas alternativas são nagios e cactos.Você também pode escrever algo semelhante usando rrdtool.Munin, MRTG e Cacti são basicamente sistemas muito mais agradáveis ​​de usar, baseados nesta ferramenta gráfica.

Se você quiser algo muito, muito simples, você pode fazer ..

import os
import time
while True:
    disc_usage = os.system("df -h / | awk '{print $3}'")
    log = open("mylog.txt")
    log.write(disc_usage + "\n")
    log.close()
    time.sleep(60*5)

Então..

f = open("mylog.txt")
lines = f.readlines()

# Convert each line to a float number
lines = [float(cur_line) for cur_line in lines]

# Get the biggest and smallest
biggest = max(lines)
smallest = min(lines)

for cur_line in lines:
    base = (cur_line - smallest) + 1 # make lowest value 1
    normalised = base / (biggest - smallest) # normalise value between 0 and 1
    line_length = int(round(normalised * 28)) # make a graph between 0 and 28 characters wide
    print "#" * line_length

Isso criará um gráfico ASCII simples do uso do disco.EU sério sério não recomendo que você use algo assim.Por que?O arquivo de log ficará cada vez maior e maior.O gráfico ficará progressivamente mais lento para representar graficamente.RRDTool usa um sistema de banco de dados contínuo para armazenar seus dados, de modo que o arquivo nunca ficará maior que 50-100 KB e é consistentemente rápido para representar graficamente, pois o arquivo tem um comprimento fixo.

Resumidamente.Se você quiser que algo represente facilmente quase tudo, use Munin.Se você quiser algo menor e independente, escreva algo com RRDTool.

Outras dicas

Se alguns caracteres ASCII forem "gráficos" o suficiente para você, posso recomendar ncdu.É uma ferramenta CLI interativa muito boa, que me ajuda muito a abandonar diretórios grandes sem fazer cd bigdir ;du -hs repetidamente.

Fizemos o nosso no trabalho usando Ferramenta RRD (o back-end de armazenamento de dados para ferramentas como MRTG).Executamos um script perl a cada 5 minutos que leva um du por partição e o coloca em um banco de dados RRD e então usa a função gráfica do RRD para construir gráficos.Demora um pouco para descobrir como configurar os arquivos .rrd (por exemplo, tive que reaprender RPN para fazer alguns dos cálculos que queria fazer), mas se você tiver alguns dados que deseja representar graficamente ao longo do tempo, A ferramenta RRD é uma boa aposta.

Acho que existem algumas opções:

  1. Para uma solução CLI pura, use algo como gnuplot.Ver aqui por exemplo, uso.Não uso o gnuplot desde meus tempos de estudante :-)

  2. Não é realmente uma solução CLI pura, mas baixe algo como JFreeChart e escreva um aplicativo Java simples que leia stdin e crie seu gráfico.

Espero que isto ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top