Newsgroup: it.comp.os.linux.iniziare
Titolo: creare semplici grafici x-y

Ciao a tutti.
Ho un'esigenza che mi pare banale, ma non so come trattarla ed affrontarla.
Raccolgo giornalmente i dati sulla quantitï¿œ di traffico effettuata tra 
alcuni host, in particolare uso il comando "iptables -L -nv --exact" per 
visualizzare il dato che mi interessa.
Riesco, con "cut", a filtrare soltanto il dato interessato (quantitï¿œ di 
bytes), che quindi posso appendere in un file di testo.
Mi trovo quindi con una colonna con un elenco di numeri.
Vorrei abbinare ad ogni numero la relativa "data di collezione", per poi 
creare un (semplice) grafico avente sull'asse X la data, sull'asse Y la 
quantitï¿œ di dati trasferiti.
Con quali strumenti posso ottenere questo risultato?
Grazie...

Ti consiglio di utilizzare gli RRDtools,
ï¿œ una serie di tools che ti permettono di raccogliere dati e di 
memorizzare anche la data, oltre a farne anche i grafici.
Come strumento viene spesso utilizzato per raccogliere e fare 
statistiche a livello di monitoraggio di rete, quindi direi che puï¿œ fare 
per te.
http://oss.oetiker.ch/rrdtool/


qualsiasi linguaggio di programmazione va bene
pure in bash
salva la data (l'output del comando date) assieme al numero di bytes 
scaricati
quindi leggi una riga alla volta il file e, invece di visualizzare i 
bytes come numero, li visualizzi come colonna di asterischi...
per farlo bene, dovresti caricare i valori in una tabella, vedere 
qual'e' il piu' grande, e rapportarlo con la colonna di altezza massima 
(20 caratteri per esempio)... e quindi rapportare tutti gli altri valori 
di conseguenza
insomma, non e' difficile, pero' un po' devi saper gia' programmare per 
farlo

 Con quali strumenti posso ottenere questo risultato?
http://pchart.sourceforge.net/

 memorizzare anche la data, oltre a farne anche i grafici.
Grazie del suggerimento, ma non ï¿œ "un po' troppo" per le esigenze minime 
che ho?
ï¿œ, inoltre, in grado di pescare il valore che ora io sto leggendo con 
iptables e raccoglierlo in una sorta di banca dati per poi 
rappresentarmene l'evoluzione temporale?
Inoltre: che ne pensi/pensate di gnuplot, invece?
Grazie...

 
Figurati

 Inoltre: che ne pensi/pensate di gnuplot, invece?
Tempo f� lo avevo usato su un file del tipo
x1 y1
x2 y2
.. ..
xn yn
con gnuplot ricavare un grafico da un file del genere era
veamente banale.
Detto ci�, ora non ricordo bene come facevo, ma una brevissima
guida a gnuplot dovrebbe contenere un esempietto per ottenere il
grafico a partire da quel file.
Il problema mi pare come creare quel file.
Nel tuo caso le X sono i tempi, quello che mi sfuggie � come
associarli al tuo output. Cio� il tempo lo devi registrare in
"live", a posteriori nan lo sai pi�...a meno ch� nel log che
consulti, non trovi anche la data, come in gran parte dei file di
log.... Ma forsedovrei rileggermi meglio il tuo primo post.  :-\

 log.... Ma forsedovrei rileggermi meglio il tuo primo post.  :-\
Ho capito...eggendo meglio, le tue X sono i giorni e le Y
l'output ritagliato del comando "iptables vattelapesca".
Nel primo post dici di appendere la quantit� di dati scambiati al
file di log che crei.
Ecco, per appenderlo farai cos� immagino:
comando >> file.log
per comando intendo "iptables blabla |cut blabla eccecc"
Questo ti da un file di log del tipo:
y1
y2
y3
y4
Baster� creare il file di log nel modo seguente:
echo `date -opzioni` `iptables blabla |cut blabla ecc` >> file.log
Questo da vit� ad un file di log del tipo
data1 traffico1
data2 traffico2
data3 traffico3
..... .........
dataN trafficoN
Ecco che di questo puoi crearne il grafico con gnuplot.
Mi resta qualche dubbio sulformato della data, vedi man date...
Potrebbe inoltre essere necessario mettere la data fra virgolette
quando crei il log, per far capire a gnuplot chesi tratta di una
variabile unica anche se contiene uno spazio.

 gnuplot?
due cose "difficili" (1) c'e' un formato per scrivere le date
sull'asse x e un formato per leggere le date nel file e (2) se nel
campo data-orario ci sono degli spazi bianchi, gnuplot lo legge
correttamente (se nel formato c'e' lo spazio) ma "consuma" un campo in
piu', cosi' dovrai dire "plot 'dati' using 1:3"
% cat dati
2009-11-02 19:34:27 2000
2009-11-03 18:34:20 2200
2009-11-04 19:37:07 2400
% cat 
plottadati.gp
set xdata time
set format x "%d %H"
set timefmt "%Y-%m-%d %H:%M:%S"
set yrange [1800:2600]
set term dumb
plot 'dati' using 1:3 with linespoints title "Serie temporale"
% gnuplot 
plottadati.gp
    2600 +++--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+++
         +      +       +      +       +      +      Serie temporale **A*** +
    2500 ++                                                                ++
         |                                                                  |
         |                                                                  |
    2400 ++                                                         ***A   ++
         |                                                    ******        |
    2300 ++                                            *******             ++
         |                                       ******                     |
         |                                 ******                           |
    2200 ++                          **A***                                ++
         |                     ******                                       |
    2100 ++              ******                                            ++
         |          *****                                                   |
         |    ******                                                        |
    2000 ++A**                                                             ++
         |                                                                  |
    1900 ++                                                                ++
         |                                                                  |
         +      +       +      +       +      +       +      +       +      +
    1800 +++--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+++
       02 18  03 00   03 06  03 12   03 18  04 00   04 06  04 12   04 18  05 00
% 
naturalmente non c'� solo il terminale "dumb"...

 log.... Ma forsedovrei rileggermi meglio il tuo primo post.  :-\
Grazie di esserti fatto dei pensieri su "come" raccogliere i dati. In 
effetti non � un grosso problema, l'ho raggiunto il risultato che volevo 
con questo bash-script:
#!/bin/sh
MESE=`date +%Y-%m`
IERI=`date --date='1 day ago' '+%Y-%m-%d'`
IPT=/sbin/iptables
for i in $(cat CLIENTI.TXT)
do
         $IPT -L -nv --exact | grep $i | awk '{print $2}' | tr '\n' '\t' 
 >> /tmp/$IERI-$i.txt
         echo -e "\r" >> /tmp/$IERI-$i.txt
         cat /tmp/$IERI-$i.txt | sed "s/^/`date --date='1 day ago' 
'+%Y-%m-%d'`\t/" >> $MESE-$i.dat
         rm /tmp/$IERI-$i.txt
done
# Reset byte counters
$IPT -Z
Ottengo cos� un file per ogni "CLIENTE" fatto cos�:
#Data		#INPUT		#OUTPUT
2009-11-02	2324354545	24524542
2009-11-03	553434354	32445463
Da qui poi � semplice, una volta al mese, raccogliere i dati con gnuplot...