忍者ブログ

IT-Note

インフラ屋さんのメモ書き

ZabbixのAPIを使うVBAを作り直していく_02

Zabbix APIを使ったツール作成。第二回です。

一回目の記事へのリンク

前回も書きましたが、基本的にはツールはExcel上のVBAを使います。
なので、システム要件としては「Excelマクロが使える環境であること」であり、
ターゲットはWindows端末を前提としています。
Zabbix API関係の記事を探すとどうしてもWebツール開発者の方の記事が多くて、
phpスクリプトやcurlの例は多いんですが、運用ツールっぽい扱いのものが少ないんですよね。
自分もいろいろと調べる際に苦労しましたので、
利用OSがWindowsの方の参考になればいいなと思ってます。

今回は「(1)Zabbix APIを使うための、HTTPのPOSTメソッド」を中心に「(3)Zabbix APIとSESSION_ID」の要素も少し含めて書いていきます。


ここでは、HTTPリクエスト用の機能をどのように使うのか、という点について整理をします。
(VBAのコード自体は別記事に書きます。)
先に使い方を考えて、あとで作る時のイメージにします。

Zabbixは、基本的にリクエストはすべてHTTPのPOSTで行います。
ということは、最もよく呼び出され、使いまわしが行われる機能となります。
なので、色々と応用が利くように作りたいところです。

いきなり順番がおかしいと言われそうですが、
(1)(3)は基本的に同じ内容と言えます。
基本的には、以下の3点のアクションを行います。
[1]HTTPのオブジェクトを生成する
[2]リクエスト文字列を組み立てる
[3]オブジェクトに対し、リクエスト文字列を与え結果をレスポンスとして取得する

(1)と(3)の違いは、この中の[2]と[3]の部分のみです。
[2]では、リクエスト文字列の中身が異なってきます。
[3]では、返ってくる結果(の書式)は変わりません。そのレスポンス結果の使い方が異なってきます。

処理/中身 (1)一般系 (3)ログイン系 備考
[1]HTTPのオブジェクト生成 APIのURL APIのURL 差分なし
[2]リクエスト文字列 リクエストメソッド、オプション、SESSION_ID ログインメソッド、ユーザID、パスワード ログイン用の個別メソッド
[3]レスポンス結果 各種データ SESSION_ID

(1)の[2]の中にSESSION_IDの情報が必要となってきます。
そのため、原則としては(3)をやってSESSION_IDを取得した後に、
(1)の通常リクエストを行うことになります。
「SESSION_ID」が使いまわせるなら毎回(3)を行う必要もないのですが、
長期間にわたりSESSION_IDが有効であるというのも考え物です。
以下のフォーラムにも記載があったのですが、
自動ログアウトを設定しないと1年は同じSESSION_IDが使えるとのこと。
…ちょっと危険ですね。

Zabbix APIの認証キーについて (Zabbixフォーラム)

なので、Zabbix側の環境としては、
・API専用のユーザを作成する
・API専用ユーザはGUIログインをさせず、自動ログアウトの時間を短めにする
としたうえで、都度(1)の前に(3)をする、というのが良さそうです。



上記をまとめると、
(1)でも(3)でもスクリプト(関数)を流用できるようにするためには、
以下のような関数を作ると良さそうです。
・リクエストするメソッドを含めた文字列を組み立てて値渡しで呼び出す。
・レスポンス結果は関数外で加工する形として関数の戻り値として戻す。

参考まで、レスポンス結果はJSON形式で返ってきますので、
色々と加工をするためにVariant型で受ける必要があります。


次の記事