WildflyのJVM監視はtomcatと使用するプロトコルが異なっている。
そのためソースコードに一部修正&makeする必要がある。
zabbix-serverなど全てをソースからコンパイルする方法もあるが、面倒であったり稼働中の
zabbixにJMX監視を追加する場合などを想定して、必要な部分だけコンパイル&置換して対応する。
1: Zabbixバイナリ一式のインストール
・MySQLやJavaのインストール等については通常通り
・# yum -y install zabbix-server zabbix-agent .... zabbix-java-gateway
※ZabbixServerは別サーバ稼動しており、java-gatewayのみインストールする場合、
MySQLのインストールやyumによるzabbix-serverのインストールは不要。
2: Zabbixソースコードの入手
・http://www.zabbix.com/jp/download よりソース一式ダウンロードしてtar展開する。
・# cd ***/zabbix-3.0.7/src/zabbix_java/src/com/zabbix/gateway
3: ソースコードの修正
修正対象ファイル: JMXItemChecker.java
[修正前]
url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + conn + ":" + port + "/jmxrmi");
[修正後]
Integer remoting = new Integer("
7777");
int retval = remoting.compareTo(port);
if (retval == 0){
url = new JMXServiceURL("service:jmx:remoting-jmx://" + conn + ":" + port);
}else{
url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + conn + ":" + port + "/jmxrmi");
}
これは zabbix-java-gateway⇔JVM 間の通信ポートが"7777"だったら"service:jmx:remoting-jmx://~"、
それ以外の場合には従来どおり"service:jmx:rmi:///jndi/rmi://~"を使うようにする。
つまり、tomcatのJVM監視に使用するポートと別にすると共に事前にポート番号を決めておく必要がある。
※Wildfly専用のgatewayにするのであれば、if文による分岐は不要。
→ポート番号の縛りも無くなる
4: make
・# cd ***/zabbix-3.0.7
・# ./configure --enable-java
・# make
5: ファイルの置換
yumでzabbixをインストールした場合、おそらく /usr/share/zabbix-java-gateway にインストールされている。
このディレクトリ配下をコンパイルしたものに置換する。
6: クラスライブラリのコピー
{wildflyのインストールディレクトリ)/bin/client/jboss-client.jar を
/usr/share/zabbix-java-gateway/lib にコピーする。
7: Wildfly側の設定
Wildflyのconfigファイル(standalone.xml等)を修正する。
・management-interfaceの追加
[修正前]
<management-interfaces>
<http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
<socket-binding http="management-http"/>
</http-interface>
</management-interfaces>
[修正後]
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket-binding native="management-native"/>
</native-interface>
<http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
<socket-binding http="management-http"/>
</http-interface>
</management-interfaces>
・socket-bindingの追加
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> ~ </socket-binding-group>に次の1行を追加
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:7777}"/>
8: zabbix-server側でのzabbix-java-gateway設定
/etc/zabbix/zabbix_server.conf で下記を設定
・JavaGateway= (zabbix-java-gatewayが稼動しているアドレス)
・JavaGatewayPort= (zabbix-server ⇔ zabbix-java-gateway の通信ポート)
・StartJavaPollers= (JavaPollerの数 :0以外を指定)
zabbix-serverを再起動(# systemctl restart zabbix-server)
9: zabbix-java-gatewayのservice追加
・# systemctl enable zabbix-java-gateway
・# systemctl start zabbix-java-gateway
※zabbix_java_gateway.logに "The protocol 'remoting-jmx' is deprecated, instead you should use 'remote'."とwarningメッセージが出るが、バグなので無視してOKとのこと。
10: Zabbixの設定
Zabbixのホスト設定における JXM Interfaces にPort=7777としてインターフェースを追加する
11: Itemの追加
手っ取り早く動作確認するのであれば"Template JMX Generic"あたりのテンプレートをHostに適用すると、"mem Heap Memory used"などのItemを取得できる。
※Item設定で"User name","Password"にはWildflyのAdministratorアカウントのID/Passを設定すること
※Java8以降ではPermanent領域が無くなっているので、取得できなくても慌てないこと