ZabbixAPI共通項目

本項は以下ページを意訳したページとなる。
https://www.zabbix.com/documentation/3.0/manual/api/reference_commentary

JSONでは各項目に対して、name: value の形式で指定を行うが、ZabbixAPIで使用する各パラメータについて
少し詳細に記載をする。

item.get(指定アイテム取得)を例に取る。
https://www.zabbix.com/documentation/3.0/manual/api/reference/item/get
上記ページよりJSONを指定するが、ここで各パラメータ(params[]配列の子要素)に指定する内容である。

{
   "jsonrpc": "2.0",
  "method": "item.get",
  "params": {
    "output": "extend",
    "hostids": "10084",
    "search": {
      "key_": "system"
    },
    "sortfield": "name"
  },
  "auth": "038e1d7b1735c6a5436ee9eae095879e",
  "id": 1
}


まず留意するのはJSONの書式である「数値」と「文字列」である。

上記例では "id" の値である1のみダブルクォーテーションで括られていない。これは数値で指定していることを示す。
また "hostids" では "10084" を渡しているが、これはダブルクォーテーションで括られているため、文字列を指定していることを示す。

このパラメータが数値指定か文字列指定かなどを表すパラメータタイプはそれぞれAPIで使うmethodによって決められている。
このパラメータタイプは、各APIページのParametesの表に記載してあるType列がそれに該当する。
例えば、item.getのhostidsは String/Arrayであるため文字列指定なのである。


そして各データタイプは以下のとおり


・bool
true または falseを指定する。
尚、アイテムやトリガーの有効/無効はWeb画面上はOn/Offスイッチのようになっているが、ZabbixAPI上はStatusパラメータでIntegerタイプである点に注意。

・flag
こちらもboolのようであるが、nullなどの指定もある。(あまり使ったことないので詳細分かりません)

・integer
整数タイプ。ダブルクォーテーションで括らないようにする点に注意。

・float
浮動小数タイプ。ダブルクォーテーションで括らないようにすれば良いと思うが、使った記憶がないため詳細不明。

・string
文字列タイプ。ダブルクォーテーションで括る。hostidなど数字で構成された文字列に注意。

・text
文字列タイプ。stringとほぼ一緒だが最大文字列長が長い?

・timestamp
UNIXTIMEでのタイプスタンプ。数値で指定する。

・array
配列。他の要素と組み合わせられる。例えばhostidsのString/Arrayであれば文字列を配列で複数指定可能になる。
item.getでhostidsに複数のhostやtemplate(※)を指定すれば、それを一括で取得可能。
Arrayを使用する場合は、その要素を角括弧でJSONの配列形式にしておく必要がある。

・object
よくわかりません。

・query
クエリー式。一部ZabbixAPIではQueryタイプで受け付ける値が指定されているものがあるが、原則は以下の2つ。

extend
指定された内容を詳細展開する。例えばoutputパラメータにextendを指定すると実際のitemidやname、key_を展開して表示する。
またtrigger.getのselectItemsの場合であれば、無指定の場合トリガー条件式のアイテムキー部分がitemidで表示されるが
ここにextendを指定しておくと、item.key_の内容を展開して出力してくれる。

count
指定された内容をカウントした数値を返す。


以下は補足になるが
また、reference_commentaryページの下半分にはCommon "get" methd parametersというGET系のZabbixAPI共通指定可能パラメータがある。
https://www.zabbix.com/documentation/3.0/manual/api/reference_commentary

ここにあるsearchやsearchWildcardsEnabledについてはZabbixAPI使用対象の持っているデータ量に注意して使用することを勧める。
これは内部的にMariaDB(mysql)に対してそのままSQLのSelectクエリとなるが、当然データ量の多い箇所に大量の結果が出るような指定をすれば
DBへの負荷となるからである。
アイテムやトリガーなどはDBキャッシュに乗っている可能性も高いが、ヒストリなどを対象にする場合は適宜limitで5000などある程度の件数に
絞って実行する方が安全である。