munin: Graph wird nicht angezeigt

wstuermer

Blog Benutzer
Hallo,

ich stehe derzeit vor einem Rätsel. Ich habe mir 2 Plugins geschrieben (wenn auch nicht auf die sauberste Art und Weise ;)). Das erste grapht die Temperatur von den beiden CPU-Cores und macht genau das, was es soll.
Auf Grundlage dieses Plugins habe ich mir auch eins für meinen Raid-Controller geschrieben, was aber beim besten Willen, keinen Graph zeichnet.
Per Console liefern mir beide Scripte die Werte, die sie liefern sollten.
Anbei die Consolen-Ausgabe und die beiden Scripte:
Code:
# cat /usr/share/munin/plugins/cputemp
if [ "$1" = "autoconf" ]; then
	echo yes 
	exit 0
fi

if [ "$1" = "config" ]; then
	echo 'graph_title Temperature of CPU'
	echo 'graph_args --base 1000 -l 0 '
	echo 'graph_vlabel Temperature'
	echo 'graph_category System'
	echo 'graph_order core0 core1'
	echo 'graph_info This graph shows the temperature of the CPU-Cores.'
	echo 'core0.label Core0 C'
	echo 'core0.draw LINE1'
	echo 'core1.label Core1 C'
        echo 'core1.draw LINE2'	
	exit 0
fi

core0=`sensors | grep Core0 | awk '{ print $3 }' | cut -d'+' -f2 | cut -d'.' -f1`
core1=`sensors | grep Core1 | awk '{ print $3 }' | cut -d'+' -f2 | cut -d'.' -f1`
echo "core0.value ${core0}"
echo "core1.value ${core1}"
Code:
# cat /usr/share/munin/plugins/hddtemp
if [ "$1" = "autoconf" ]; then
	echo yes 
	exit 0
fi

if [ "$1" = "config" ]; then
	echo 'graph_title Temperature of RAID-Controller'
	echo 'graph_args --base 1000 -l 0 '
	echo 'graph_vlabel Temperature'
	echo 'graph_category Disk'
	echo 'graph_order temp'
	echo 'graph_info This graph shows the temperature of the RAID-Controller.'
	echo 'temp.label Temperature C'
 	echo 'temp.draw LINE1'	
	exit 0
fi

temperature=`/usr/local/bin/arcconf GETCONFIG 1 AL | grep Temperature | cut -d' ' -f35`
echo "temp.value ${temperature}"
Code:
# /usr/share/munin/plugins/cputemp
core0.value 43
core1.value 36
# /usr/share/munin/plugins/hddtemp
temp.value 42
Laut munin-graph.log wurden beide Scripte erfolgreich ausgeführt. Irgendwer eine Idee, warum 'cputemp' den Graphen macht, aber 'hddtemp' nicht?


-W
 

wstuermer

Blog Benutzer
Hi,

ich habe nun mal weiter experimentiert, aber immer noch keine Lösung ;)
Das "hddtemp"-Script habe ich so angepasst, wie das cputemp auch. Es werden also 2 Rückgabewerte geliefert, welche aber identisch sind.

Code:
if [ "$1" = "autoconf" ]; then
	echo yes 
	exit 0
fi

if [ "$1" = "config" ]; then
	echo 'graph_title Temperature of RAID-Controller'
	echo 'graph_args --base 1000 -l 0 '
	echo 'graph_vlabel Temperature'
	echo 'graph_category Disk'
	echo 'graph_order temp1 temp2'
	echo 'graph_info This graph shows the temperature of the RAID-Controller.'
	echo 'temp1.label Temperature C'
 	echo 'temp1.draw LINE1'
        echo 'temp2.label Temperature C'
        echo 'temp2.draw LINE2'
	exit 0
fi

temperature=`/usr/local/bin/arcconf GETCONFIG 1 AL | grep Temperature | cut -d' ' -f35`
echo "temp1.value ${temperature}"
echo "temp2.value ${temperature}"

Laut munin-graph.log wurde der Graph um 21:55 Uhr aktualisiert, wie jede 5 Minuten.

