- #5 Zabbix Java ゲートウェイ

概要

Zabbix 2.0では、「Zabbix Javaゲートウェイ」と呼ばれる新たなZabbixデーモンを導入することによって、JMXアプリケーションの監視のネイティブサポートが追加になりました。 Zabbix Java ゲートウェイは、Javaで書かれたデーモンです。Zabbixサーバがホスト上の特定のJMXのカウンタの値を取得したいとき、サーバは、対象のアプリケーションにリモートで問合せを行えるJMX管理APIを使用するZabbix Javaゲートウェイに問合せます。アプリケーションは追加でソフトウェアをインストールする必要はなく、ただコマンドライン上でDcom.sun.management.jmxremoteオプションで開始するだけです。

Zabbix Java ゲートウェイは、Zabbixサーバまたはプロキシからの接続を許可しており、「パッシブプロキシ」としてのみ使用可能です。Zabbixプロキシとは対照的に、Zabbixプロキシからも使用できます。(Zabbixプロキシは変更できません) それぞれのZabbix Javaゲートウェイへのアクセスは、Zabbixサーバ内またはプロキシの設定ファイル内で直接設定され、1つのZabbixサーバまたはZabbixプロキシに対して1つだけ、Zabbix Java ゲートウェイが設定できます。ホストにJMXエージェントタイプのアイテムや、他のタイプのアイテムがある場合は、JMXエージェントアイテムだけがZabbix Java ゲートウェイに引き渡されます。

Zabbix Javaゲートウェイ越しにアイテムを更新しなければならないときは、Zabbix サーバまたはZabbixプロキシは、Zabbix Java ゲートウェイに接続して値を要求します。Zabbix Java ゲートウェイがその値を順番に取得してサーバまたはプロキシに返します。 そういうものなので、Zabbix Java ゲートウェイはどの値もキャッシュしません。

Zabbix サーバまたはZabbix プロキシは、Zabbix Java ゲートウェイに接続する特定のプロセスイプで、StartJavaPollers オプションで制御されます。内部では、Zabbix Java ゲートウェイは、START_POLLERSオプションによって制御される複数のスレッドを開始します。 サーバサイドで、接続の時間がTimeoutの時間よりも長くかかる場合は、スレッドは終了されますが、Zabbix Java ゲートウェイは、JMXカウンタからの値の取得のためにビジーのままになる場合があります。

Zabbix サーバ またはZabbixプロキシは、よりよいパフォーマンスを得るために、要求を1つのJMXターゲットにできるだけ多く(アイテムの間隔に影響されます)まとめ、Zabbix Java ゲートウェイに対して1回の接続で送信しようとします。

StartJavaPollersは、START_POLLERSよりは少ないか、同じぐらいで持つことが推奨されています。そうしないと、入ってくる要求に対して、Zabbix Java ゲートウェイ中のいずれのスレッドも稼働できない場合があり得ます。

以下のセクションでは、JMX監視にZabbix Java ゲートウェイに使用するための、Zabbix Java ゲートウェイの取得と動作のさせ方、Zabbix サーバ(または Zabbix プロキシ)の設定方法、特定のJMXカウンタに対応するZabbix GUI内のZabbixアイテムの設定方法について解説します。

- Zabbix Java ゲートウェイの取得

Zabbix Java ゲートウェイを取得するには、2つの方法があります。1つはZabbix のウェブサイトからZabbix Java ゲートウェイのパッケージをダウンロードする方法、もう1つは、ソースからコンパイルする方法です。

- Zabbix のウェブサイトからのダウンロード

このオプションは、実際はまだ有効ではないのですが、 将来Zabbix のウェブサイトから、Zabbix Java ゲートウェイのアーカイブをダウンロードできるようになります。

- ソースからのコンパイル

Zabbix Java ゲートウェイをコンパイルするには、最初に ./configure のスクリプトを--enable-java オプションを付けて実行します。インストール先のパスとしてデフォルトの /usr/local 以外にする--prefix オプションを指定可能であることを憶えておいてください。なぜなら、Zabbix Java ゲートウェイをインストールすると、1つの実行可能なディレクトリだけでなく、ディレクトリツリー全体が作成されるからです。

$ ./configure --enable-java --prefix=$PREFIX

コンパイルを実行してZabbix Java ゲートウェイを1つのJARファイルにパッケージングするために、makeを実行します。このステップのために、あなたのパスでjavacjarを実行可能な状態にしておく必要があることに注意してください。

$ make

これで、zabbix-java-gateway-$VERSION.jarファイルが、src/zabbix_java/bin に作成されます。Zabbix Java ゲートウェイを、ディストリビューション・ディレクトリ内の src/zabbix_java から実行できたら、 Zabbix Java ゲートウェイの設定と 実行の説明に進みます。もし実行できない場合は、実行の権利を持っているかどうかを確認してから、make install を実行してください。

$ make install

- Zabbix Java ゲートウェイ ディストリビューション内のファイルの概要

