Zabbix JMX Tomcat 监控

Posted

技术标签:

【中文标题】Zabbix JMX Tomcat 监控【英文标题】:Zabbix JMX Tomcat monitoring 【发布时间】:2014-09-11 19:59:00 【问题描述】:

我一直在尝试设置 Zabbix 来监控我在 2 台不同的 Amazon EC2 机器上的 2 台 tomcat 服务器,但没有成功。 主机上的 Z 为绿色,但 JMX 为红色并出现这些错误 - ZBX_TCP_READ() 失败:[4] 中断的系统调用 - 其他错误 [111] 连接被拒绝 和许多这样的错误,一个接一个,从某种意义上说,我解决了一个错误,然后又看到一个新的错误弹出。

这些是一些假设 所有机器运行 Ubuntu 12.10 及更高版本服务器的 IP 地址: 66.55.12.120(运行 Zabbix 服务器 v2.2.4(修订版 46772)(2014 年 6 月 23 日))代理的 IP地址: 87.52.45.198(运行 Zabbix 代理 v2.2.2(修订版 42525)(2014 年 2 月 12 日))我的本地机器的 IP 地址: 76.89.54.111

这是我到目前为止所做的。

在服务器端: 1) 使用sudo apt-get install zabbix-server-mysql. 安装Zabbix_server 2)GUI、mysql数据库都已经安装配置好了。 3) 以下是我在文件中所做的仅有的 3 处更改 /etc/zabbix/zabbix_server.conf

  ... 
  JavaGateway=localhost
  JavaGatewayPort=10052
  StartJavaPollers=5
  ...

4) Zabbix Java 网关是使用sudo apt-get install zabbix-java-gateway.安装的 5) 以下是我在文件中所做的仅有的 3 处更改 /etc/zabbix/zabbix_java_gateway.conf

  ... 
  LISTEN_IP="127.0.0.1"
  LISTEN_PORT=10052
  START_POLLERS=5
  ...

在客户端: 1)使用安装Zabbix客户端 sudo apt-get install zabbix-agent 2) 以下是我在文件中所做的仅有的 3 处更改

  /etc/zabbix/zabbix_agentd.conf 
  ... 
  Server=66.55.12.120
  StartAgents=5
  ServerActive=66.55.12.120:10051
  Hostname=Security-test-JMX-EC2
  ... <br />

3) 主机名与在 GUI 上创建主机时提到的主机名相同。

我认为 IP 和端口存在一些问题。因此,这是从机器的 Amazon EC2 安全组获得的两台机器的出站规则

OUTBOUND RULES for SERVER SECURITY GROUP:
Type      Protocol  Port   Source           Reasoning
Custom-   TCP       8080   0.0.0.0/0
TCP Rule    

All ICMP  All       N/A    0.0.0.0/0    

Custom-   TCP       10052  27.52.52.128/32   For access from Agent
TCP Rule

Custom-   TCP       8081   76.84.120.130/32  To access Zabbix GUI from-
TCP Rule                                     -my local machine's web browser

Custom-   TCP       10051  27.52.52.128/32   As the agent responds to- 
TCP Rule                                     -the server on Port 10051TCP Rule-
                                             -Must allow inbound communications-
                                             - from the agent.

Custom-   TCP       11000  27.52.52.128/32   The agent's JMX reporting-
TCP Rule                                     -happens on port 11000(not on 12345).

OUTBOUND RULES for CLIENT SECURITY GROUP:
Type    Protocol Port   Source
HTTPS     TCP   443     0.0.0.0/0

Custom-   TCP   10050   66.55.12.120/32
TCP Rule

Custom-   TCP   10052   66.55.12.120/32
TCP Rule

Custom-   TCP   11000   66.55.12.120/32
TCP Rule

HTTP      TCP   80  76.89.54.111/32

Custom-   TCP   8080    76.89.54.111/32
TCP Rule

Custom-   TCP   8443    76.89.54.111/32
TCP Rule

我错过了什么?请指导我。 任何帮助表示赞赏。

谢谢 古瑟姆

【问题讨论】:

【参考方案1】:

如果可以,然后在 zabbix 主机上运行 VisualVm(可能使用隧道 X 会话),看看是否可以使用它连接到目标 JVM。如果你不能从那里连接,你将无法从 Zabbix 连接。

尝试使用以下 CATALINA_OPTS,替换为您希望 JMX 侦听的目标上的 IP:

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=falseom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<LOCAL_IP>"

这将禁用所有 JMX 安全性,因此请注意!

一旦你希望它连接起来,Zabbix 中的“Tomcat JMX”项也是不正确的!例如

Zabbix 默认不正确:

jmx["Catalina:type=GlobalRequestProcessor,name=http-8080",bytesReceived]

正确输入:

jmx["Catalina:type=ThreadPool,name=\"http-bio-8080\"", bytesReceived]

注意转义的引号和错误的线程名称。将 Mbeans 插件添加到 VisualVM,并使用它来浏览目标 VM 上的 MBean,并检查 Zabbix 名称。

它最终确实可以工作,但设置起来确实很痛苦。然而,Zabbix 是少数完全支持 JMX 的开源监控工具之一!

【讨论】:

我没有安装 VisualVm,​​而是使用已经安装在我的系统上的jconsole 进行连接。 jconsole 出现在 JDK 的标准部分(来源:en.wikipedia.org/wiki/JConsole)。 -Djava.rmi.server.hostname=&lt;LOCAL_IP&gt; 成功了。不错! 你的回答拯救了我的一天。非常感谢!!【参考方案2】:

默认情况下,JMX 不能很好地与防火墙配合使用。您可能会发现 Zabbix tracker 上的相关错误报告很有用:ZBX-5326 和 ZBX-6815。第一个包含可能对您有用的 Tomcat 解决方法。

【讨论】:

【参考方案3】:

@gvatreya 写道:

服务器:(运行 Zabbix 服务器)

代理:(运行 Zabbix 代理)

看起来您还必须在安装它的主机上启动 Zabbix Java 网关(它是一个守护进程/服务)。

我的配置如下:

服务器:(运行 Zabbix 服务器,Zabbix Java 网关)

代理:(运行 Zabbix 代理)

我认为可以将其安装在专用主机上。

【讨论】:

【参考方案4】:

您是否尝试将-Djava.net.preferIPv4Stack=true 添加到 VM 选项中?

【讨论】:

这有什么帮助?它有什么作用?有参考吗? 如果您在 RHEL/CentOS 7.x 上使用 Java 8,端口 10051/10052 将监听 tcp6 堆栈。通过强制 tcp(4) 并在 firewalld 中打开端口,您的代理(例如 zapcat)将正确连接到服务器。【参考方案5】:

为了让它工作,将下一个 java_opts 添加到你的 tomcat 启动脚本中

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.port=2345 
-Dcom.sun.management.jmxremote.rmi.port=12345 
-Djava.rmi.server.hostname=<tomcat_hostname>

【讨论】:

以上是关于Zabbix JMX Tomcat 监控的主要内容,如果未能解决你的问题,请参考以下文章

zabbix监控通过jmx监控tomcat的配置过程

zabbix 基于JMX的Tomcat监控

zabbix jmx监控tomcat 无数据显示

zabbix 3.0 利用jmx监控 tomcat

Zabbix JMX Tomcat 监控

zabbix通过jmx监控tomcat