Zabbixの外部スクリプトを使って天気を監視してみました。仕組みとしては、気象データの無料APIを提供するオンラインサービス OpenWeatherMap から天気をデータを取得してZabbixデータベースに記録します。
OpenWeatherMap の APIキーを取得
まずはじめに、OpenWeatherMap の APIキーを取得します。APIキーはメールアドレスがあれば、取得するのに1分もかかりません。以前は必要ありませんでしたが、最近APIキーが必須になったようです。
OpenWeatherMap のサインアップページに、必要事項を記入して「Create Account」をクリックします。
APIキーの取得は以上です。
天気取得スクリプトの作成
・OpenWeatherMapのAPIから天気データを取得するスクリプトを作成します。
sudo vi /usr/lib/zabbix/externalscripts/getWeather.php
#!/usr/bin/php <?php // API Key $apiKey='<APIキー>'; // OpenWeatherMap API のURL $apiUrl = 'http://api.openweathermap.org/data/2.5/weather?APPID=' . $apiKey . '&q='; // 第1引数で天気を取得する都市を指定 // 都市はZabbixのアイテムキーで指定します $city = $argv[1]; // 天気データの取得(Json形式) $weatherDatas_json = @file_get_contents($apiUrl . $city); // Json形式のデータを配列変数に変換 $weatherDatas = json_decode($weatherDatas_json, true); // 天気アイコンのファイル名の先頭2文字を取得 $weatherIcon = substr($weatherDatas['weather'][0]['icon'], 0, 2); // 天気アイコンのファイル名が取得できない場合は、取得不可を示す「00」をセット if (!$weatherIcon) { $weatherIcon = '00'; } // 天気アイコンのファイル名から天気名に変換するためのリスト $convList = array( '01' => '晴れ', '02' => '晴れ', '03' => '曇り', '04' => '曇り', '09' => '雨', '10' => '雨', '11' => '雷雨', '13' => '雪', '50' => '霧', '00' => '取得不可', ); // 天気アイコンのファイル名を天気名に変換 $weatherName = $convList[$weatherIcon]; // 天気名を表示 // ここで表示された値がZabbixデータベースに記録されます echo $weatherName;
今回は天気名を要約するため、天気アイコンのファイル名を天気名に変換していますが、天気IDを使って詳細な天気名を取得することもできます。OpenWeatherMap API で取得した天気データ形式については下記を参照してください。
▽ Weather Data|OpenWeatherMap Wiki
http://bugs.openweathermap.org/projects/api/wiki/Weather_Data
スクリプトオーナーを zabbixユーザに変更します。
sudo chown zabbix:zabbix /usr/lib/zabbix/externalscripts/getWeather.php
スクリプトオーナー(zabbix)に実行権限を追加します。
sudo chmod 700 /usr/lib/zabbix/externalscripts/getWeather.php
動作確認
第1引数で気温を取得する都市をアルファベットで指定します。例えば東京の場合は「Tokyo」となります。
sudo /usr/lib/zabbix/externalscripts/getWeather.php Tokyo 晴れ
天気が取得できない場合は「取得不可」と表示されますので、都市の指定を確認してください。
sudo /usr/lib/zabbix/externalscripts/getWeather.php dokoka 取得不可
OpenWeatherMap API での都市の指定は「<都市名>,<国名>」(東京の場合は Tokyo,jp)で指定するのが通常のようなのですが、カンマ「,」はZabbixキーでは引数の区切りとして認識されてしまうので、今回は都市名だけの指定としています。(別の記事でTNK様からご指摘がありました。ありがとうございます)
天気取得スクリプトを Zabbixアイテムに設定
天気取得スクリプトを設置するホストを作成します。[設定]→[ホスト]→[ホストの作成]をクリック
適当なホストを作成します。天気取得スクリプトを設置するだけの実態のないホストですのでIPアドレス等はそのままでOKです。
下記を設定し「追加」をクリックすれば設定完了です。天気を取得する都市は キーの設定で getWeather.php[<都市名>] の形式で指定します。
Zabbix天気アイテムの表示設定
スクリーンに天気を表示できるように設定します。[設定]→[スクリーン]→[スクリーンの作成]をクリック
「変更」をクリック→スクリーンセルを設定し「追加」をクリックすれば設定完了です。
[監視データ]→[スクリーン]→[天気] を選択し、フィルターで「1d」を選択すれば過去24時間分の天気が表示できます。
Zabbixで天気を表示して何の役に立つのかは正直疑問ですが(^^;)外部スクリプトを使えばどんなデータでも監視できることは、Zabbixの大きな魅力ですね。
コメント