zabbix3.2のLoadble moduleをGoで開発できる環境を作る

Zabbixでは、自作したモジュールをZabbix ServerやZabbix Agentからロードすることが可能な仕様になっています。そこで、ここでは Go を使ってロード可能モジュール(Loadable modules)を作ってみます。
Zabbix3.2のモジュールを作った時に少しハマったのでメモしておきます 🙂

環境

項目 バージョン
OS CentOS 7.2
Zabbix 3.2
Go 1.8.1

GoのZabbixモジュールアダプタ

g2z

Zabbixのネイティブモジュールが作成できるGoバイディングである g2z を使用します。

ドキュメント

インストール

パッケージインストール

(1) 必要なパッケージをインストールします。

g2zインストール

(1) g2z をインストールします。Zabbixは3.2を使うのでバージョン3を指定しています。

g2zの修正

修正しなくてはいけない理由

Zabbix 3.2から ZBX_MODULE_API_VERSION_ONE から ZBX_MODULE_API_VERSION に変更されています。
そのため、g2zをインストールしてモジュールをビルドしZabbixへ組み込んだあとに起動すると以下のエラーが発生します。

Zabbixのソースコードを見てみましょう。

3.2以上でロード可能モジュールを開発する場合は、g2zでもこの修正が必要になります。

修正手順

(1) g2zの module.hZBX_MODULE_API_VERSION2 に修正します。

これが、一番簡単な修正方法かと思います。
または module.hZBX_MODULE_API_VERSION を新しく追加して go/src/gopkg.in/cavaliercoder/g2z.v3/module.gozbx_module_api_version 関数内を修正しても大丈夫だと思います。

ちなみに、本家にはプルリクがきている模様

モジュールのビルド及び組み込み

ここでは、g2zの例にあるソースをビルドしてZabbix Agentへ組み込んでみます。

(1) 以下のソースコードを使用します。

(2) ビルドします。

(3) モジュールを任意の場所へ保存します。ここでは /etc/zabbix/modules 配下へ保存します。

(4) Zabbix Agentへ組み込みます。

(5) Zabbix Agentを起動します。

動作確認

(1) 動作確認をしてみます。

(2) Discoveryのソースコード例を組み込んで実行してみました。

これで、3.2のモジュールが開発できるようになりました 🙂
(独り言)3.4はいつでるんやろ…

参考文献

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)