[zabbix][外部チェック] OpenWeatherMapから天気データを取得してZabbixと連携する方法。

    • 2015/03/17 10:17
    • Category: zabbix

    天気情報を蓄積しておきたいなぁと思っていたところ、天気情報をAPIで提供しているサービスがあったので、それを利用してZabbixと連携する方法をまとめてみました。

    といっても何番煎じなのか分かりませんが。

    確認環境:
    ・CentOS 6.6
    ・Zabbix 2.4.4

    OpenWeatherMap current weather and forecast /
    http://openweathermap.org/

    こちら、APIの形で色々とデータを提供されているのでそちらを利用します。

    Weather API /
    http://openweathermap.org/api

    詳細はAPIのページを参照していただくと良いのですが、以下の様な感じでデータを取得できます。
    curl "http://api.openweathermap.org/data/2.5/weather?q=tokyo,jp&units=metric" | jq .
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    120 480 0 480 0 0 2789 0 --:--:-- --:--:-- --:--:-- 4897
    {
    "cod": 200,
    "name": "Tokyo",
    "id": 1850147,
    "dt": 1426548821,
    "coord": {
    "lat": 35.69,
    "lon": 139.69
    },
    "sys": {
    "sunset": 1426495751,
    "sunrise": 1426452638,
    "country": "JP",
    "message": 0.0071
    },
    "weather": [
    {
    "icon": "10n",
    "description": "light rain",
    "main": "Rain",
    "id": 500
    }
    ],
    "base": "cmc stations",
    "main": {
    "humidity": 100,
    "grnd_level": 1027.48,
    "sea_level": 1032.29,
    "pressure": 1027.48,
    "temp_max": 10.799,
    "temp_min": 10.799,
    "temp": 10.799
    },
    "wind": {
    "deg": 344.506,
    "speed": 6.41
    },
    "clouds": {
    "all": 92
    },
    "rain": {
    "3h": 0.82
    }
    }

    q= で町の名前を指定
    units=metricで気温を摂氏(℃)で取得できるようになります。未指定だとケルビンでの取得となります。華氏の場合はimperialになります。

    なおデータを整形するためにJSONパーサのjqを導入しています。未導入の方は導入するようにしてください。
    # CentOSの場合はyum install jq

    で、この後は、整形したデータをZabbixに導入するだけです。
    本当はPythonなどを使用するべきなのでしょうが、自分にはその力がないので強引にシェルスクリプトでスクリプトを作成してみました。

    スクリプトは以下に置いてあります。

    zabbix_weather_check/check_weather.sh at master · kometchtech/zabbix_weather_check /
    https://github.com/kometchtech/zabbix_weather_check/blob/master/check_weather.sh

    天気情報取得部、天気日本語化部、風向き日本語化部に分かれています。

    #!/bin/bash

    # http://openweathermap.org/current
    CITY=$1
    WEATHER=$2
    CURLURL="http://api.openweathermap.org/data/2.5/weather?q="
    CURLOPTS="-m 30 --retry 10 -s"
    APIKEY=""
    DATA=""

    case $WEATHER in
    "weather")
    while [ "$DATA" = "" -o "$DATA" = "failed to connect " ]
    do
    DATA=`curl ${CURLOPTS} "${CURLURL}${CITY}&APPID=${APIKEY}"\&units=metric`
    done
    weatherCode `echo ${DATA} | jq .weather[0].id`
    ;;

    とりあえずAPIの取得の際にエラーが出る時があるので、なんとなくのエラー処理をいれています(これでいいのか分かりませんが)。また、個々のデータを取得するためにjqのフィルタリング機能を利用してデータを指定するようにしています。

    function weatherCode() {
    case $1 in
    # Thunderstorm
    200)
    echo "小雨と雷雨"
    ;;
    201)
    echo "雨と雷雨"
    ;;
    202)
    echo "大雨と雷雨"


    天気部分については、天気IDを取得できるので、それを判定して日本語情報を返すようにしています。こちらは参考先をパクリリスペクトしています。

    OpenWeatherMapをショートコードにして各地の天気を表示 | RYUS blog /
    http://ryus.co.jp/blog/openweathermap2/


    function windDegree() {
    degree=$1
    degree=`echo $degree \* 10000 | bc` > /dev/null 2>&1
    degree=${degree%.*}
    if [ ${degree} -gt "2250000" ]; then
    degree=`expr ${degree} + 3600000`
    fi

    if [ 225000 -lt $degree -a $degree -le 675000 ]; then
    echo "北東"
    elif [ 675000 -lt $degree -a $degree -le 1125000 ]; then


    風向きも同じです。Degreeとか知らんかったです(数学忘れた・・・)

    あとは、Zabbixサーバの外部スクリプトを読み出す場所にスクリプトを配置します。
    そして、アイテムとしてスクリプトを指定します。

    Snip20150317_1.png

    あとはデータが取得できるかどうかを確認します。

    Snip20150317_2.png


    なお、普通に使う分には問題にならないと思いますが、APIについては1分間あたり3000回までに制限されているようです(無料プランの場合)。アプリなどを使用してそれ以上になる場合は、APIキーの取得と合わせて有料プランを選択する必要があるそうです。

    Weather API Price-list /
    http://openweathermap.org/price

    データを1年ぐらい取得しておけば、1年こんなことがあったなぁと思いだせたりすることもあると思うので、色々と活用してみると面白いかもしれません。

    参考:
    Objective-C - OpenWeatherMap API v2.5から天気を取得する - Qiita /
    http://qiita.com/key/items/aad73fd6057484f20731




    Pagination

    Trackback

    Trackback URL

    https://kometchtech.blog.fc2.com/tb.php/1798-ebb75000

    Comment

    Post Your Comment

    コメント登録フォーム
    公開設定

    Utility

    Profile

    kometch

    Author:kometch
    なんちゃってエンジニアです。
    2009年10月から業務都合により大阪勤務になりました。
    2010年1月、HYBRID W-ZERO3を購入しました。
    2010年11月、HTC Desire HDを購入しました。
    2012年2月、都内の会社に転職しました。
    2012年5月、HTC One Xを購入しました。
    2012年8月、事情により休職しました。
    2012年8月、SONY Xperia SXを購入しました。
    2013年1月、一身上の都合により退職しました。
    2014年3月、都内の会社に就職しました。
    2016年8月、HPC系の会社に転職しました。

    Amazonほしい物リスト
    何か問題などありましたら、こちらまで。 Twitter:@kometchtech follow us in feedly

    カレンダー

    08 | 2017/09 | 10
    - - - - - 1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30

    全記事(数)表示

    全タイトルを表示

    バロメーター

    カテゴリー

    カテゴリークラウド

    アーカイブ

    検索フォーム

    FC2カウンター

    現在の閲覧者数

    現在の閲覧者数:

    Amazonアソシエイト

    スポンサードリンク

    月間ページランキング

    ブログパーツ

    サイトランキング

    スポンサードリンク