gnuplot
Hier werden nützliche und hübsche Gnuplot Beispiele gesammelt.
CPU Auslastung
Der folgende Graph zeigt die durchschnittliche CPU Auslastung der letzten 5 Minuten. Die Werte kommen aus der Datei /proc/loadavg und geben die Anzahl der Jobs die ausgeführbereit sind oder auf I/O Warten an.
Der Graph wird aus folgendem gnuplot Skript erzeugt.
set terminal pngcairo font 'Helvetica,14' size 1200,400
set output '/tmp/out.png'
set lmargin 5
set title font ',20'
set title "CPU Load 5m Average ".system("date +'%F %H:%M'")
set xdata time
# Anzeigeformat der X-Achse
set format x '%d.%m. %H:%M'
# Datenformat der X-Achse
set timefmt '%Y-%m-%dT%H:%M:%S'
unset key
# Zeitraum von vor 3 Tagen bis in einer Stunde
now=system("date +'%FT%T'")
start=system("date +'%FT%T' --date='3 days ago'")
end=system("date +'%FT%T' --date='+1 hours'")
set xrange [ start : end]
set tics textcolor rgb "black"
set xtics 12*3600
set ytics 1 mirror
set yrange [ -0.8:4.9 ]
# Eine vertikale, gepunktete Hilfslinie zum aktuellen Zeitpunkt:
set arrow from now, -0.8 to now, 4.9 lw 1 lc rgb 'black' dt 3 nohead
# Hilfslinien
set arrow from start, 0 to now, 0 dt 3 lw 0.5 nohead
set arrow from start, 1 to now, 1 dt 3 lw 0.5 nohead
set arrow from start, 2 to now, 2 dt 3 lw 0.5 nohead
set arrow from start, 3 to now, 3 dt 3 lw 0.5 nohead
set arrow from start, 4 to now, 4 dt 3 lw 0.5 nohead
plot 'cpu-plot.csv' using 1:2 title 'CPU Load' with lines lc rgb 'sea-green'
Die Datei mit den Daten (cpu-plot.csv) besteht aus einem Zeitstempel im Format das
mit set timefmt gesetzt wurde und den ausgelesenen
Werten aus /proc/loadavg:
2025-10-16T09:16:01 0.05 0.11 0.11 2/1150 2270980
2025-10-16T09:17:01 0.02 0.09 0.10 2/1145 2271972
2025-10-16T09:18:01 0.43 0.19 0.13 2/1145 2272928
2025-10-16T09:19:01 0.22 0.18 0.13 2/1145 2273884
2025-10-16T09:20:01 0.13 0.16 0.12 3/1150 2274869
2025-10-16T09:21:01 0.08 0.14 0.12 2/1142 2276013
2025-10-16T09:22:01 0.03 0.12 0.10 2/1142 2277011
2025-10-16T09:23:01 0.05 0.11 0.10 2/1142 2277971
2025-10-16T09:24:01 0.05 0.10 0.09 2/1142 2278935
2025-10-16T09:25:01 0.02 0.08 0.09 2/1141 2279887
Pie Chart
gnuplot hat keine High-Level-Funktion mit der sich Pie Charts plotten lassen.
Allerdings lassen sich mit der Funktion splot 3D plots frei zeichnen.
Für ein Tortendiagramm kann ein flacher Zylinder gezeichnet und die Segmente
unterschiedlich eingefärbt werden. Der Zylinder besteht aus den Seitenwänden, die etwas
dunkler gezeichnet werden um den 3D Effekt zu verstärken, und einem Kreis als
Deckel.
Um das doch etwas kompliziertere gnuplot Skript zu generieren wurde
das Programm
pieplot
entwickelt. Die Ausgabe lässt sich direkt in gnuplot pipen:
pieplot data.csv | gnuplot.
Erreichbarkeitsgraph
Mit dem folgendem Graphen lässt sich die Erreichbarkeit oder Downtime von mehreren Diensten visualisieren. Jeder Dienst wird mit einer eigenen Linie auf einer festen Höhe dargestellt. Wenn er nicht erreichbar ist, wird diese Linie rot gefärbt. Wenn alle Dienste verfügbar sind wird zusätzlich eine grüne Linie gezeichnet.
Das Skript für den Graphen:
set terminal pngcairo font 'Helvetica,14' size 1200,400
set output 'out.png'
set lmargin 5
set title font ',20'
set title "Homelab Availability ".system("date +'%F %H:%M'")
set xdata time
set format x '%d.%m. %H:%M'
set timefmt '%Y-%m-%dT%H:%M:%S'
set datafile separator ";"
now=system("date +'%FT%T'")
start=system("date +'%FT%T' --date='3 days ago'")
end=system("date +'%FT%T' --date='+20 hours'")
set xrange [ start : end]
set yrange [ -3:6 ]
# xtics schwarz alle 12 Stunden
set tics textcolor rgb "black"
set xtics 43200
unset ytics
unset key
# Eine vertikale, gepunktete Hilfslinie zum aktuellen Zeitpunkt:
set arrow from now, -3 to now, 6 lw 1 lc rgb 'black' dt 3 nohead
# Hilfslinien auf der Höhe der Graphen
set arrow from start, -1 to now, -1 dt 3 lw 0.5 nohead
set arrow from start, 1 to now, 1 dt 3 lw 0.5 nohead
set arrow from start, 2 to now, 2 dt 3 lw 0.5 nohead
set arrow from start, 3 to now, 3 dt 3 lw 0.5 nohead
set arrow from start, 4 to now, 4 dt 3 lw 0.5 nohead
# Legende: Labels auf der richtigen Höhe
set label at now, -1 " All Up" front left
set label at now, 1 " Nextcloud Down" front left
set label at now, 2 " Audiobookshelf Down" front left
set label at now, 3 " Tomcat Down" front left
set label at now, 4 " Vaultwarden Down" front left
# Datenlinien zeichnen
plot '/var/log/homelab/monitor-plot.csv' using 1:($2+$3+$4+$5+$6 == 5 ? -1 : NaN) with points pt 7 ps 0.5 lc rgb 'sea-green', \
'/var/log/homelab/monitor-plot.csv' using 1:($2 == 0 ? 1 : NaN) with points pt 7 ps 0.5 lc rgb 'dark-red', \
'/var/log/homelab/monitor-plot.csv' using 1:($3 == 0 ? 2 : NaN) with points pt 7 ps 0.5 lc rgb 'dark-red', \
'/var/log/homelab/monitor-plot.csv' using 1:($4 == 0 ? 3 : NaN) with points pt 7 ps 0.5 lc rgb 'dark-red', \
'/var/log/homelab/monitor-plot.csv' using 1:($5 == 0 ? 4 : NaN) with points pt 7 ps 0.5 lc rgb 'dark-red'
Die Daten werden in folgendem Format erwartet. 1=Service erreichbar, 0=Service Down
2025-11-03T22:24:01;1;1;1;1;1
2025-11-03T22:25:01;1;1;1;1;1
2025-11-03T22:26:01;1;1;1;0;1
2025-11-03T22:27:01;1;1;1;0;1
2025-11-03T22:28:01;1;1;1;0;1
2025-11-03T22:29:01;1;1;1;0;1
2025-11-03T22:30:01;1;1;1;0;1
2025-11-03T22:31:01;1;1;1;0;1
2025-11-03T22:32:01;1;1;1;1;1
2025-11-03T22:33:01;1;1;1;1;1