Problem mit Munin-Script in Ruby

JanJ

New Member
Hallo zusammen,

ich habe für Munin ein Script gefunden, geschrieben in Ruby, für die Auswertung der Speicherausnutzung und Threadanzahl von Zarafa. Leider funktioniert die Abfrage nicht richtig und auf die email, die ich vor einiger Zeit an den Autor geschrieben hatte, habe ich noch keine Antwort bekommen. Vielleicht kann hier jemand helfen ...

Code:
#!/usr/bin/env ruby
#
# Mario Verbelen V0.1
# Get zarafa Thread stats for munin

$dlist="zarafa-server,zarafa-gateway,zarafa-ical,zarafa-monitor,zarafa-spooler"
ARGV.each do|a|
	if a.to_s == "autoconf"
		puts "yes"
		exit 0
	end
	if a.to_s == "config"
		puts "graph_title Zarafa Threads usage"
		puts "graph_args --base 1000 -l 0"
		puts "graph_scale yes"
		puts "graph_vlabel Threads usage of zarafa daemons"
		puts "graph_category zarafa"
		puts "graph_order zarafa_server zarafa_gateway zarafa_ical zarafa_monitor zarafa_spooler"
		puts "graph_info Threads of zarafa daemons"
		$dlist.split(',').each do|a|
			puts "#{a.tr('-','_')}.label #{a.tr('-','_')}"
#			puts "#{a.tr('-','_')}.type ABSOLUTE"
			if a.to_s == "zarafa-server"
				puts "#{a.tr('-','_')}.draw AREA"
			else
				puts "#{a.tr('-','_')}.draw STACK"
			end
		end
		exit 0
	end
end
$dlist.split(',').each do|a|
	pid=`pidof #{a}`
	$c=a
	begin
		File.open("/proc/#{pid.chomp}/status") do |io|
			io.each do |line|
				line.chomp!
				line.grep( /Threads/ ) do |b|
					val=b.squeeze(" ").tr("\t",':').split(':')[2]
					puts "#{$c.tr('-','_')}.value #{val}"
				end
			end
		end
	rescue
		puts "#{$c.tr('-','_')}.value"
	end
end

Das Problem liegt im zweiten Teil, die PIDs werden ausgelesen und sollten dann abgefragt werden. Die Ausgabe wäre dann entsprechend sowas wie "Threads: 1", in val werden dann die Leerzeilen entfernt, das Threads entfernt und nur der Teil hinter dem : übernommen.

Leider klappt dies nur bei "zarafa-server, zarafa-monitor, zarafa-licensed", wo die Zahlen richtig ausgegeben werden. Bei den anderen Daten wird einfach nichts ausgegeben, obwohl auch entsprechende Threads laufen und eine manuelle Ausgabe mit cat /proc/pid/status dies bestätigt und die Ausgabe vom Aufbau natürlich der Ausgabe der drei funktionierenden Daten entspricht.

Kann mir jemand helfen ?

Danke,

Jan
 
Hi,

nein, keinerlei Fehlermeldung, es wird einfach nichts ausgegeben für die benannten Dienste.

Ein cat /proc/1504/status |grep Threads|tr "\t" ":" gibt Threads::1 aus, wie es richtig ist.

In irb ergeben folgende Abfragen:

File.open("/proc/1504/status") do |io|
io.each do |line|
p line
end
end

...
"Threads:\t1\n"

Also auch richtig, ich versteh also nicht, wieso die Abfrage im Script bei manchen Diensten die richtige Zahl der Threads ausgibt, bei anderen aber einfach nichts.
 
Ich bin mir sicher, dass der Hund hier

Code:
line.chomp!
line.grep( /Threads/ ) do |b|
  val=b.squeeze(" ").tr("\t",':').split(':')[2]
  puts "#{$c.tr('-','_')}.value #{val}"
end

begraben liegt.

Da ist eine Bang-Methode mit dabei und der Rest ist sehr speziell auf das Format des Strings in b zurechtgeschnitten. Da muss nur ein Leerzeichen zuwenig oder zuviel im String stecken und schon funktioniert das nicht mehr.

Ich kann das hier leider nicht nachvollziehen, Du müsstest mir mal die Zeilen von den nichtfunktionierende Prozessen als Strings geben. Mach doch mal ein

