2011/12/30(金)配布元の munin 1.4.6 は、FreeBSD8.x のLANトラフィック監視にはそのまま使えない

2017/10/12 4:46 サーバ運営・管理
システムの大幅な改変に伴い、サーバ監視に使用している munin も 1.2.6 から 1.4.6 に更新しました。
ところが、パッチをいろいろ入れていたのを忘れていて、更新だけしてしまったものだから、嵌ってしまったのです・・・orz しかも、まる2日間。。

具体的には、LAN カードのトラフィック計測が全く駄目。
具体的には以下 ↓


この計測を行うプラグインは、 [MUNINBASE]/lib/plugins ディレクトリの中の if_ というスクリプトです。
どうやら、スクリプト内で netstat コマンドを実行して、送信バイト数、受信バイト数を、sed で切り出している仕組みのようです。

手動で netstat コマンドを実行してみて、スクリプトが意図している内容と、実際の netstat コマンドの出力が異なることが分かりました。
具体的には、
72行目:
  rsum += $7; osum += $10;

→ rsum += $8; osum += $11;

87行目と88行目:
  print "rbytes.value", $7;
  print "obytes.value", $10;

→  print "rbytes.value", $8;
  print "obytes.value", $11;

のように修正すると、機能するようになります。

修正後はこんな感じ ↓

#年末・年始でアクセスが少なく静かです :-)

ここまでやって気づいたのですが、FreeBSD の Ports に munin が収録されているようで、Portsでは、この類のパッチが当てられているのかどうか気になったので確認してみました。、
うーーむ。既に対応されとる。最初からこっち見てれば早かったなorz
こんな感じです:
--- plugins/node.d.freebsd/if_.in.orig  2009-12-30 13:55:55.000000000 +0100
+++ plugins/node.d.freebsd/if_.in 2010-02-24 18:59:15.670282185 +0100
@@ -81,9 +81,12 @@
if (NF == 10) {
print "rbytes.value", $6;
print "obytes.value", $9;
- } else {
+ } else if (NF == 11) {
print "rbytes.value", $7;
print "obytes.value", $10;
+ } else {
+ print "rbytes.value", $8;
+ print "obytes.value", $11;

}'
fi

#表示が崩れるので、中括弧は全角文字にしています。実際は半角文字の中括弧です。

--- plugins/node.d.freebsd/if_errcoll_.in.orig  2009-12-30 13:55:55.000000000 +0100
+++ plugins/node.d.freebsd/if_errcoll_.in 2010-02-24 19:00:26.026407278 +0100
@@ -59,9 +59,13 @@
print "ierrors.value", $5;
print "oerrors.value", $8;
print "collisions.value", $10;
- } else {
+ } else if (NF == 11) {
print "ierrors.value", $6;
print "oerrors.value", $9;
print "collisions.value", $11;
+ } else {
+ print "ierrors.value", $6;
+ print "oerrors.value", $10;
+ print "collisions.value", $12;

}}'

#表示が崩れるので、中括弧は全角文字にしています。実際は半角文字の中括弧です。

他にも、幾つかのプラグインにて FreeBSD用のパッチがあるようです。