見出し画像

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_` で始まるものが全てです。

結果こんな感じ。

先日の東京の暑さ。ちなみに降水確率じゃなくて、雲りの割合でした。

 暑苦しすぎる。

いいなと思ったら応援しよう!

しょっさん
貴方がサポートしてくれると、私が幸せ。 私が幸せになると、貴方も幸せ。 新しいガジェット・ソフトウェアのレビューに、貴方の力が必要です。