右往左往ブログ

日々よりみち

ZABBIXのホスト自動登録機能でJMXの設定を行う

ZABBIXのホストの自動登録機能の問題点

Zabbixでのホストの自動登録機能は、Zabbixエージェントを導入したノードに、自動的にホストグループの組み込みやテンプレートのリンクを行うできる便利な機能です。これにより、はじめてZabbixエージェントを導入したノードに対しても、監視の初期設定を自動的に行うことができます。

が、通常ではJMXインターフェースは自動で認識されないという欠点があります。そのため、JMX関係の設定はホストの認識後に手動で設定する必要があります。また、それによってJMXを利用するテンプレートをリンクすることもできません。

ZABBIX APIを利用したカスタムスクリプト

そこで、ホストの自動登録機能を生かしつつJMX関係の設定(ホストへのJMXインターフェースの追加、JMX関係テンプレートのリンク)を行うために、ZABBIX APIを利用したカスタムスクリプトを自動登録機能に組み込みました。これにより、ホストはJMXインターフェースの追加やJMX関連テンプレートのリンクも自動で行うことができるようになっています。
zabbix-jmxsetting

なお、テンプレートのリンク用に、以下を利用しています。
Zabbix 2.0 Tomcat 7 JMX Template

設定

スクリプトの配置

上記から取得したzabbix-jmxsetting.shをZABBIXサーバ上の好きな場所に置きます。
今回は/usr/lib/zabbix/settingscripts配下に置きます。chmodで実行権を与えてください。

ホストの自動登録

まずは、通常通り、ZABBIXのホストの自動登録機能を利用します。
f:id:unchemist:20131103011738p:plain

カスタムスクリプトの設定

[アクションの実行内容]から、リモートコマンドを追加してください。

  • 実行内容のタイプ : リモートコマンド
  • ターゲットリスト : 現在のホスト
  • タイプ : カスタムスクリプト
  • 次で実行 : Zabbixサーバー
  • コマンド : /usr/lib/settingscripts/zabbix-jmxsetting.sh {HOST.HOST} {HOST.IP}

スクリプトの場所は、置いた場所に応じて適宜読み替えてください。

f:id:unchemist:20131103011746p:plain

実行結果

f:id:unchemist:20131103011750p:plain

新しいホストが登録されてしばらく待つと、上記の通りTemplate JMX Tomcat 7が追加され、JMXのアイコンも点灯していることが分かります。最初は登録されてなくて焦りますが、しばらく待って画面をリロードすると、遅れて点灯するはずです。

f:id:unchemist:20131103011754p:plain

ホストの詳細を見ても、JMXインターフェースが設定されていることが分かります。

注意事項

スクリプト内で、Template JMX Tomcat 7に決め打ちにしているので、あんまり汎用的ではないです。また、ZABBIX APIを利用する関係で、スクリプト内のユーザ名/パスワードをそれぞれの環境用に書き換える必要があります。

あと、ZabbixエージェントのインターフェースのIPとJMXインターフェースのIPが同じである場合でしか適用できないので、もしインターフェースが異なる場合は対応できません。この辺りは反省…。

あと、JSON形式の結果をパースするためにjqを利用しています。そのため、jqがZABBIXサーバにインストールされている必要があります。 jq


内部的な話

スクリプトの中身は、単にZABBIX APIを利用してJMXインターフェースの追加やテンプレートのリンクを行っているだけです。
結果はJSON形式なので、これをjqコマンドでパースして必要な値だけ取得し、加工しています。

ZABBIX APIを始めて利用して、最初はかなり戸惑いましたが、慣れるとかなり便利でした。APIを使っていろいろできそうです。
あとjqも物凄く便利です。JSON形式で返すZABBIX APIとはかなり相性がいいですね。