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