ホーム » コンピュータ » Linux » Debian » muninの測定をnagios4で活用するには

システム

最近の投稿

アーカイブ

カテゴリー

muninの測定をnagios4で活用するには

switchbot の温湿度計を munin で読み取るための python スクリプトを活用していたけど、特定閾値を超えた際の処理は nagios4 の方が便利。munin の警告だと閾値を越えている間は何度も警告メールが飛んでくる。nagios であれば、こういった処理がうまい。

かといって、swichbot の python アプリを nagios の check_*** に書き換えてみたが、bluetooth のアクセス権限などの設定が煩雑だしうまくいかなかった。

でも、munin は、ネットワーク経由の監視の機能があるので、それを使うこととした。munin のリモート接続のポート番号4949に接続して、list で測定できるものの一覧が取れて、fetch すれば 値を読み取ってくれる。

((( telnet でプロトコルを確認 )))
$ telnet localhost 4949
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
# munin node at localhost
list
df load processes switchbotmeterbt
.
fetch switchbotmeterbt
xxxxxxxxxxxx_Temperature.value 27.6
xxxxxxxxxxxx_Humidity.value 54
xxxxxxxxxxxx_Battery.value 87
xxxxxxxxxxxx_Discomfort.value 75.68896000000001
xxxxxxxxxxxx_WBGT.value 24.176256000000006
.
QUIT
Connection closed by foreign host.

((( 単純なので nc を使って読ませる )))
$ echo -e "fetch switchbotmeterbt\nQUIT\n" | nc localhost 4949
# munin node at localhost
xxxxxxxxxxxx_Temperature.value 27.7
xxxxxxxxxxxx_Humidity.value 54
xxxxxxxxxxxx_Battery.value 87
xxxxxxxxxxxx_Discomfort.value 75.82342
xxxxxxxxxxxx_WBGT.value 24.268412
.

ということで、ちょっとだけ手抜きで nc とか使って perl を使って読み取らせる処理を書いてみた。

#!/usr/bin/perl

use strict ;
use warnings ;

my $SWBT_METER = "/usr/bin/echo -e 'fetch switchbotmeterbt\nQUIT\n' | /usr/bin/nc localhost 4949" ;
my %value = () ; 
open( my $FH , "$SWBT_METER 2>/dev/null |" ) or die( "Can't open $SWBT_METER" ) ;
while ( my $line = <$FH> ) {
    if ( $line =~ /^[0-9a-f]+_([^.]+)\.value\s+([\.0-9]+)\s*$/ ) {
        $value{$1} = $2 ;
        $flag = 1 ;
    }
}
close( $FH ) ;