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.

cpu graph

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.

pie chart example disk usage

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.

Availability / Downtime Graph

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