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の大きな魅力ですね。








コメント