ホーム » 「munin」タグがついた投稿

タグアーカイブ: munin

システム

最近の投稿

アーカイブ

カテゴリー

switchbot API の排他処理とリトライ

自宅サーバを更新し、Switchbot の温度監視を munin でグラフ化、その結果を nagios4 で結果のモニタリングをしていたけど、新しいサーバで Unknown の状態が頻発している。旧サーバでの運用時より、発生回数が増えている。

排他処理とリトライの追加

Switchbot API での値の取得だけれど、muninでの値取得とnagios4での値取得の処理と重なるとデータ取得に失敗すると思われるので、flock コマンドで排他処理を追加。これである程度は Unknown が減ったが、それでも Unknown 発生する。

しかたがないので、Switchbot API で 成功ステータス100が取れなかった時は、1秒の間をあけて1度だけリトライするようにした。(当初は0.3秒 sleep にしたけど効果が薄かった) これにより Unknown はかなり減ったけど、まだ失敗することがある。しかしながら、Switchbot API の1日あたりの回数制限もあるし、何度もリトライさせるのはやめておこう。

#!/bin/bash

. "/usr/local/etc/switchbot/token-v11.sh"

function curl_status() {
    # flockで排他処理
    /usr/bin/flock -x /tmp/switchbot-api.lock \
    /usr/bin/curl -s --request GET \
                  -H "Content-Type: application/json" -H "Authorization: ${token}" \
                  -H "sign: ${sign}" -H "nonce: ${nonce}" -H "t: ${t}" \
                  "${url_list_v11_meter}"
}

function device_status() {
    url_list_v11_meter="${url_list_v11}/$1/status"
    JQ=/usr/bin/jq

    json=$(curl_status)
    state=$($JQ '.statusCode' <<< "$json" )
    # 取得に失敗したら1度だけリトライ
    if [ "$state" != "100" ]; then
        # リトライ間隔(sleep 0.3 では効果が薄かった)
        sleep 1
        json=$(curl_status)
    fi
    $JQ -r '. | (.statusCode|tostring) + " " + (.message|tostring)' <<< "$json"
}

(追記) 0:00 頃に unknown

上記の改良後だけど、2日連続で 0:00 に unknown 状態になる。 Switchbot HUB 自身が、日替わり時に何らかの処理を実行しているんだろうなぁ…

Date::Manip::MD5 is deprecated…

メールの流量モニタに一定のメールがずっと流れている記録が残ってる。

状況

確認すると、munin-cron で実行される munin-graph で以下のエラーメッセージが出ている。

Date::Manip::DM5 is deprecated and will be removed
  from the Date::Manip package starting in version 7.00 at (eval 5) line 1.

Date::Manip::MD5 パッケージは、ver 7.0 から Date::Manip から非推奨になったみたい。グラフは正常に生成されているものの、警告メッセージが5分おきに送られるのはうざい。

munin-graph と munin-cgi-graph の “Date::Manip::DM5” に関係する部分は、こんな感じ。

((( /usr/share/munin/munin-graph )))
  :
BEGIN {
    # This is needed because Date::Manip has deprecated the functional
    # interface in >= 6.x. So, we force the use of the 5.x API.
    $Date::Manip::Backend = 'DM5';

    # Double line here to avoid spurious warnings about D::M::Backend being
    # used only once.
    $Date::Manip::Backend = 'DM5';
}
use Date::Manip;
  :
((( /usr/lib/munin/cgi/munin-cgi-graph )))
  :
use IO::Handle;
BEGIN {
 no warnings;
 $Date::Manip::Backend = 'DM5';
}
use Date::Manip;
  :

対応

こちらの記事を見ると、Bug Report の中で、BEGIN {} ブロックの中を消すパッチを提案しているので、ひとまず、この2か所のBEGIN {} の範囲をコメントアウトで消すと、問題なく動いている。バグレポートも出ているので、近いうちに修正されるだろう。

暑さの測定

以前購入した、Raspberry-Pi 内蔵の MZ-80C のミニチュアは、温度・湿度・気圧のセンサーを付けて、2Fのトイレに設置していたけど、WiFiが若干不安定だったので、常時サーバで記録はしていなかった。しかし、この暑さなので、エアコンの無い部屋の温度を測定したかったので、改めて設定してみた。

Raspberry-Pi の inetd の echo サーバの所に温度測定スクリプトを記載して、”/usr/bin/nc raspberry-pi 7″ で測定できるように設定し、munin 用のデータ取得スクリプトを書いて設定。このクソ暑い温度を測ってみた。

家の西側の2会のトイレに設置しているので、夕方が最高温度で、家の中でも34℃越え。湿度は、トイレのドアを開放すると、大きく変化するようだ。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト