Grafana(+Prometheus) で天気を監視してみた
Prometheus の exporter を作ってくださっている方が多く、OpenWeather の情報を拾ってきて気温や湿度などの情報を Prometheus へ連携できるものがあります。
docker イメージが公開されていますから、docker compose でちょいちょい設定したらすぐに利用できます。
openweather-exporter:
image: billykwooten/openweather-exporter
container_name: openweather-exporter
restart: always
ports:
- "9191:9191"
environment:
- OW_LISTEN_ADDRESS=:9191
- OW_CITY=Toshima, JP
- OW_DEGREES_UNIT=C
- OW_APIKEY=xxxxxxxxxxxxxxxxxxxxxxxxx
- OW_CACHE_TTL=60
- OW_ENABLE_POL=true
わが家では pushgateway が 9091 ポートを利用していたので、LISTEN PORT を 9191 へと変更しています。デフォルトでは華氏なので摂氏にするために OW_DEGREES_UNIT=C としています。わが家の近くだと CITY は TOSHIMA, JP が指定できます。
あと、OW_CACHE_TTL でキャッシュを保持する時間を決められます。デフォルトでは 300秒キャッシュします。その間は Prometheus からいくら scrape しても OpenWeather へ API コールせず、ローカルのキャッシュから返答してくれます。まちがってコールしまくったりしない限りは余計な APIコールしなくて済むのでありがたい機能です。ですが、計算上 90秒に 1度コールする程度なら無料の上限値 1,000 には達しないのでキャッシュを何となく 60秒にしました。
APIKEY については、OpenWeather に SIGN UP して API KEY を取得するだけです。
1日 1,000回までの API コールは無料です。それを超えると課金が必要のようです。課金する場合でも 1日のコール上限を決められるので API コール破産はしないでしょう。いや、破産するほどコールするってどんなことだろう。
さて prometheus.yml の設定内容です。scrape_interval: 程度です。
90秒間隔でどれだけ天気が変わるんだよって感じもしますが、APIのコール上限を攻めてみたかったので、その様に設定しました。
- job_name: 'openweather-exporter'
scrape_interval: 90s
static_configs:
- targets: ['<ホスト名>:9191']
あとは Grafana で表示するだけです。取得可能なコレクタの名前は github にありますが `openweather_` で始まるものが全てです。
結果こんな感じ。
暑苦しすぎる。