Code:
Jun 06 21:55:18 - Starting munin-graph
Jun 06 21:55:18 - Processing domain: localdomain
Jun 06 21:55:18 - Graphed service : open_inodes (0.05 sec * 4)
Jun 06 21:55:18 - Graphed service : if_err_eth0 (0.03 sec * 4)
Jun 06 21:55:18 - Graphed service : entropy (0.04 sec * 4)
Jun 06 21:55:18 - Graphed service : irqstats (0.28 sec * 4)
Jun 06 21:55:18 - Graphed service : mysql_slowqueries (0.03 sec * 4)
Jun 06 21:55:18 - Graphed service : processes (0.03 sec * 4)
Jun 06 21:55:19 - Graphed service : postfix_mailqueue (0.09 sec * 4)
Jun 06 21:55:19 - Graphed service : if_eth0 (0.05 sec * 4)
Jun 06 21:55:19 - Graphed service : mysql_threads (0.03 sec * 4)
Jun 06 21:55:19 - Graphed service : df (0.07 sec * 4)
Jun 06 21:55:19 - Graphed service : interrupts (0.05 sec * 4)
Jun 06 21:55:19 - Graphed service : netstat (0.10 sec * 4)
Jun 06 21:55:19 - Graphed service : ping_heise_de (0.02 sec * 4)
Jun 06 21:55:19 - Graphed service : uptime (0.02 sec * 4)
Jun 06 21:55:19 - Graphed service : swap (0.03 sec * 4)
Jun 06 21:55:19 - Graphed service : mysql_bytes (0.06 sec * 4)
Jun 06 21:55:19 - Graphed service : load (0.03 sec * 4)
Jun 06 21:55:19 - Graphed service : cputemp (0.04 sec * 4)
Jun 06 21:55:19 - Graphed service : cpu (0.09 sec * 4)
Jun 06 21:55:19 - Graphed service : df_inode (0.07 sec * 4)
Jun 06 21:55:19 - Graphed service : postfix_mailvolume (0.03 sec * 4)
[B]Jun 06 21:55:19 - Graphed service : hddtemp (0.03 sec * 4)[/B]
Jun 06 21:55:19 - Graphed service : mysql_queries (0.09 sec * 4)
Jun 06 21:55:19 - Graphed service : iptables (0.04 sec * 4)
Jun 06 21:55:19 - Graphed service : forks (0.04 sec * 4)
Jun 06 21:55:19 - Graphed service : iostat (0.04 sec * 4)
Jun 06 21:55:20 - Graphed service : open_files (0.04 sec * 4)
Jun 06 21:55:20 - Graphed service : memory (0.19 sec * 4)
Jun 06 21:55:20 - Graphed service : ping_google_com (0.03 sec * 4)
Jun 06 21:55:20 - Graphed service : vmstat (0.03 sec * 4)
Jun 06 21:55:20 - Processed node: localhost.localdomain (1.77 sec)
Jun 06 21:55:20 - Processed domain: localdomain (1.77 sec)
Jun 06 21:55:20 - Munin-graph finished (1.78 sec)

Das .png und die .html zu hddtemp sind ebenfalls um 21:55 Uhr aktualisiert worden.

Code:
-rw-r--r-- 1 munin munin 17169 2009-06-06 21:55 localhost.localdomain-hddtemp-day.png
-rw-r--r-- 1 munin munin  3386 2009-06-06 21:55 localhost.localdomain-hddtemp.html
-rw-r--r-- 1 munin munin 18457 2009-06-06 21:40 localhost.localdomain-hddtemp-month.png
-rw-r--r-- 1 munin munin 20683 2009-06-06 21:40 localhost.localdomain-hddtemp-week.png
-rw-r--r-- 1 munin munin 18052 2009-06-06 21:40 localhost.localdomain-hddtemp-year.png

Die .rrd-Dateien werden jedoch nicht aktualisiert, was mich vermuten lassen würde, dass das Plugin keine oder unsinnige Rückgabewerte liefert. Rufe ich das Plugin jedoch in der Console auf, erhalte ich die richtigen Werte, die das Plugin auch liefern soll.
Einen Timeout schließe ich aus, da das Plugin nur etwas mehr als 300ms braucht.

Code:
-rw-r--r-- 1 munin munin 50824 2009-06-06 21:40 localhost.localdomain-hddtemp-temp1-g.rrd
-rw-r--r-- 1 munin munin 50824 2009-06-06 21:40 localhost.localdomain-hddtemp-temp2-g.rrd

# /usr/share/munin/plugins/hddtemp
temp1.value 42
temp2.value 42

# time /usr/share/munin/plugins/hddtemp
temp1.value 42
temp2.value 42

real	0m0.319s
user	0m0.000s
sys	0m0.020s

Irgendwer noch eine Idee, warum der Graph nicht dargestellt bzw. die .rrd-Files nicht aktualisiert werden?

Danke im voraus für hilfreiche Vorschläge.


-W
 

wstuermer

Blog Benutzer
Hallo Flobbie,

Fehlermeldung gibt's nicht. Zumindest sehe ich keine ;)

Code:
kerneloops:~# munin-run hddtemp config
graph_title Temperature of RAID-Controller
graph_args --base 1000 -l 0 
graph_vlabel Temperature
graph_category Disk
graph_order temp1 temp2
graph_info This graph shows the temperature of the RAID-Controller.
temp1.label Temperature C
temp1.draw LINE1
temp2.label Temperature C
temp2.draw LINE2
[Edit] auch die letzte Möglichkeit wirft keine Fehler:

