ZABBIXでお天気グラフを作ってみました。実用的ではないのですが、外部の公開APIから情報をとってきてグラフ化する練習ということで。
こちらをパクらせて参考にやりました。
Zabbix 外部スクリプトで天気を監視(OpenWeatherMap)
https://blog.apar.jp/php/824/
■■流れ
1ZABBIXサーバの /usr/lib/zabbix/externalscripts/ に取得スクリプトを配置
2ZABBIXで”ホスト”登録
3アイテムで都市毎に登録
■■共通次項
アイテムでスクリプトを指定する際に [] の中に都市名を入れる
データの型を文字列にすれば一覧表示に、整数にすればグラフに。
■その1 天気の一覧を取得し表示してみる。
完成イメージ

スクリプト
[root@wiki-web-2 externalscripts]# cat /usr/lib/zabbix/externalscripts/getWeather.php
#!/usr/bin/php
<?php
// API Key
$apiKey='c0fb77bc40a18b9a24019dcb41ee57d3';
// 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;
[root@wiki-web-2 externalscripts]#
アイテムの設定

■その2 天気の一覧を取得しグラフにする。
完成イメージ

スクリプト
[root@wiki-web-2 externalscripts]# cat getWeather_Number.php
#!/usr/bin/php
<?php
// API Key
$apiKey='c0fb77bc40a18b9a24019dcb41ee57d3';
// 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';
}
// 天気名を表示
// ここで表示された値がZabbixデータベースに記録されます
echo $weatherIcon;
[root@wiki-web-2 externalscripts]#
[root@wiki-web-2 externalscripts]#
■その3 気温の一覧を取得しグラフにする。
完成イメージ

スクリプト
[root@wiki-web-2 externalscripts]# cat getWeather_Number.php
#!/usr/bin/php
<?php
// API Key
$apiKey='c0fb77bc40a18b9a24019dcb41ee57d3';
// 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';
}
// 天気名を表示
// ここで表示された値がZabbixデータベースに記録されます
echo $weatherIcon;
[root@wiki-web-2 externalscripts]#
[root@wiki-web-2 externalscripts]#

こんな感じです。ただこのOpenWeatherMap、天気に関してはいい加減で東京で霧とかたまに出ます。まじかよ、都会の摩天楼怖い。

One thought on “PHPでも勉強するか! その2 ZABBIXでお天気グラフを作る”