JMX監視について「ホストへの経路がありません」
お世話になっております
今回、Tomcat監視が必要となり新規でZabbixサーバを立てることになりました
Linux version:CentOS7
Zabbix version:3.0.3(導入時期によってAgentに3.0.4が混じっていることがある)
Tomcat Version:7.0.70
「改訂版 Zabbix統合監視実践入門」とネット上の情報でTomcatの構築とJMX監視
の構築を行ったのですが、ZabbixサーバにTomcatを検証で入れて動作確認できた
のに実際のサーバへの設定を行おうとするとホストの[JMX]のアイコンが赤くなり
「java.rmi.ConnectIOException: Exception creating connection to: [TomcatをインストールしたサーバのIPアドレス]; nested exception is:
java.net.NoRouteToHostException: ホストへの経路がありません」
と出てきます
zabbix-serverにあるzabbix-java-gateway.logでも
2016-08-03 10:14:20.784 [pool-1-thread-5] WARN com.zabbix.gateway.SocketProcessor - error processing request
com.zabbix.gateway.ZabbixException: java.rmi.ConnectIOException: Exception creating connection to: [TomcatをインストールしたサーバのIPアドレス]; nested exception is:
java.net.NoRouteToHostException: ホストへの経路がありません
at com.zabbix.gateway.JMXItemChecker.getValues(JMXItemChecker.java:97) ~[zabbix-java-gateway-3.0.4.jar:na]
at com.zabbix.gateway.SocketProcessor.run(SocketProcessor.java:62) ~[zabbix-java-gateway-3.0.4.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_101]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
Caused by: java.rmi.ConnectIOException: Exception creating connection to: [TomcatをインストールしたサーバのIPアドレス]; nested exception is:
java.net.NoRouteToHostException: ホストへの経路がありません
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:631) ~[na:1.8.0_101]
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) ~[na:1.8.0_101]
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) ~[na:1.8.0_101]
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130) ~[na:1.8.0_101]
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227) ~[na:1.8.0_101]
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179) ~[na:1.8.0_101]
at com.sun.proxy.$Proxy0.newClient(Unknown Source) ~[na:na]
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2430) ~[na:1.8.0_101]
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:308) ~[na:1.8.0_101]
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270) ~[na:1.8.0_101]
at com.zabbix.gateway.ZabbixJMXConnectorFactory$1.run(ZabbixJMXConnectorFactory.java:76) ~[zabbix-java-gateway-3.0.4.jar:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_101]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_101]
... 3 common frames omitted
Caused by: java.net.NoRouteToHostException: ホストへの経路がありません
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_101]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_101]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_101]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_101]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_101]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_101]
at java.net.Socket.connect(Socket.java:538) ~[na:1.8.0_101]
at java.net.Socket.(Socket.java:434) ~[na:1.8.0_101]
at java.net.Socket.(Socket.java:211) ~[na:1.8.0_101]
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) ~[na:1.8.0_101]
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148) ~[na:1.8.0_101]
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) ~[na:1.8.0_101]
... 15 common frames omitted
(ここまで)
のように表示され、JMX監視ができない状態です。
このサーバーは既に通常のZabbix Agentをインストールして監視を行っており、そちらのほうは正常に
稼働しています。
ルーティングの問題?JMXの設定の問題?zabbix-java-gatewayの設定の問題?
何が原因なのでしょうか、ご存じの方または同じような経験をされた方、ご教示いただけましたら幸いです
※追加情報※
ポートの情報ですが…
Tomcatのポートはデフォルトの「8080」
JMXのポートは「10080」
Zabbix Java Gatewayのポートはデフォルトの「10052」で
#firewall-cmd --list-all --zone=public での結果は
public (default, active)
interfaces: eno16777984
sources:
services: dhcpv6-client ssh
ports: 10080/tcp 10081/tcp 4008/tcp 4006/tcp 8080/tcp 6603/tcp 3306/tcp 10051/tcp 10050/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
(ここまで)
となっています
TNK - 投稿数: 4742
SELinuxは有効にされていますか?
有効にされているのであれば、
/var/log/audit/audit.log
などに何らかのログが出力されていないかを確認してください。
あと、記述して頂いたfilewalldの設定は、どのサーバー上での設
定ですか?
Zabbixエージェントを利用した監視はできているとのことですので、
Zabbix Java Gatewayを起動しているサーバーとTomcatを起動して
いるサーバー間で制限されていないか、
・Zabbix Java Gatewayを起動しているサーバー
・Tomcatを起動しているサーバー
両方のfirewalldの設定を再確認してみてください。
HERCULY - 投稿数: 37
TNKさま
ご指摘ありがとうございます
ご指摘の一つであったSELinuxですが今回は双方とも無効化するよう
になっていたのですが、Zabbix JavaGateway側のサーバが有効に
なっていました。
有効を無効化して(本来これではいかんと思うのですが…)直してみます
またファイアウォールの設定ですがZabbix Java GatewayサーバとTomcat
のいずれのサーバも同じポートを開けています。
(Active-Active設定の構築のため設定は同じにしています)
双方でクロスした感じで構築しているためfirewalldの設定は同一です
Zabbix Java Gatewayサーバ側のSELinuxの設定を無効化し、サーバを
再起動してて様子を見ています。
もし不足している情報がございましたらご教示ください
見てますが
HERCULY - 投稿数: 37
TNKさま
ご指摘ありがとうございます
ご指摘の一つであったSELinuxですが今回は双方とも無効化するよう
になっていたのですが、Zabbix JavaGateway側のサーバが有効に
なっていました。
有効を無効化して(本来これではいかんと思うのですが…)直してみます
またファイアウォールの設定ですがZabbix Java GatewayサーバとTomcat
のいずれのサーバも同じポートを開けています。
(Active-Active設定の構築のため設定は同じにしています)
双方でクロスした感じで構築しているためfirewalldの設定は同一です
Zabbix Java Gatewayサーバ側のSELinuxの設定を無効化し、サーバを
再起動してて様子を見ています。
もし不足している情報がございましたらご教示ください
見てますが
HERCULY - 投稿数: 37
自己レスです
なんとか自己解決できました。firewallの設定がおかしかったようでした。
Tomcat のCATALINA_OPTSでjmxremote.portを以下のように10080に
していました
# cat setenv.sh
#!/bin/sh
export CATALINA_OPTS="-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=10080
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
#
で、firewall-cmdで10080だけ開けたのですが、いろいろ調べていくと10080
だけを開けてもJMXはランダムにポートをとるようで
firewall-cmd --add-port=10080-65535/tcp --zone=public --permanent
でZabbixで監視できるようになりました。
皆様にはお目汚しして申し訳ありません。
参考までにご報告を御礼を兼ねて