ホーム » 「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℃越え。湿度は、トイレのドアを開放すると、大きく変化するようだ。



