Zabbix 外部スクリプトで天気を監視(OpenWeatherMap)

プログラム
プログラムPHPZabbix
スポンサーリンク

Zabbixの外部スクリプトを使って天気を監視してみました。仕組みとしては、気象データの無料APIを提供するオンラインサービス OpenWeatherMap から天気をデータを取得してZabbixデータベースに記録します。

OpenWeatherMap の APIキーを取得

まずはじめに、OpenWeatherMap の APIキーを取得します。APIキーはメールアドレスがあれば、取得するのに1分もかかりません。以前は必要ありませんでしたが、最近APIキーが必須になったようです。

OpenWeatherMap のサインアップページに、必要事項を記入して「Create Account」をクリックします。
zabbix-weather-a-01

表示されている「API key」をメモしておきます。
zabbix-weather-a-02

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アイテムに設定

天気取得スクリプトを設置するホストを作成します。[設定]→[ホスト]→[ホストの作成]をクリック
zabbix-weather01

適当なホストを作成します。天気取得スクリプトを設置するだけの実態のないホストですのでIPアドレス等はそのままでOKです。
zabbix-weather02

作成したホストの「アイテム」をクリックします。
zabbix-weather03

「アイテムの作成」をクリックします。
zabbix-weather04

下記を設定し「追加」をクリックすれば設定完了です。天気を取得する都市は キーの設定で getWeather.php[<都市名>] の形式で指定します。
zabbix-weather05-2

Zabbix天気アイテムの表示設定

スクリーンに天気を表示できるように設定します。[設定]→[スクリーン]→[スクリーンの作成]をクリック
zabbix-weather06

適当なスクリーン名を入力して「追加」をクリックします。
zabbix-weather07

作成したスクリーンをクリックします。
zabbix-weather08

「変更」をクリック→スクリーンセルを設定し「追加」をクリックすれば設定完了です。
zabbix-weather09

[監視データ]→[スクリーン]→[天気] を選択し、フィルターで「1d」を選択すれば過去24時間分の天気が表示できます。
zabbix-weather10

Zabbixで天気を表示して何の役に立つのかは正直疑問ですが(^^;)外部スクリプトを使えばどんなデータでも監視できることは、Zabbixの大きな魅力ですね。

コメント

タイトルとURLをコピーしました