Zabbix API用のPHPライブラリと基本的な使い方

zabbix-api-php

初めてZabbixを導入する際、もしくは、大量に設定の変更があった場合、1つ1つ手作業で行うには多くの時間と労力がかかってしまいますが、Zabbix APIを使えばそんな悩みも解決します!
今回は特にZabbix API用のPHPライブラリを利用した基本的な使い方をご紹介します。

Zabbix API用のPHPライブラリを使う

ここでは、Zabbix API用のPHPライブラリを使って実際にログインするところから、ホスト一覧を取得してログアウトするまでを今回の目的とします。

例題:APIでホスト一覧の取得
  • Step 1
    インストールと設定

    Zabbix API用のPHPライブラリをインストールし、Zabbix APIのURLやログイン用のユーザー名、パスワードを設定します。

  • Step 2
    ログイン

    Zabbix APIを使用してログインし、以降の処理に必要なauthキーを取得します。

  • Step 3
    ホスト一覧を取得

    PHPライブラリを使用してホスト一覧を取得し、結果を表示してみましょう。

  • Step 4
    ログアウト

    最後はログインしたユーザーをログアウトしましょう。

PHPライブラリをインストール

まずは、Zabbix社の公式サイトからPHPライブラリ用のパッケージをダウンロードして、PHPスクリプトを作成するサーバーにインストールします。
ダウンロードするにはZabbixのアカウントが必要です

インストールしたパッケージの内容は、以下に格納されたの1つのファイルになります。

/usr/share/php/zabbix/class.zabbixapi.php

このZabbix API用のClassファイルを、今回作成するPHPスクリプトで読み込む所から進めて行きます。

Zabbix APIの設定とログイン

ログインまでの流れとしては、PHPスクリプトファイルを作成してライブラリを読み込み、インスタンス化new)してログインします。
特に難しい所もありませんので、サクッと進めていきます!

<?php
// Zabbix API用のPHPライブラリを読み込む
require_once('/usr/share/php/zabbix/class.zabbixapi.php');

// Zabbix APIの接続設定
$url = 'http://localhost/zabbix/api_jsonrpc.php';
$user = 'Admin';
$password = 'zabbix';

// インスタンス化
$zbapi = new ZabbixApi($url, $user, $password);

// ログイン
$zbapi->login();

ZabbixApi()のに設定するパラメータには、OSではなくZabbix管理インターフェースにログインするための情報を設定します。
[$url]パラメータに設定する[api_jsonrpc.php]は決まり事なので気にしないでください。

パラメータ説明
$urlZabbix管理インターフェースのURL+api_jsonrpc.php
$userZabbix管理インターフェースにログインする際のユーザー名
$passwordZabbix管理インターフェースにログインする際のパスワード
Zabbix APIの接続パラメータ

Zabbix APIでホスト一覧を取得

PHPライブラリを利用してホスト一覧を取得するには、request()メソッドを使います。
第1引数にはZabbix APIメソッド名、第2引数にはパラメーターを配列で指定します。

$zbapi->request($method, $params);

第1引数に設定するZabbix APIメソッドは沢山ありますが、今回はホスト関係のメソッドに絞ってご紹介します。

ホストメソッド説明
host.create新しいホストの作成
host.deleteホストの削除
host.getホストの検索
host.massaddホストに関連オブジェクトを追加する
host.massremoveホストから関連オブジェクトを削除する
host.massupdateホストから関連するオブジェクトを交換または削除する
host.updateホストの更新
Zabbix APIのホストメソッド一覧

ホスト一覧を取得するには、[host.get]メソッドを使用します。
ここでは単純にホストIDとホスト名のみを全て取得します。

$params = [
  "output" => ["hostid", "host"]
];
$zbapi->request('host.get', $params);

Zabbix APIを使えば、Zabbix管理インターフェースのフィルター機能のように、様々な絞り込みや出力内容を指定できます。
パラメーターについて詳しく知りたい方は公式サイトをご覧ください。

取得した値は連想配列で格納

パラメーターで指定したデータが取得できた場合は、result()メソッド連想配列として格納されます。

$zbapi->result();

取得できたデータをそのままデバッグ出力してみると、以下のように連想配列にデータが格納されているのがわかります。

array(10) {
  [0]=>
  array(2) {
    ["hostid"]=>
    string(5) "10084"
    ["host"]=>
    string(13) "zabbix-server"
  }
  [1]=>
  array(2) {
    ["hostid"]=>
    string(5) "10413"
    ["host"]=>
    string(14) "storage-server"
  }
  [2]=>
  array(2) {
    ["hostid"]=>
    string(5) "10414"
    ["host"]=>
    string(15) "database-server"
  }
  ・・・
}

処理の失敗について

また、データが取得できなかった場合は、result()メソッドの代わりに、error()メソッドエラーコードやエラーメッセージなどが格納されます。

$zbapi->result();

例えば、存在しないメソッドを指定した場合は、以下のようなデータが出力されます。

array(3) {
  ["code"]=>
  int(-32601)
  ["message"]=>
  string(17) "Method not found."
  ["data"]=>
  string(25) "Incorrect method "host."."
}

Zabbix APIからログアウト

最後は、logout()メソッドを使ったログアウトですが、特に意識しなくても自動的にログアウト処理が実行されるので省略しても構いません。
ただ、明示的にログアウトする必要がある場合のみ実行します。

$zbapi->logout();

【まとめ】全体の処理の流れ

これまでの処理の一連の流れをまとめたコードを記載します。
ここでは取得したホスト一覧データをそのままデバッグ表示していますが、実際には、結果を取得したを利用して、何かしらの処理が入ると思います。

<?php
// Zabbix API用のPHPライブラリを読み込む
require_once('/usr/share/php/zabbix/class.zabbixapi.php');

// Zabbix APIの接続設定
$url = 'http://localhost/zabbix/api_jsonrpc.php';
$user = 'Admin';
$password = 'zabbix';

// インスタンス化
$zbapi = new ZabbixApi($url, $user, $password);

// ログイン
$zbapi->login();

// ホスト一覧の取得
$params = [
  "output" => ["hostid", "host"]
];
$zbapi->request('host.get', $params);

// 結果やエラーをそのまま出力
echo '<pre>';
var_dump($zbapi->result());
var_dump($zbapi->error());
echo'</pre>';

// ログアウト
$zbapi->logout();

exit;

PHPライブラリを使うメリット

Zabbix APILinuxコマンドでそのまま利用する場合、データはJSON形式で扱われますが、PHPライブラリ配列に格納されますので、データの取扱が容易になることが最大のメリットです。

また、その他にも細かい処理を省略でき、コードが簡略化され視認性もアップします!
例えば、Zabbix APIログイン時にauthキーを受け取り、リクエストする際は必ずパラメーターにセットしなければなりませんが、PHPライブラリを利用するとClass内でauthキーを保持しているため、意識する必要はありません。

以上です。お疲れ様でした!
今後もZabbix API用のPHPライブラリの便利な使い方をご紹介していきます!


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA