ZabbixAPIを使う作業環境
ZabbixAPIを使う際のZabbixServerのバージョン等は公式を参照するとし
本項では、ZabbixAPIにPOST/GETする際のJSONの処理環境について記載する。
REST APIを使え、JSONを処理できればそれでOKなのですが、この辺りは記載が曖昧なことが多いため私の使用環境を記載する。
基本はLinuxOS上より以下2つのツールを使用する
・json2zabbix.sh
上記ツールは以下のような概要仕様となっている。
・認証トークンを取得し、引数で指定したJSONに固定文字を認証コードに置き換えてZabbixAPIを発行する
最初に認証を使用するUserIdとPasswordを編集すれば、あとはJSONファイルを渡すだけでOKなため便利に使わせて頂いている。
しかし認証関係以外で2箇所変更して使用している。
・$json -> "$json"に修正し、アイテム名などにスペースがある場合にも正常に動くようにする。
・curlの末尾に | jq "." を 追加し、ZabixAPI応答のJSONを整形出力する(jqについては後述)
・jq
https://stedolan.github.io/jq/
シェルで使用できるJSONパーサ。やや書式に癖はあるものの、awkやsedくらいに使いこなせば非常にJSON処理が便利になるツール。
主に*.createなど、作成したJSONをZabbixAPIに送る前に書式チェックを行うために使用したり、*.getなどで取った値を任意にパースする場合に使用する。
詳細は公式Doc参照。
そして、item.get等はZabbixの公式DocのAPIページのものを使用すればとりあえず取れるものの
item.createなどはなんらかの一覧を変換しながらJSONをおこすようにしている。
JSONは改行や文字列外のスペースは無視して処理されるため、json2zabbix.shでの処理を前提に以下のようなJSONを作るようにしている。
{"jsonrpc": "2.0", "method": "item.create", "params": [
{"name": "TestItema", "key": "system.run[/usr/local/bin/a.com]","hostid": "10106", "type" :0, "value_type": 3, "delay": 60, "status": 1},
{"name": "TestItemb", "key_": "system.run[/usr/local/bin/b.com]","hostid": "10106", "type" :0, "value_type": 3, "delay": 60, "status": 1},
{"name": "TestItemc", "key_": "system.run[/usr/local/bin/c.com]","hostid": "10106", "type" :0, "value_type": 3, "delay": 60, "status": 1},
{"name": "TestItemd", "key_": "system.run[/usr/local/bin/d.com]","hostid": "10106", "type" :0, "value_type": 3, "delay": 60, "status": 1},
{"name": "TestItemay", "key_": "system.run[/usr/local/bin/ay.com]","hostid": "10106", "type" :0, "value_type": 3, "delay": 60, "status": 1},
{"name": "TestItemaz", "key_": "system.run[/usr/local/bin/az.com]","hostid": "10106", "type" :0, "value_type": 3, "delay": 60, "status": 1}
],"auth": "##TOKEN##","id": 1}
まず冒頭行をZabbixAPIで固定的に使用するものを記載し、paramsを配列で開いておく。
末尾行では配列を閉じ、authにjson2zabbix.shで認証トークン置換用の##TOKEN##を記載した行を書いておく。
中間の行については、CSVやExcel等のリストを作成しておき、サクラエディタで置換を駆使して各行を起こしている。
例えば、アイテム名, 実行ファイル名 という一覧を作成しておき、
・ /usr -> ", "key_": "system.run[/usr/ の置換
・各行頭に{"name": " を正規表現で追加。
・","hostid": "10106", "type" :0, "value_type": 3, "delay": 60, "status": 1}, を各行末に追加
という具合である。
そして、一番末尾のコンマをJSONの配列書式に合わせて手動削除し、
上記したJSONの行頭と行末を手動でペーストしてZabbixAPI用のJSONファイルとしている。
もちろんitem.create以外でもtrigger.create等でも同様の方式で作成している。
(詳細は別項とし、本項ではjson2zabbix.shとjq、それらに合わせたJSONの記載形式を主眼に記載している。)
あとは作成したファイルを
とすることでZabbixAPIを使用してZabbixアイテム作成等を行う。
ここのオペレーションの肝は「置換を駆使する」ことで、行数が10行でも100行でも作業量の差が出ないことが重要である。
また、JSONの書式になれておくことと、必要に応じて正規表現が使えることが望ましい。
やや曖昧ではあるが、「大量の作業をAPIでさくっと処理する」の肝はこの大量行の置換処理に掛かっている点をご理解頂きたい。