Domanda

In questa domanda qualcuno ha chiesto modi per visualizzare l'utilizzo del disco in Linux.Mi piacerebbe fare questo passo avanti lungo il sentiero del clima...che ne dici di uno script di shell che prenda l'output da qualcosa come una risposta ragionevole alla domanda precedente e generi un grafico/diagramma da esso (output in un file png o qualcosa del genere)?Potrebbe essere un po' troppo codice da chiedere in una domanda normale, ma la mia ipotesi è che qualcuno abbia già una frase in giro da qualche parte...

È stato utile?

Soluzione

io raccomanderei munin.È progettato esattamente per questo genere di cose: rappresentare graficamente l'utilizzo della CPU, l'utilizzo della memoria, l'utilizzo del disco e così via.un po' come MRTG (ma MRTG è principalmente finalizzato a rappresentare graficamente il traffico del router, rappresentare graficamente qualsiasi cosa tranne la larghezza di banda con esso è molto hacker)

Scrivere i plugin Munin è molto semplice (era uno degli obiettivi del progetto).Possono essere scritti praticamente in qualsiasi cosa (script di shell, perl/python/ruby/etc, C, qualsiasi cosa che possa essere eseguita e produrre un output).Il formato di output del plugin è fondamentalmente disc1usage.value 1234.E il debug dei plugin è molto semplice (rispetto a MRTG)

L'ho configurato sul mio laptop per monitorare l'utilizzo del disco, l'utilizzo della larghezza di banda (estraendo i dati dal pannello di controllo del mio ISP, traccia un grafico dei miei due "contenitori" di download, caricamenti e utilizzo dei newsgroup), carico medio e numero di processi.Una volta installato (al momento leggermente difficile su OS X, ma è banale su Linux/FreeBSD), ho scritto un plugin in pochi minuti e ha funzionato al primo tentativo!

Vorrei descrivere come è configurato, ma il sito Munin lo farà molto meglio di quanto potrei fare io!

C'è un esempio di installazione Qui

Alcune alternative sono nagios e cactus.Potresti anche scrivere qualcosa di simile usando rrdtool.Munin, MRTG e Cacti sono fondamentalmente tutti sistemi molto più piacevoli da usare basati su questo strumento grafico.

Se vuoi qualcosa di veramente, davvero semplice, potresti fare...

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)

Poi..

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

Ciò creerà un semplice grafico ASCII dell'utilizzo del disco.IO davvero davvero non ti consiglio di usare qualcosa del genere.Perché?Il file di registro diventerà sempre più grande, sempre più grande.Il grafico diventerà progressivamente più lento da rappresentare graficamente.RRDTool utilizza un sistema di database mobile per archiviare i suoi dati, quindi il file non supererà mai le dimensioni di circa 50-100 KB ed è sempre veloce da rappresentare graficamente poiché il file ha una lunghezza fissa.

In breve.Se vuoi qualcosa per rappresentare facilmente quasi tutto, usa munin.Se vuoi qualcosa di più piccolo e autonomo, scrivi qualcosa con RRDTool.

Altri suggerimenti

Se alcuni caratteri ASCII sono abbastanza "grafici" per te, posso consigliarlo ncdu.È uno strumento CLI interattivo molto carino, che mi aiuta molto a ridurre le directory di grandi dimensioni senza fare cd bigdir ;du -hs ancora e ancora.

Abbiamo lanciato il nostro al lavoro usando RRDtool (il back-end di archiviazione dei dati per strumenti come MRTG).Eseguiamo uno script perl ogni 5 minuti che prende una du per partizione e la inserisce in un database RRD e quindi utilizza la funzione grafica di RRD per creare grafici.Ci vuole un po' per capire come impostare i file .rrd (ad esempio, ho dovuto imparare di nuovo RPN per fare alcuni dei calcoli che volevo fare) ma se hai dei dati che vuoi rappresentare graficamente nel tempo, Lo strumento RRD è una buona scommessa.

Immagino che ci siano un paio di opzioni:

  1. Per una soluzione CLI pura, usa qualcosa come gnuplot.Vedere Qui ad esempio l'utilizzo.Non uso gnuplot dai tempi in cui ero studente :-)

  2. Non proprio una soluzione CLI pura, ma scarica qualcosa di simile JFreeChart e scrivi una semplice app Java che legge stdin e crea il tuo grafico.

Spero che questo ti aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top