Ich war kürzlich in der Verlegenheit, ein System mit centOS 5.2 überwachen zu müssen. Ich habe mir als Tool dazu munin auserkoren, das sich an Hand der Anleitung Überwachung eines CentOS 5.2 Servers mit munin und monit einfach installieren und in Betrieb nehmen lässt (auf monit habe ich verzichtet).
Allerdings bekam ich danach alle fünf Minuten eine E-Mail mit der Meldung:
Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
Zunächst habe ich alle relevanten Dateien in /etc/munin mittels iconv von ISO nach UTF8 konvertiert was nichts genützt hat, da die Dateien bereits in UTF8 sind bzw. keine Umlaute etc. enthalten.
Eine weitere Recheche im Netz der Netze brachte mich auf ein Post im Gentoo-Forum, in dem ein Patch auf die Datei munin-graph erwähnt wird. Dieser Patch ist leider für die Munin-Version 1.3.4, auf meinem System ist aber die Stable-Version 1.2.5 installiert. Ich habe mir aber einmal den Patch angesehen und festgestellt, dass er recht einfach ist. Er baut an sich nur eine Erkennung ein, ob die verwendete RRD eine Version größer oder gleich 1.3. Nur dann werden die an RRD übergebenen Parameter nach UTF8 gewandelt. Netterweise war der Patch im Context-Format erstellt worden, so dass es mir ein Leichtes war, die entsprechenden Code-Stellen auch in der Datei /usr/share/munin/munin-graph der Version 1.2.5 zu finden. Ich habe die beiden Code-Fragmente an den entsprechenden Stellen eingebaut und es geht!
Hier nun der entsprechend angepasste Patch für die Munin-Version 1.2.5:
*** munin-graph.old 2009-03-25 01:28:10.000000000 +0100
--- munin-graph 2009-10-01 15:42:36.000000000 +0200
***************
*** 29,34 ****
--- 29,35 ----
use Digest::MD5;
use Getopt::Long;
use Time::HiRes;
+ if ($RRDs::VERSION >= 1.3) { use Encode; }
my $graph_time= Time::HiRes::time;
my $DEBUG = 0;
***************
*** 832,837 ****
--- 833,848 ----
push @complete, "--end",(int($lastupdate/$resolutions{$time}))*$resolutions{$time};
}
print "
rrdtool "graph" "", join (""
"",@complete), ""
" if $DEBUG;
+
+ # Since version 1.3 rrdtool uses libpango which needs its input
+ # as utf8 string. So we assume that every input is in latin1
+ # and decode it to perl's internal representation and then to utf8.
+ if ( $RRDs::VERSION >= 1.3 ) {
+ @complete = map {
+ $_ = encode("utf8", (decode("latin1", $_)));
+ } @complete;
+ }
+
RRDs::graph (@complete);
if (my $ERROR = RRDs::error) {
logger ("Unable to graph $filename: $ERROR");
Den Patch gibt es natürlich auch zum Download: munin-1.2.5_utf8.patch