Zabbix通过JMX监控Java应用

Zabbix通过JMX(Java Management Extensions)可以对Java Application进行监控,Zabbix利用原生的Zabbix Java gateway,一个Java守护进程监控JMX应用。当Zabbix想要知道某个JMX counter当前的数据时,它只去询问ZabbixJava gateway,而gateway会去查询需要的数据,所有这些查询都是通过JMX管理API完成的。

使用时,一个Java应用不需要额外安装任何其他的软件,也不需要实现或扩展新的代码来处理Zabbix的查询,仅仅需要在Java 应用的配置文件中设置一些参数,支持远程JMX的监控。

这些参数主要有:

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=<你要设置的端口号>

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

例如:

java \

-Dcom.sun.management.jmxremote \

-Dcom.sun.management.jmxremote.port=12345 \

扫描二维码关注公众号,回复: 3950019 查看本文章

-Dcom.sun.management.jmxremote.authenticate=false \

-Dcom.sun.management.jmxremote.ssl=false \

-jar/usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar

上面的配置定义了Java程序使用12345端口监听来自本地的JMX的连接,并不需要身份验证和加密。如果你想从其他主机访问,需要配置 -Djava.rmi.server.hostname 参数。

在实际环境中从安全的角度考虑,需要设置身份验证和加密。具体设置步骤如下:

1、  启用身份验证并指定一个包含密码的文件。

-Dcom.sun.management.jmxremote.authenticate=true

-Dcom.sun.management.jmxremote.password.file=/etc/java-6-penjdk/management/jmxremote.password

jmxremote.password文件内容:

monitorRole <monitor-password-here>

controlRole <control-password-here>

2、  指定用户的配置文件。

-Dcom.sun.management.jmxremote.access.file=/etc/java-6-penjdk/management/jmxremote.access

jmxremote.access文件内容:

monitorRole readonly

controlRole readwrite

3、  启用SSL。

-Dcom.sun.management.jmxremote.ssl=true

绑定下面的参数:

-Djavax.net.ssl.keyStore=<你的keyStore >

-Djavax.net.ssl.keyStorePassword=<你的 keyStorePassword >

-Djavax.net.ssl.trustStore=<你的trustStore >

-Djavax.net.ssl.trustStorePassword=<你的trustStorePassword >

-Dcom.sun.management.jmxremote.ssl.need.client.auth=true

完整的例子如下:

java \

-Djava.rmi.server.hostname=192.168.3.14 \

-Dcom.sun.management.jmxremote \

-Dcom.sun.management.jmxremote.port=12345 \

-Dcom.sun.management.jmxremote.authenticate=true \

-Dcom.sun.management.jmxremote.password.file=/etc/java-6-openjdk/management/jmxremote.password\

-Dcom.sun.management.jmxremote.access.file=/etc/java-6-openjdk/management/jmxremote.access\

-Dcom.sun.management.jmxremote.ssl=true \

-Djavax.net.ssl.keyStore=<你的KeyStore> \

-Djavax.net.ssl.keyStorePassword=<你的KeyStorePassword> \

-Djavax.net.ssl.trustStore=<你的trustStore > \

-Djavax.net.ssl.trustStorePassword=<你的trustStorePassword > \

-Dcom.sun.management.jmxremote.ssl.need.client.auth=true \

-jar/usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar

-D参数需要写到你的应用或应用服务器的启动文件中,在完成上述的各项配置后,你的启动文件中将包含一些敏感的内容(keyStore和trustStore密码),因此需要保护好你的启动文件。

为了在Zabbix server使用JMX agent,还需要在Zabbix server中安装Java gateway。

# yum install zabbix-java-gateway

# systemctl enablezabbix-java-gateway

# systemctl start zabbix-java-gateway

如果你是编译源码安装的Zabbix server,一定要使用 --enable-java选项。

在zabbix_server.conf文件中进行配置。

# vi zabbix_server.conf

Java gateway = 127.0.0.1

Java Gateway Port = 10052

Start Java pollers = 5

不要忘记修改zabbix_server.conf文件后要重启Zabbixserver服务。

# systemctl restart zabbix-server

下面我们就可以配置一个JMX agent监控项,步骤如下:

1、  在Configuration --> Host页面中,单击Name列中的主机名称,例如Zabbix server,在主机配置页面Host标签下添加JMX接口配置,如下图3-10所示。

wKioL1kL7ebQRxmvAAArQa1kKwI260.jpg

图 3-10

2、  单击Update按钮保存主机的配置。

3、  创建一个新的监控项。

  • Name中填写监控项名称。

  • Type中选择JMX agent。

  • Key中填写你要监控的项目,格式为jmx[<object name>,<attribute name>]。例如:

jmx["java.lang:type=Memory","HeapMemoryUsage.used"]

  • Host interface中选择JMX接口。

  • 安装JMX控制台后为了安全,通常我们会设置一个登录控制台的用户名和密码,Zabbix中支持这种方式,在User name和Password中填写就可以了。

  • Type of information选择Numeric(unsigned)。

  • Data type中选择Decimal。

  • Unit中设置单位,如:B。

  • 其他参数可以保持不变,单击Add按钮保存。

如下图3-11所示。

         wKioL1kL7fnQp-uUAAD005Jz7RI710.jpg

猜你喜欢

转载自blog.csdn.net/ccy19910925/article/details/83274838
今日推荐