Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:gnuplot

gnuplot Microspickzettel

Ausgabe

wenn man nichts weiter sagt, gibt gnuplot normalerweise auf dem grafischen Terminal aus (X11)

weitere Ausgabeformate sind unter anderem: PNG, PS, SVG …. und man kann die Ausgabe auch umleiten, z.B in ps2pdf

PNG

set terminal png
set output "out.12.png"

PS -> PDF

set terminal postscript portrait enhanced color dashed lw 1 "Helvetica" 8
set output "| ps2pdf - gnuplotbeispiel.out.pdf"

Beispiel: PostgreSQL-Logdatei

gegeben ist eine Logdatei postgres.queryonly.log in ähnlichem Format:

2009-05-10 00:00:04 CEST 192.0.2.143 malta SELECTLOG:  duration: 547.624 ms  statement: SELECT data, created, headers, expire FROM cache WHERE xid = 'rot'

(Langsame Queries)

mit gnuplot 1) und folgenden Befehlen bekommt man eine schönes PDF (zeitliche Verteilung: x-Achse, Langsamkeit: y-Achse)

set format x "%R"
set xdata time
set timefmt "%H:%M:%S"
set timestamp
set terminal postscript portrait enhanced color dashed lw 1 "Helvetica" 8
set output "| ps2pdf - out.pdf"
plot "postgres.queryonly.log" using 2:8 title "laufzeit datenbankanfragen"

noch bunter + mehrere Input-Quellen

#!/usr/bin/gnuplot

#all.dat -> postgres.laufzeit.log
#daenemark.dat -> postgres.daenemark.laufzeit.log
#portugal.dat -> postgres.portugal.laufzeit.log
#daenemark.select.dat -> postgres.selectfromcachewherecid.daenemark.laufzeit.log

set format x "%R"
set xdata time
set timefmt "%H:%M:%S"
set timestamp

# output
set terminal postscript portrait enhanced color dashed lw 1 "Helvetica" 8
set output "| ps2pdf - gnuplotbeispiel.out.pdf"

set xrange["16:00:00":"22:00:00"]
set yrange[0:7000]

plot \
     "daenemark.select.dat" using 2:8 title "laufzeit daenemark select data,created,expire from cache" lc rgb "#53868b", \
     "daenemark.noselect.dat" using 2:8 title "laufzeit daenemark sonstige"  lc rgb "black", \
     "portugal.dat" using 2:8 title "laufzeit portugal alle" lc rgb "#ffaeb9"

das noch wenig kunstvolle Ergebnis sieht so aus: gnuplotbeispiel.out.pdf

Input mit awk filtern

Input-Quellen können auch Programme und Scripts sein, hier mit awk:

...

plot \
   "< awk '/schweden/ && /duration/ && /2009-05-12/ && /data, created, headers, expire FROM cache WHERE xid/ {print $2, $8}' postgres.log" \
   using 1:2 title "laufzeit schweden select data,created,expire from cache" lc rgb "red", \
   "< awk '/schweden/ && /duration/ && /2009-05-12/ && !/data, created, headers, expire FROM cache WHERE xid/ {print $2, $8}' postgres.log" \
    using 1:2 title "laufzeit schweden sonstige"  lc rgb "blue", \
   "< awk '/frankreich/ && /duration/ && /2009-05-12/ {print $2, $8}' postgres.log" \
   using 1:2 title "laufzeit frankreich alle" lc rgb "yellow"

Zeitformat

Datum + Uhrzeit auswerten … hier in ISO: # 2009-05-10 00:00:03

gnuplot> # 2009-05-10 00:00:03
gnuplot>
gnuplot> set timefmt "%Y-%m-%d %H:%M:%S"
gnuplot>
gnuplot> set format x "%R"
gnuplot>
gnuplot> plot \
>    "< awk '/norwegen/ && /duration/gc && /data, created, headers, expire FROM cache WHERE cid/ {print $1, $2, $8}' postgres.log" \
>    using 1:3 title "laufzeit norwegen select data,created,expire from cache" lc rgb "#53868b"

Closing out.svg

1) entweder code-schnipsel in datei schreiben und mit gnuplot datei aufrufen oder gnuplot aufrufen und direkt hineinschreiben
de/sysadmin/tools/gnuplot.txt · Zuletzt geändert: 2009-05-13 08:53 von hella

Seiten-Werkzeuge