munin
munin は手軽なシステム/ネットワーク監視ツール
ムーミン...ではない。 昔は HotSaNIC を使っていましたが、HotSaNIC は最近メンテナンスされてないので、muninに乗り換え。
インストール
http://munin.projects.linpro.no/
- download からダウンロードできる。
2009/01/18現在の最新は1.3.4。 redhat 用の spec があるけど、壊れている。 http://munin.projects.linpro.no/ticket/587 から親切な人がデバッグしてくれた spec を拾ってきて使う。
インストールの時に perl モジュールが足りないと起こられるので yum なり cpan2rpm でインストールする。
トラブルシューティング
munin-nodeをDEBUGモード(--debug)で走らせると、 /var/log/munin/munin-node.log にいろいろメッセージが出る。
エラーメッセージへの対応
まだ荒削りなようで、いろいろエラーがでる。
- cat: /proc/net/ip_conntrack: Permission denied
http://www.artiflo.net/2008/12/correction-bug-munin/
- /etc/munin/plugins/fw_conntrack の問題なので、/etc/munin/plugin-conf.d/munin-node に以下のように書いてみる。
[fw\*] user root
- [ERROR] Unable to update iostat_ios -> dev3_0_wtime: No such field (no "label" field defined when running plugin with "config"). http://munin.projects.linpro.no/ticket/640
# ./iostat_ios Use of uninitialized value in string eq at ./iostat_ios line 30. Use of uninitialized value in string eq at ./iostat_ios line 40.
iostat_ios がエラーになる
- [ERROR] Unable to update iostat_ios -> dev3_0_wtime: No such field (no "label" field defined when running plugin with "config").
- config で帰ってくる値と、fetchで帰ってくる値が違う
- telnet localhost 4949 で、config/fetch してみる。
config iostat_ios graph_title IO Service time graph_args --base 1000 --logarithmic graph_category disk graph_vlabel ms dev3_0.label dev3_0 dev3_0.type GAUGE dev3_0.draw LINE2config iostat_ios ngw.zukeran.net dev253_0.label dev253_0 dev253_0.type GAUGE dev253_0.draw LINE2 . fetch iostat_ios dev253_0_rtime.value 0.0735294117647059 dev253_0_wtime.value 0.0132371365745684 dev3_0_rtime.value 0.0865384615384615 dev3_0_wtime.value 0.00988266017958716
- パッチ書いてみました。
- /usr/src/redhat/BUILD/munin-1.3.4/node/node.d.linux/iostat_ios.in 2008-03-08 10:42:39.000000000 +0900 +++ iostat_ios 2009-01-22 02:25:54.000000000 +0900 @@ -25,9 +25,9 @@ # (c) 2004 - Per Andreas Buer # GPL v2 Yadda yadda. -use constant STATEFILE => '@@PLUGSTATE@@/iostat-ios.state'; +use constant STATEFILE => '/var/lib/munin/plugin-state/iostat-ios.state'; -if ($ARGV[0] eq 'autoconf') { +if ($ARGV[0] and $ARGV[0] eq 'autoconf') { if (-r "/proc/diskstats" or -r "/proc/partitions") { print "yes\n"; exit 0; @@ -37,7 +37,7 @@ } } -if ($ARGV[0] eq 'config') { +if ($ARGV[0] and $ARGV[0] eq 'config') { print_config(); exit; } @@ -127,9 +127,12 @@ "graph_vlabel ms\n"); for my $d ( @{ get_ios(1) } ) { - print("$d.label $d\n", - "$d.type GAUGE\n", - "$d.draw LINE2\n"); + print("${d}_rtime.label $d\n", + "${d}_rtime.type GAUGE\n", + "${d}_rtime.draw LINE2\n"); + print("${d}_wtime.label $d\n", + "${d}_wtime.type GAUGE\n", + "${d}_wtime.draw LINE2\n"); } }
snmp__df が存在しない領域を参照してエラーになる
- Use of uninitialized value in hash element at /etc/munin/plugins/snmp_xxx_df line 142.
# diff -u snmp__df.in snmp__df.in.new - snmp__df.in 2010-02-26 21:32:44.000000000 +0900 +++ snmp__df.in.new 2010-04-14 17:30:52.000000000 +0900 @@ -139,8 +139,8 @@ foreach my $partition (keys %$parts) { my $mp = get_single ($session, $hrFSMountPoint . $partition); - $partitions{$mp}{partition} = $partition; - print "# Added partition \"$mp\" as $partition...\n" if $DEBUG + $partitions{$mp}{partition} = $partition if (defined($mp)); + print "# Added partition \"$mp\" as $partition...\n" if (defined($mp) &&$DEBUG); } }
一部のスイッチで munin-node-configure で snmp__if_ が正しく設定できない
snmpで、 ifNumber が返ってくるが、ポートのインデックスが 1からの連番でない機器で問題になる。最適化の機能がうまく動いてない。
IF-MIB::ifNumber.0 = INTEGER: 28 IF-MIB::ifIndex.1 = INTEGER: 1 IF-MIB::ifIndex.5001 = INTEGER: 5001 IF-MIB::ifIndex.7001 = INTEGER: 7001
# diff -u SNMPConfig.pm.old SNMPConfig.pm - SNMPConfig.pm.old 2010-04-15 15:04:05.000000000 +0900 +++ SNMPConfig.pm 2010-04-15 15:07:17.000000000 +0900 @@ -102,7 +102,7 @@ } # Fetch the list of indices - if ($plugin->{number}) { + if (0 && $plugin->{number}) { my $num = _snmp_get_single($session, $plugin->{number}); return unless $num; @indexes = (1 .. $num);
WindowsのMIB
- Load 1.3.6.1.4.1.2021.10.1.3.2.2
pidebugが未定義
http://munin-monitoring.org/changeset/3477?new_path=/ に、パッチがある。
/etc/munin/plugin-conf.d/ の下の定義が反映されない(snmp)
下記のように書けと書いてあるけど、書いても反映されない。 wildcard(*)を使わずに、snmp_hostname_proc のように書けば反映されるけど、 台数が多くなると大変。 たぶん、 Node/Service.pm の export_service_environment が変。
[snmp_*] env.version 2 env.community public
サービス名(snmp_)の逆順に(reverse sort) wildcardが適用され、かつ、あとで 適用されたものが優先される。そのため、 snmp_ と snmp_aaa_* では、 snmp_* の 値で上書きされてしまう。snmp_* は、全ての監視対象に設定したい場合を除いて使わないのが吉。
ちなみに、env.community "public" のように、 "..." で括る記述例もあるが、これは動かない。
Argument "usb_fiq" isn't numeric in addition
- fix irqstats · munin-monitoring/munin@864ce18
- #1462 (Patch "irqstats" plugin: Fix error log message on Raspberry Pi) – Munin
perlのNet::Server::Fork でエラーが出る。
Use of uninitialized value in numeric eq (==) at /usr/share/perl5/Net/Server/Fork.pm line 168.
perl側の問題
Service bind9 on localhost/127.0.0.1:4949 returned no data for label query_other
$ munin-run bind9 No such file or directory at /etc/munin/plugins/bind9 line 79.
/var/log/bind9/query.log が無い。参考:munin plugin for bind9 | ohharaの日記 | スラッシュドット・ジャパン
chroot していると muninとbind9で見えるディレクトリと違うので注意。
Fedoraのsrc.rpmを使おうとすると、「cpio: MD5 sum mismatch」
日本語版では、「cpio: MD5 チェックサムが適合しません」になる。
- rpmbuildすると cpio: MD5 sum mismatch が出るの現象です。--nomd5 オプションを付けて操作してください。
整数データなのにグラフに小数点以下の端数が出る
- 300秒ごとに計測しているはずだが、実際には299秒だったり301秒だったりする
- rrdtoolがこれを真面目に計算してしまうため、誤差が出る
- faq – Munin
- Q: Why does my users plugin report floating point numbers?
- Q: My plugin only reports integers, why is munin showing floating point? ¶
- #1023 (Derive of Epoch) – Munin
- faq – Munin
Use of uninitialized value in list assignment at /usr/share/perl5/Munin/Master/Utils.pm line 112.
Unable to graph /var/www/html/munin/localhost/localhost/xxxx-day.png : opening '/var/lib/munin/--g.rrd': No such file or directory
エラーメッセージ部分は --g.rrd や --d.rrd など、ハイフンが連続する。
rootが内部で使用されているため、root.value のような識別子が使えないのが原因。
下記のパッチは2010年に提出されているが、反映されていない。何か問題があったのか?
plugin側で root という文字列を回避するのが無難?
In RRD: Error updating /var/lib/xxx/http_loadtime-loadtime-g.rrd: /var/lib/xxx/http_loadtime-loadtime-g.rrd: found extra data on update argument:
外部コマンドのtimeが存在しないとエラーになる。 apt-get install time する。
Use of uninitialized value $mp in hash element at /etc/munin/plugins/snmp_XXXX_df_ram line 138.
snmp__df_ram のエラー
初期化されてないときはスキップするようにしてみたが、これでいいのだろうか?
--- snmp__df_ram.old 2023-02-05 01:11:10.507814685 +0900 +++ snmp__df_ram 2023-02-05 01:11:31.797165369 +0900 @@ -135,6 +135,7 @@ foreach my $partition (keys %$parts) { my $mp = get_single ($session, $hrFSMountPoint . $partition); + next unless (defined($mp)); $partitions{$mp}{partition} = $partition; print "# Added partition \"$mp\" as $partition...\n" if $Munin::Plugin::SNMP::DEBUG }
グラフの曜日・月名が文字化けする
cron 実行時のLANGがC以外だと化ける。
- 〔munin〕 グラフの曜日が文字化けしないようにする : してログ - LANDHERE
- 【Debian/Ubuntu】Munin 2.0 をソースor バイナリ(.deb)でセットアップ | Pocketstudio.jp log3
グラフのスケール設定がわかりにくい
manual:087:7_examples - Cacti Docs ・manual:087:8_rrdtool.06_alt_y_grid - Cacti Docsの例が参考になる。
- graph_scale no
- デフォルトはSI単位系に揃えるのだが、揃えて欲しくないときは graph_scale no
- % 表示など
- graph_args
- rrdgraph に渡すパラメータ
- --alt-y-grid
- 1,2,5,10単位でY軸にグリッドを設定
- --alt-autoscale
- デフォルトではグラフY軸としてキリのいい数字を使う。alt-autoscaleは最大値・最小値を使う
- --alt-autoscale-max, --alt-autoscale-min
- 最大値(または最小値)の片方だけ使う。
- --upper-limit 上限 (%表示時に -u 100など)
- --lower-limit 下限 (%表示時に -l 0 など)
プラグインの実行権限
特に指定のない限り uid=nobody gid=munin (cf. /usr/share/perl5/Munin/Common/Defaults.pm )
our $MUNIN_USER = q{munin}; our $MUNIN_GROUP = q{munin}; our $MUNIN_PLUGINUSER = q{nobody};
- /etc/munin/plugin-cond.d/ で指定できる
グラフの説明(graph_info)
pluginでgraph_infoを指定することで、グラフ下に説明を追加できる。表示場所を変更したい場合は、 /etc/munin/templates/munin-serviceview.tmpl のGRAPHINFOの位置を修正する。
graph_infoではHTMLタグが使える。
TIPS / ノウハウ
- munin-check でパーミッションのチェックができる。
- munin-check -f でパーミッションの修正ができる
- symlink張らずにsnmpのテスト。下記のように環境変数渡しできる。
# host=testhost ./snmp__load
- グラフ分割
- 同じグループ(ドメイン)のグラフは1つにまとめるのは簡単
- ドメインが違う場合はどうしたらいいの?
リンク
- munin/RaspberryPi
- 【MRTG/rrdtool】 グラフィカルモニター化 Part3 (2ch)
- munin - SNMPプラグインの使用 (yukiwataの日記 2007-09-23)
- Amazon S3 plugins for Munin
- munin-nodeの設定をコマンドで確認する方法