Code:
cat /proc/__target_pid__/status

und gib das hier rein, aber bitte in die Hash-Tags vom Bulletin!
 
Ja, die Vermutung habe ich auch, aber ich konnte bisher nichts finden.

Hier mal der Status von zarafa-server, da wird korrekt die 10 ausgegeben.
Code:
root@www:~# cat /proc/14265/status
Name:   zarafa-server
State:  S (sleeping)
SleepAVG:       78%
Tgid:   14261
Pid:    14265
PPid:   1
TracerPid:      0
FNid:   24292
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 2048
Groups: 0
envID:  24292
VPid:   14265
PNState:        0
StopState:      0
VmPeak:   189376 kB
VmSize:   189372 kB
VmLck:         0 kB
VmHWM:     24140 kB
VmRSS:     24040 kB
VmData:   123468 kB
VmStk:       128 kB
VmExe:      3716 kB
VmLib:      8172 kB
VmPTE:       228 kB
StaBrk: 10178000 kB
Brk:    11578000 kB
StaStk: 7fff27bb2630 kB
Threads:        10
SigQ:   0/595968
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180004e63
SigSvd: 0000000000000000
CapInh: 000000007dcceeff
CapPrm: 000000007dcceeff
CapEff: 000000007dcceeff
Cpus_allowed:   7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff
Mems_allowed:   00000000,00000003
TaskUB: 24292.0
MMUB:   24292.0

Dies ist der Status von zarafa-ical, die Ausgabe des Scripts ist hier einfach gar nichts, sprich keine 1.
Code:
root@www:~# cat /proc/1504/status
Name:   zarafa-ical
State:  S (sleeping)
SleepAVG:       98%
Tgid:   1504
Pid:    1504
PPid:   1
TracerPid:      0
FNid:   24292
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups: 0
envID:  24292
VPid:   1504
PNState:        0
StopState:      0
VmPeak:    52660 kB
VmSize:    52652 kB
VmLck:         0 kB
VmHWM:      1524 kB
VmRSS:      1524 kB
VmData:      452 kB
VmStk:        88 kB
VmExe:       348 kB
VmLib:     10364 kB
VmPTE:       108 kB
StaBrk: 11246000 kB
Brk:    11288000 kB
StaStk: 7fffb39fbc30 kB
Threads:        1
SigQ:   0/595968
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180014463
SigSvd: 0000000000000000
CapInh: 000000007dcceeff
CapPrm: 000000007dcceeff
CapEff: 000000007dcceeff
Cpus_allowed:   7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff
Mems_allowed:   00000000,00000003
TaskUB: 24292.0
MMUB:   24292.0

Und weil ich die Vermutung hatte, es läge an der Zweistelligkeit der 10, an der es scheinbar doch nicht liegt, hier noch die Ausgabe von zarafa-licensed:
Code:
root@www:~# cat /proc/3781/status
Name:   zarafa-licensed
State:  S (sleeping)
SleepAVG:       78%
Tgid:   3780
Pid:    3781
PPid:   1
TracerPid:      0
FNid:   24292
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups: 0
envID:  24292
VPid:   3781
PNState:        0
StopState:      0
VmPeak:    76988 kB
VmSize:    76764 kB
VmLck:         0 kB
VmHWM:      3716 kB
VmRSS:      3688 kB
VmData:    32856 kB
VmStk:        88 kB
VmExe:       124 kB
VmLib:      8496 kB
VmPTE:       124 kB
StaBrk: 0430b000 kB
Brk:    043f3000 kB
StaStk: 7fffb8618cc0 kB
Threads:        2
SigQ:   0/595968
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180004463
SigSvd: 0000000000000000
CapInh: 000000007dcceeff
CapPrm: 000000007dcceeff
CapEff: 000000007dcceeff
Cpus_allowed:   7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff
Mems_allowed:   00000000,00000003
TaskUB: 24292.0
MMUB:   24292.0

Mir fällt hier keinerlei Unterschied auf, die Zahlen stehen alle gleichweit vom : weg, ich weiß nicht weiter ... Vielen Dank schon mal für deine Bemühungen.
 
Back
Top