Mackerel Advent Calendar 2017 - Qiita の12/20の記事です
以前、【増枠】紅白 Milkcocoa 合戦!【祭り】 Milkcocoa Meetup vol12 - connpassでLTしたこれを
(要約:3時間で勝手にエアコンが切れるアパートで、
ハムスターのために温度が一定以上になったらラズパイでエアコンつけて夏を乗り切りました)
いろいろと事情が変わったので、今回はMackerelを使って改造してみました!
前回より
変わったこと
実は当時のアパートから引っ越ししたので事情がとても変わりました
- エアコンが勝手に切れない!!
- ハムスターたちとエアコンが遠いので、ハムスターのそばで温度を取ると赤外線が届かない
- もしかして実はもう必要ないのでは...
当時の課題
- 湿度を取っているのに表示していない、SPだと崩れてる
- 得意でないフロントゴリゴリ実装でもう1個グラフを増やす気力が沸かなかった😂
- 後追いでグラフを見て確認できるけど、状況をPushしていない
- 当時をよく覚えていないけどHubot周りがうまくいかず諦めちゃった😂
ここにMackerelを導入してみました
Mackerelにカスタムメトリック投稿
物理的な実装はセンサーつないだだけなので割愛します
温度と湿度を取得して出力
ホストのカスタムメトリックを投稿する - Mackerel ヘルプ を参考にタブ区切りで出力
import time
import get_environment as env # 温度取得はmilkcocoa送信用に実装済みなので流用
# vars
epoch_seconds = str(time.time())
try:
# get host_id
with open('/var/lib/mackerel-agent/id') as mackerel_agent_id:
host_id = mackerel_agent_id.read()
# output datas
print('\t'.join(['env.temp', env.temperature, epoch_seconds]))
print('\t'.join(['env.hum', env.humidity, epoch_seconds]))
except Exception as e:
print('failed in sending to mackerel')
print(e)
実行結果
$ sudo /usr/bin/python /PATH_TO_SOURCE/mackerel_monitor_temperature.py env.temp 22.40 1512901475.44 env.hum 36.40 1512901475.44
mackerel-agent.confに追記
# 追記内容 [plugin.metrics.raspi] command = "sudo /usr/bin/python /PATH_TO_SOURCE/mackerel_monitory_temperature/mackerel_monitor_temperature.py"
agent起動
$ nohup sudo /usr/local/bin/mackerel-agent >> /var/log/mackerel-agent.log &
こうなる
青いグラフが湿度、オレンジが温度です
※12/9の21時ごろに湿度がいきなりあがったのは冷しゃぶしたからです
監視を入れます
ハムスターにとって快適な温度は20〜26度で、
冬場は風邪を引かないための湿度は40〜60%が良いらしいのでこんな監視設定をします
$ mkr monitors
[
{
"id": "3bwDVM8jm1h",
"name": "custom.env.hum over 60%",
"memo": "ジメジメだよ(。>﹏<。)",
"type": "host",
"metric": "custom.env.hum",
"operator": ">",
"warning": 60,
"critical": 65,
"duration": 3
},
{
"id": "3bwDQLE4bTS",
"name": "custom.env.hum under 40%",
"memo": "干からびちゃうよ(。ŏ﹏ŏ)",
"type": "host",
"metric": "custom.env.hum",
"operator": "<",
"warning": 45,
"critical": 40,
"duration": 3
},
{
"id": "3bw5wNYbhN5",
"name": "custom.env.temp over 26℃",
"memo": "暑いよ(;´Д`)",
"type": "host",
"metric": "custom.env.temp",
"operator": ">",
"warning": 25,
"critical": 26,
"duration": 3
},
{
"id": "3bw5memzmP3",
"name": "custom.env.temp under 20℃",
"memo": "寒いよ:;(∩´﹏`∩);:",
"type": "host",
"metric": "custom.env.temp",
"operator": "<",
"warning": 21,
"critical": 20,
"duration": 3
}
]
監視設定した途端いきなりCRITICAL来た
温度とか言ってる場合じゃない!!
(温度は無事20〜26度をさまよっていました)
朝の喉のイガイガ感の原因がはっきりしました
ここまでで
- ちょっとPython書いたらメトリック投稿できた
- フロント頑張らなくてもグラフ表示できる!!!
- 簡単に湿度まで可視化できた!!
- しかも実はラズパイの死活監視までできている
はまったところ
invalid JSONされる
2017/12/03 11:54:14 WARNING <command> metadata plugin "raspi": outputs invalid JSON: env.temp 22.50 1512302054.61
mackerel-agent.confの書き方がだめでした
# これでエラー [plugin.metadata.raspi] command = "sudo /usr/bin/python /home/pi/work/mackerel_monitory_temperature/mackerel_monitor_temperature.py" # "plugin.metrics."ではじめないといけない [plugin.metrics.raspi] command = "sudo /usr/bin/python /home/pi/work/mackerel_monitory_temperature/mackerel_monitor_temperature.py"
ドキュメントろくに呼んでない自分が完全に悪いけど
エラーメッセージがもうちょっと親切だとありがたかったかも...
エージェント経由ってタブ文字区切りだとだめなの...?で数日悩みました( ;∀;)
おわりに
アドベントカレンダー書くぞと帰ってきて加湿器つけてこんな感じで
湿度がCRITICALとWARNINGを行き来しています
お湯を800mlくらい蒸発させたときは湿度20%くらいあがって、すごい即効性がありました
やったことが数字になってわかるのもおもしろいね(●´ϖ`●)