Edited at

Zabbix APIをたたく (1.8, 2.0)

More than 5 years have passed since last update.

評価したいんだか酷評したいんだか良くわからないタイトルです


Zabbix APIって何

Web上で出来る作業の大方をプログラム上からも行えるようにする、というものです。

ただし全て出来るわけではありません。


Web items cannot be deleted via the Zabbix API.


Web itemsというのは(調べついてませんが)こういうのですね

https://www.zabbix.com/documentation/2.0/manual/web_monitoring/items

基本的には数値周りの監視の設定をホスト追加、アイテム追加とか出来るのが最低ラインと思われ、そこはできます。UIをウィジェット・ガジェット的に奪ってくるとかは出来なそう。


ドキュメント

公式はこちら

野良がこちら

一見すると簡単そうです。ただ、コーナーケースでちょっと頭が痛いです


基本的には

JSONでやりとりします。


  • Web APIでAPI accessを許すユーザを定義

  • そのユーザ名とパスワードでJSONやり取りして credential を得る

  • credential をJSONに入れて、その上でデータをリクエストして得る

単純です。当然ですがJSONは生でトラフィックを駆け巡るのでプロダクションではhttps必須にするほうが良いかもしれません。

なお、そのまんまJSONを構築するのはめんどいのでライブラリがそれなりにあります。PythonではZabbix APIというRubyあたりのものをポーティングしたのがまぁまぁ。まぁまぁ

https://github.com/gescheit/scripts/tree/master/zabbix

いや、なんというか、紹介サイトではメジャーなものがないのか複数Zabbix APIを名乗るのが併記されてましたん。パッケージとかになってるレベルでもないようですね。

あ、タイポみっけた


出会った問題

枝葉末節です。


  • 1.8はドラフト段階とされています。何が起きてもあんまり文句言えなそう

  • 1.8と2.0でAPIの構成が違います

  • 公式のドキュメントが雑です。1.8は非常に雑です

  • 公式ドキュメントが嘘つきます

  • エラー番号が特に1.8では全く不親切です

とはいえ、1.8は現在安定して使われているので、APIもそこそこ動作すると期待して良いのでしょう。良いんだよね!

具体的にはこういうのが問題になります


  • 1.8がAPI versionで1.3と返してきたりするんですが

  • 引数不足とサーバ側でのkey_の重複 (重複登録はめーなの) のエラーメッセージが全く同じってどういう……

  • 世の中の例が 「2.0でもウゴク気がするよ!」と書いてあって例が1.8に全面依存というのはでっでう……(もちろん 2.0で動かない)

  • みんなして item を get する例で満足してて create する例があんまりない (この部分、1.8と2.0で動作がびみょーに違う)

追記: こんなの見つけた。ドキュメント上でbooleanを受け付けると書いてあるのに実態は 1/0 で受け付けてたという例。こういうバグは結構あると予想されます。 http://www.zabbix.jp/node/2261


例を公開しといた

https://github.com/dmiyakawa/zabbix_api_examples

汎用ライブラリを、と言いたいところですが、まず大本のツールが大変柔軟であるため、方向性がはっきりしないと汎化する意味がないこと、また1.8と2.0でアーキテクチャが違う部分が見受けられ怪しいこと、最後にエラー時の唯一の情報の出処と思われるエラーメッセージが破綻していること等を考えるとなかなか大変そうです。Zabbix API (Rubyの?) のヤツはそういう意味では十分良いと言えます。これ以上隠す意義はないね。interfaceidとか、うざいね

自分の目的にぴったり合う抽象化レベルを考えるのが良いですかね。あと、個別のエラーメッセージが実はどういう真意を持ちうるのかについてのノウハウは持ってると良いと思います。