Code:
kerneloops:~# su - munin -c "/usr/lib/munin/munin-update --debug --nofork --stdout --host localhost.localdomain --service hddtemp"
kerneloops:~# ls -la /var/lib/munin/localdomain/localhost.localdomain-hddtemp-temp*
-rw-r--r-- 1 munin munin 50824 2009-06-06 21:40 /var/lib/munin/localdomain/localhost.localdomain-hddtemp-temp1-g.rrd
-rw-r--r-- 1 munin munin 50824 2009-06-06 21:40 /var/lib/munin/localdomain/localhost.localdomain-hddtemp-temp2-g.rrd
[/Edit]


-W
 
Last edited by a moderator:

wstuermer

Blog Benutzer
mehrfach. Nach jeder Änderung am Script, wenn weiterhin kein Graph gezeichnet wurde.

[Edit]
Code:
kerneloops:/var/lib/munin/localdomain# /usr/share/munin/plugins/hddtemp
temp1.value 42
temp2.value 42

kerneloops:/var/lib/munin/localdomain# rrdtool fetch localhost.localdomain-hddtemp-temp1-g.rrd AVERAGE | head
                             42

1244317200: nan
1244317500: nan
1244317800: nan
1244318100: nan
1244318400: nan
1244318700: nan
1244319000: nan
1244319300: nan
Der schreibt Blödsinn in die rrd's. Alle weiteren Zeilen enthalten ebenfalls 'nan'.
[/EDIT]
 
Last edited by a moderator:

djrick

Registered User
Naja der Schreibt keinen Blödsinn der schreibe NIX :)

Schreib das Script mal so um, dass es einen festen Wert ausgibt.
Also 20 oder so.
Also dass er nicht die HDDTemp abfragt sondern einfach direkt:
Code:
echo "temp1.value ${temperature}"
echo "temp2.value ${temperature}"
zu:
Code:
echo 20
echo 20
Und schau mal ob er dann richtig arbeitet.

Zweitens:
Code:
kerneloops:/var/lib/munin/localdomain# rrdtool fetch localhost.localdomain-hddtemp-temp1-g.rrd AVERAGE | head
                             42

1244317200: nan
Ist das richtig, dass die 42 da so im "Raum" steht?

Drittens, und das ist vielleicht die Lösung vom Problem:
Der Wert: 42* ansich

* Für genauere erörterungen bitte an Huschi und DJRick wenden, die Douglas Adams Fans hier im Forum ;)
 

wstuermer

Blog Benutzer
Hi,

Code:
echo "temp1.value ${temperature}"
echo "temp2.value ${temperature}"
geändert zu

Code:
echo "temp1.value 20"
echo "temp2.value 50"
Laut munin-graph.log ist das Script nach der Änderung gelaufen.
Code:
Jun 07 22:50:09 - Graphed service : hddtemp (0.03 sec * 4)
Der Munin :: localdomain :: localhost.localdomain :: hddtemp zeigt nun auch die fixen Werte an.
Dies hat mich auf die Idee gebracht, meine eigentliche Abfrage für $temperature zu überarbeiten, da dort wohl entweder vor oder hinter der '42' noch Leerzeichen angegeben waren. Leider wird nach der Änderung wieder das rrd-File nicht aktualisiert.
Ich experimentiere diese Nacht und Morgen mal weiter und melde mich dann nochmal, ob ich die Lösung bzw. weitere Erkenntnisse habe. Du scheinst mich da durchaus auf den richtigen Weg gebracht zu haben in dem Fall ;)

Ja, die 42 steht da mitten im Raum und Ja, "Hitchhikers Guide to the Galaxy" steht im Original mit RC1 in meinem DVD-Regal und ist einer meiner Favourites ;) Ich gehe zumindest davon aus, dass Du mit dem Link darauf abzielst *g*
 

djrick

Registered User
Ich hab mir gedacht, wenn der Debugger schon nicht debugt müsst wir halt selbst mal schauen was das Script verarbeitet und was nicht um so das Problem einzugrenzen.
Ich gehe zumindest davon aus, dass Du mit dem Link darauf abzielst *g*
Natürlich....Ich sage ja immer: Es gibt keine Zufälle...und "zufälligerweise" tritt hier ein Computerproblem bei der Zahl 42 auf ;)

Was mir bei deinem Munin Link noch aufgefallen ist: Day / Week und Year zeigen 2 Werte an, Month jedoch nur EINEN.
Löschen der RRDs vergessen?
 
Last edited by a moderator:

wstuermer

