ZabbixAPIを使う作業環境

ZabbixAPIを使う際のZabbixServerのバージョン等は公式を参照するとし

本項では、ZabbixAPIにPOST/GETする際のJSONの処理環境について記載する。

 

REST APIを使え、JSONを処理できればそれでOKなのですが、この辺りは記載が曖昧なことが多いため私の使用環境を記載する。

 

基本はLinuxOS上より以下2つのツールを使用する

・json2zabbix.sh

github.com

上記ツールは以下のような概要仕様となっている。

・認証トークンを取得し、引数で指定したJSONに固定文字を認証コードに置き換えてZabbixAPIを発行する

最初に認証を使用するUserIdとPasswordを編集すれば、あとはJSONファイルを渡すだけでOKなため便利に使わせて頂いている。

しかし認証関係以外で2箇所変更して使用している。

・$json -> "$json"に修正し、アイテム名などにスペースがある場合にも正常に動くようにする。

curlの末尾に | jq "."  を 追加し、ZabixAPI応答のJSONを整形出力する(jqについては後述)

 

・jq

https://stedolan.github.io/jq/

シェルで使用できるJSONパーサ。やや書式に癖はあるものの、awksedくらいに使いこなせば非常に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##を記載した行を書いておく。

 

中間の行については、CSVExcel等のリストを作成しておき、サクラエディタで置換を駆使して各行を起こしている。

例えば、アイテム名, 実行ファイル名 という一覧を作成しておき、

・ /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の記載形式を主眼に記載している。)

 

あとは作成したファイルを

bash json2zabbix.sh xxxx.json

とすることでZabbixAPIを使用してZabbixアイテム作成等を行う。

 

ここのオペレーションの肝は「置換を駆使する」ことで、行数が10行でも100行でも作業量の差が出ないことが重要である。

また、JSONの書式になれておくことと、必要に応じて正規表現が使えることが望ましい。

 

やや曖昧ではあるが、「大量の作業をAPIでさくっと処理する」の肝はこの大量行の置換処理に掛かっている点をご理解頂きたい。