あなたがどのような方法でZabbix Java ゲートウェイを取得したかには関係なく、$PREFIX/sbin/zabbix_java 配下のシェルスクリプト、JAR、設定ファイルの収集で終了させなければなりません。これらのファイルの役割を以下に要約します。

bin/zabbix-java-gateway-$VERSION.jar

Zabbix Java ゲートウェイの JARファイルです。

lib/logback-core-0.9.27.jar
lib/logback-classic-0.9.27.jar
lib/slf4j-api-1.6.1.jar
lib/org-json-2010-12-28.jar

Zabbix Java ゲートウェイと依存関係のあるもの:LogbackSLF4J、および JSON.org のライブラリ

lib/logback.xml  
lib/logback-console.xml 

Logbackの設定ファイルです。

shutdown.sh  
startup.sh 

Zabbix Java ゲートウェイを開始したり停止するのに便利なスクリプトです。

settings.sh 

上記の起動とシャットダウンのスクリプトのソースの設定ファイルです。

- Zabbix Java ゲートウェイの設定と実行

Zabbix Java ゲートウェイは、デフォルトではポート番号 10052をLISTENしています。 異なるポート上でZabbix Java ゲートウェイを実行することを計画している場合は、settings.sh スクリプトで指定可能です。この指定方法や他のオプションについては、Zabbix Java ゲートウェイの設定ファイルの解説を参照してください。

<note warning>ポート10052はIANAに登録されていません。 :::

設定ができたら、startup スクリプトを実行してZabbix Java ゲートウェイを開始することができます:

$ ./startup.sh 

同様に、もうZabbix Java ゲートウェイが必要なければ、shutdownスクリプトを実行して停止します:

$ ./shutdown.sh 

サーバやプロキシとは違って、Javaゲートウェイは軽量で、データベースが不要であることを憶えておいてください。

- Zabbix Java ゲートウェイを使用するためのサーバの設定

Zabbix Java ゲートウェイが動作するようになったら、Zabbixサーバに Zabbix Java ゲートウェイの場所を知らせる必要があります。そのためには、サーバ設定ファイルで、JavaGatewayパラメータとJavaGatewayPortパラメータを指定します。JMXアプリケーションが動作しているホストをZabbixプロキシで監視している場合は、かわりにプロキシ設定ファイルに接続パラメータを指定します。

JavaGateway=192.168.3.14
JavaGatewayPort=10052 

サーバは、デフォルトでは、JMX監視に関連するどのプロセスも開始しません。しかしそのプロセスを使用したい場合は、Java Poller のpre-forkされたインスタンスの番号を指定する必要があります。これは、通常のPollerやtrapperの指定と同じ方法で指定します。

StartJavaPollers=5 

いったんこれらの設定を完了したら、サーバまたはプロキシをリスタートすることを忘れないでください。

- Zabbix Java ゲートウェイのデバッグ

Zabbix Java ゲートウェイに何らかの障害がある場合や、フロントエンドのアイテムに関して表示されたエラーメッセージの説明が十分でない場合、Zabbix Java ゲートウェイのログファイルを調べたいと思われるかもしれません。 デフォルトでは、Zabbix Java ゲートウェイは、/tmp/zabbix_java.log ファイルに「情報」レベルの活動のログを残していますが、たまにその情報が十分ではなくて、「デバッグ」レベルの情報が必要になる場合があります。ロギングのレベルを上げるためには、lib/logback.xml ファイルを編集し、<root>タグのレベル属性を"debug"に変更します。

<root level="debug">
  <appender-ref ref="FILE" />
</root>

Zabbixサーバやプロキシと違って、logback.xmlの変更後にZabbix Java ゲートウェイを再スタートする必要はありません - logback.xml 内の変更は自動的に再実行されます。デバッグを完了したら、ロギングのレベルを「情報」に戻すことができます。

別のファイルまたはデータベースのように完全に異なるメディアにログを残したい場合は、 logback.xml ファイルを必要にあわせて調整します。詳細はLogbackのマニュアルを参照してください。

たまに、デバッグ目的で、デーモンとしてよりコンソールアプリケーションのようにZabbix Java ゲートウェイを開始すると便利な場合があります。それを行うためには、settings.sh スクリプト内の PID_FILE 変数をコメントアウトします。PID_FILEが省略されている場合は、startup.sh スクリプトは Zabbix Java ゲートウェイをコンソールアプリケーションとして開始し、Logbackにlib/logback-console.xmlファイルを使用させます。それはコンソールにログを残すだけでなく、ロギングレベル「デバッグ」を有効にもします。

最後に、Zabbix Java ゲートウェイは、ログをとるのにSLF4Jを使用しているので、適切なJARファイルをlibディレクトリ内に配置することによって、Logbackを、あたなが選択したフレームワークに置き換えることが可能であることを憶えておいてください。詳細は SLF4Jのマニュアル を参照してください。


本ページは2014/08/05時点の原文を基にしておりますので、内容は必ずしも最新のものとは限りません。
最新の情報は、英語版のZabbix2.2マニュアルを参照してください。