Blog Benutzer
Was mir bei deinem Munin Link noch aufgefallen ist: Day / Week und Year zeigen 2 Werte an, Month jedoch nur EINEN.
Löschen der RRDs vergessen?
Nein. Ich hatte zwischendurch mal nur mit einem Rückgabewert getestet. Aktuell habe ich auch nur noch einen Rückgabewert, der statisch '20' zurück liefern soll. Dies geschieht auch wunderbar.
Ersetze ich '20' durch '${temperature}' liefert das Script auf der Console ausgeführt den richtigen Wert, jedoch wird kein Graph mehr erzeugt. Nach jeder Änderung habe ich munin-node gestoppt und die relevanten rrd-, html-, und png-files gelöscht und dann munin-node wieder gestartet.
Im rrd steht folgendes (mit statischer '20'):

Code:
kerneloops:/var/lib/munin/localdomain# rrdtool fetch localhost.localdomain-hddtemp-temp1-g.rrd AVERAGE | head
                             42

1244381100: nan
1244381400: nan
1244381700: nan
1244382000: nan
1244382300: nan
1244382600: nan
1244382900: nan
1244383200: nan
kerneloops:/var/lib/munin/localdomain# rrdtool fetch localhost.localdomain-hddtemp-temp1-g.rrd AVERAGE | tail
1244464800: nan
1244465100: nan
1244465400: nan
1244465700: nan
1244466000: nan
1244466300: nan
1244466600: nan
1244466900: nan
1244467200: 2.0000000000e+01
1244467500: nan
 

Whistler

Blog Benutzer
"nan" heißt "not a number" und ist eine Fehlermeldung bei der Umwandlung der Zeichenkette in eine Zahl.
Möglicherweise sind ja transparente Zeichen (Tab, Null-Byte, eventuell auch zuviele Spaces) vor der Zahl oder ein Zeilenumbruch danach.
 

wstuermer

Blog Benutzer
genau aus diesem Grund hatte ich meine Abfrage für $temperature gestern abend von relativ ungeschickten cut mal etwas umgebaut.

Code:
temperature=`/usr/local/bin/arcconf GETCONFIG 1 AL | grep Temperature | awk '{ print $3 }'`
Das sollte ja whitespaces eigentlich vermeiden. Die Ausgabe von "/usr/local/bin/arcconf GETCONFIG 1 AL | grep Temperature" sieht wie folgt aus.

Code:
kerneloops:/usr/share/munin/plugins# /usr/local/bin/arcconf GETCONFIG 1 AL | grep Temperature
   Temperature                              : 41 C/ 105 F (Normal)
 

djrick

Registered User
Ich bin nicht so fit in Bash Programmierung, aber ich tippe auch darauf, dass irgendwo noch ein Steuerzeichen vorhanden ist ODER dass er $temperature als String interpretiert, aber nen Integer (Double oder sonst was) erwartet.

Ansätze, falls möglich, ka wie das mit Bash ist:
1.) Zur Zahl casten
2.) Mögliche Steuerzeichen abschneiden indem man die ASCII Codes vergleicht und nur den Zahlenbereich zuläßt und den Rest abschneidet
 

wstuermer

Blog Benutzer
Ich habe nun $temperature vor Verwendung explizit mit 'typeset -i temperature' initialisiert. Ebenso habe ich es mit 'declare -i temperature' versucht. Danach munin-node gestoppt, betroffene rrd-, html- und png-files gelöscht, munin-node gestartet. Ergebnis ist weiterhin 'nan'.
 

djrick

Registered User
Hmm langsam werd ich ratlos, was passiert denn wenn du es so machst:
Code:
echo "temp1.value" ${temperature}
 

wstuermer

Blog Benutzer
klar :)

Code:
if [ "$1" = "autoconf" ]; then
	echo yes 
	exit 0
fi

if [ "$1" = "config" ]; then
	echo 'graph_title Temperature of RAID-Controller'
	echo 'graph_args --base 1000 -l 0 '
	echo 'graph_vlabel Temperature'
	echo 'graph_category Disk'
	echo 'graph_order temp1'
	echo 'graph_info This graph shows the temperature of the RAID-Controller.'
	echo 'temp1.label Temperature C'
 	echo 'temp1.draw LINE1'
	exit 0
fi

declare -i temperature
temperature=`/usr/local/bin/arcconf GETCONFIG 1 AL | grep Temperature | awk '{ print $3 }'` 
echo "temp1.value" ${temperature}
 

djrick

Registered User
Liefert die CPU Temp eine Kommazahl und die Raid Temp eine ganze Zahl? Liegen da vielleicht noch Unterschiede?
 

wstuermer

Blog Benutzer
cputemp liefert eine Dezimalzahl, während hddtemp eine Ganzzahl liefert.

Code:
kerneloops:~# /usr/local/bin/arcconf GETCONFIG 1 AL | grep Temperature
   Temperature                              : 41 C/ 105 F (Normal)
kerneloops:~# sensors | grep Core0
Core0 Temp:  +43.0°C                                    
kerneloops:~# sensors | grep Core1
Core1 Temp:  +36.0°C
 
Top