Zeichnen Sie benutzerdefinierte Protokolldaten unter GNU / Linux

2

Ich protokolliere einige Daten zur NFS-Nutzung des Clients über ein Netzwerk. Jetzt möchte ich es in einem Liniendiagramm darstellen und bin überwältigt von den Möglichkeiten, die ich dort vorfinde. Niemand scheint für mich leicht zu verstehen zu sein.

Hier ist ein vereinfachtes Protokoll:

1356112995  192.168.1.46    766
1356112995  192.168.1.12    14
1356112995  192.168.1.141   5
1356112995  192.168.1.11    38
1356114790  192.168.1.46    760
1356114790  192.168.1.12    10
1356114790  192.168.1.11    18
1356116586  192.168.1.46    758
1356116586  192.168.1.12    9
1356118387  192.168.1.46    783
1356120187  192.168.1.46    687
1356121987  192.168.1.46    699
1356123787  192.168.1.46    371
1356125587  192.168.1.46    717
1356127386  192.168.1.46    0

Die erste Spalte ist ein Zeitstempel und sollte sich auf der X-Achse befinden. Die zweite Spalte ist die Client-IP. Die dritte Spalte gibt die Anzahl der Operationen an, die auf der Y-Achse liegen sollen. Das Diagramm sollte ein Liniendiagramm sein.

Ich möchte, dass dies automatisch erfolgt, daher ist das Plotten über die Befehlszeile der richtige Weg. Keine Ahnung, wie das geht.

Es sollte eine PNG-Datei generiert werden, die anschließend zur Visualisierung auf einen Webserver hochgeladen wird.

Jorge Suárez de Lis
quelle
Möchten Sie den Plot in der Befehlszeile sehen oder möchten Sie ein Bild erstellen und auf der Website veröffentlichen oder so?
mnmnc
Erstellen Sie ein Bild und laden Sie es auf einen Webserver hoch. Ich werde dies auf dem ursprünglichen Beitrag klären. Vielen Dank.
Jorge Suárez de Lis
Ich mag pCharts - & gt; pchart.sourceforge.net . Aber dies würde ein Javascript-Diagramm erzeugen, kein Bild wie jpg oder gif. Wenn Sie Flexibilität und schönes Aussehen wollen, würde ich mit so etwas gehen. Wenn Sie ein JPG- oder ein Bitmap-basiertes Bild haben müssen, ist Gnuplot wahrscheinlich das Beste für Sie.
mnmnc
Vielen Dank. Ich habe versucht, Gnuplot zu verstehen, aber es wird es nicht einfach machen. Ich werde eines Tages einen Blick in pCharts werfen, sieht interessant aus.
Jorge Suárez de Lis

Antworten:

0

Es gibt wahrscheinlich einige Möglichkeiten, dies zu tun, ohne Software zu installieren (bei NFS gehe ich davon aus, dass Sie eine Linux-Box verwenden). Aber meine Lieblingslösung beinhaltet R Dies ist kostenlos und für Linux / Windows / Mac usw. verfügbar und bietet Ihnen unzählige Möglichkeiten, Ihre Handlung anzupassen oder Ihre Daten zu manipulieren.

Schritt 1
Erstellen Sie ein Skript mit folgendem Code:

logfile <- read.table(file="client.log") #Adjust the logfile name as needed.
#This assumes tab separated columns. 
#If needed, column delimiters can be adjusted.
names(logfile) <- c("time.stamp","client","operations") 
#Rename the columns of the input data (if they are named at all)
require(lattice) #This package is needed for the xyplot() function below.  
#The main benefit of this function for your purposes is the ability to color 
#your plot circles by client name.
png(filename="logfile.png") #Designate the plot file type and save location
xyplot(operations~time.stamp,group=client,data=logfile,jitter.x=T,jitter.y=T)
#I've added jitter here which helps prevent plotted points from overlapping.
dev.off() #Close and save the plot

Ich habe mein Skript aufgerufen log.to.png.R

Schritt 2
Über eine Unix- oder Mac-Befehlszeile können Sie das Skript folgendermaßen aufrufen:
$R CMD BATCH log.to.png.R

D. Woods
quelle
1
Vielen Dank! Ich beschäftige mich jetzt mit der Gitterdokumentation, um die Darstellung zu personalisieren. Zum Glück habe ich R vor einigen Jahren verwendet, deshalb erinnere ich mich an die Grundlagen.
Jorge Suárez de Lis
@ Jorge-Suarez-de-Lis, großartig! Schön, dass Sie etwas gefunden haben, das Ihren Bedürfnissen entspricht. Verwenden lattice Vielleicht war es ein bisschen übertrieben, aber es war der schnellste Weg, das gesamte Protokoll mit einem einfachen Befehl zu zeichnen und gleichzeitig verschiedenen "Clients" unterschiedliche Farben zuzuweisen.
D. Woods
4

Das ist wirklich spät, aber als ich über diesen Beitrag hinweg kam, werde ich meine zwei Pennies einsetzen.

Ohne die Installation von R können wir call awk in gnuplot verwenden:

plot "<awk '{print $1, $3}' logfile" u 1:2

Dabei wird die Ausgabe des Befehls awk in doppelten Anführungszeichen von gnuplot zum Plotten Ihrer Daten verwendet. Der Befehl awk druckt einfach die erste und dritte Spalte aus.

Sie können den obigen Befehl in eine gnuplot-Datei einfügen, z. B. plot_log.gp, und ihn dann wie folgt in der Befehlszeile aufrufen

gnuplot -e "logfile='your_actual_log_file.log'" plot_log.gp

Dies ist ein Befehl, der einfach in einen Cron-Job oder ein Skript eingefügt werden kann. Beachten Sie die einfachen Anführungszeichen um den Text.

Ich wollte nur demonstrieren, dass Gnuplot wirklich sehr flexibel ist, da es Befehlszeilenargumente verwenden und sie als Variablen in einem Skript zuweisen kann. Keine starken Abhängigkeiten (dich ansehend, R), da awk ziemlich allgegenwärtig ist.

Mani
quelle