気圧を Mackerel で監視して Slack にアラートを飛ばすやつを作る

はじめに

近年, 気圧が低くなると頭が痛くなったり体調を崩したりするという人が増えています [要出典].
住んでいる地域の気圧情報を監視して, 気圧が低くなったら知らせてくれるものがあると便利です.
したがって, 作っていくことにしましょう.

気象情報 API

気象情報 API を公開しているサービスはいくつかありますが, 今回は OpenWeatherMap を利用することにします.

openweathermap.org

アカウントに登録すると API Key が発行されます.
無料枠でも現在の気象情報や 5 日後までの予報などの API を 1 分間に 60 回まで叩けるようです
*1

今回の目的であれば, 指定した地域の現在の気象情報を 5 分に 1 回くらい取得すれば良さそうなので, 無料枠にも十分収まりそうですね.

したがって, サーバを立てていきましょう.

Google Compute Engine

仮想サーバを立てるなら, 今をときめく EC2 かとも思いましたが, 調べてみると最初の 1 年間の無料期間が終了したあとは, どうしても使用料金がかかってしまうようでした *2

そこで Google Compute Engine を見てみると, f1-micro VM インスタンスを 1 台稼働させるだけなら無料トライアル期間終了後も常に無料のようです *3

よって Google Compute Engine 上に Linux インスタンスを立てることにしました.
入門ガイド VM インスタンスの作成と起動  |  Compute Engine ドキュメント  |  Google Cloud を読みながらインスタンスを作成していきましょう.

Mackerel

Mackerel Mackerel(マカレル): 新世代のサーバ管理・監視サービス は本来サーバ管理・監視サービスですが, Mackerel はホストにもとづくメトリックと, ホストにもとづかないサービスメトリックという 2 種類のメトリックを監視することができます.

そこで, 気圧というホストにもとづかないメトリックをサービスメトリックとして扱い, Mackerel に監視してもらうことにしましょう.
"Weather" という名前のサービスを作成し, そこに気圧情報を投稿していくことにします.

f:id:pione30:20180325173413p:plain

Mackerel はサービスメトリック投稿用の API を公開している *4 ので, 簡単なスクリプトを書いて, OpenWeatherMap で取ってきた気圧情報を Mackerel に投稿できるようにしましょう:
github.com

このスクリプトを 仮想サーバ上に置き, 5 分に 1 回実行するよう crontab に登録すれば良さそうです:

*/5 * * * * pione30 . /path/to/.bash_profile; python3 /path/to/weather2mackerel.py

すると

f:id:pione30:20180325173448p:plain

うまくいっているようです.

Slack にアラートを飛ばす

無事 Mackerel で気圧情報を監視できるようになったので, 気圧がある値より低くなったら Slack にアラートが飛ぶようにすると便利そうです.
ヘルプページ Slackにアラートを通知する - Mackerel ヘルプ を見ながら設定していきましょう.
とりあえず私は 1010 hPa を下回ったら Warning を, 1005 hPa を下回ったら Critical を出すようにしてみました.

すると

f:id:pione30:20180325173506p:plain

いい感じですね.

気がつくとめでたく低気圧アラートが完成していました.

費用

0 円

まとめ

OpenWeatherMap から定期的に気圧情報を取得し, Makcerel で監視して Slack にアラートを飛ばすことで, 低気圧アラートを作ることができました.

ここまでくれば, 湿度情報を監視したり, 現在値と 3 時間後の予報との差分値を取って, 急激な変化であればアラートを飛ばす, というようなことも簡単にできそうです.

しかしながら, 現状だと Mackerel のグラフは縦軸の下限値が 0 で固定のようなので, 差分値のように負の値を取りうるメトリックを監視させて可視化するには向かなさそうです.
(今回の気圧監視も, 生の値を使うと約 1000 hPa に対して変化量が 1 桁 hPa というオーダーなので, グラフがほとんど直線になってしまいました. そのため生の値から 900 を引いた値を使い, 少しでもグラフの変化を見やすくするというワークアラウンドを用いています.)
Mackerel のグラフの表示範囲をマニュアルで自由に設定できるようになるともっと便利だなあとは思いました.

とはいえ, 注意して知りたい情報が自動的に手元に知らされてくるという体験は, 便利な暮らしを享受しているような気分になれて, 良いものです.

これからもやっていこうと思います.
ありがとうございました.