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のホストの自動登録機能を利用します。
カスタムスクリプトの設定
[アクションの実行内容]から、リモートコマンドを追加してください。
- 実行内容のタイプ : リモートコマンド
- ターゲットリスト : 現在のホスト
- タイプ : カスタムスクリプト
- 次で実行 : Zabbixサーバー
- コマンド :
/usr/lib/settingscripts/zabbix-jmxsetting.sh {HOST.HOST} {HOST.IP}
スクリプトの場所は、置いた場所に応じて適宜読み替えてください。
実行結果
新しいホストが登録されてしばらく待つと、上記の通りTemplate JMX Tomcat 7
が追加され、JMXのアイコンも点灯していることが分かります。最初は登録されてなくて焦りますが、しばらく待って画面をリロードすると、遅れて点灯するはずです。
ホストの詳細を見ても、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とはかなり相性がいいですね。