zabbix提供了一个Java gateway的应用去监控jmx(java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

一. Zabbix 的JMX监控架构

一:部署环境

Centos   6.7Zabbix     3.0.3Tomcat     7.0.55

服务端配置

1、安装jdk(版本1.7.0_79)

JDK 各自的版本7.0 还是8.0 版本官网下载:JDK

我这里也上传了7.0.67 版本的和8.0版本的jdk源码包:

7.0JDK源码包

8.0JDK源码包

并上传到zabbix server

直接解压下载下来的包到自定义的目录:

tar -zxvf jdk1.7.0_67.tar.gz -C /srv/

安装成功之后添加系统环境变量

cd /etc/profile.d

vim java.sh

export JAVA_HOME=/srv/jdk1.7.0_67

export CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"

export PATH=$PATH:$JAVA_HOME/bin

使配置生效

source /etc/profile

安装与配置比较简单。执行java -version命令,出现类似界面表示成功。

java -version

java version "1.7.0_67"Java(TM) SE Runtime Environment (build 1.7.0_67-b01)Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

如果出现问题,查看下环境变量是否设置。

2、安装Zabbix-Java-gateway

Zabbix2.0起添加了支持用于监控JMX应用程序的服务进程,称为“Zabbix-Java-gateway”,它是用java写的一个程序。

有两种方法可以安装Zabbix-Java-gateway,第1种是编译安装zabbix时添加--enable java参数。第2种是单独安装,步骤如下:

# tar zxvf zabbix-3.0.2.tar.gz
# cd zabbix-3.0.2# ./configure  --enable-java  --prefix=/data/zabbix/zabbix_java  #/data/zabbix是我的zabbix安装目录

# make && make install

3、修改Java-gateway的配置文件并启动它

配置文件单独安装的路径为/etc/zabbix/zabbix_java_gateway.conf

# 监听地址
LISTEN_IP=”0.0.0.0″
# 监听端口
LISTEN_PORT=10052
# PID_FILE文件
PID_FILE=”/var/run/zabbix/zabbix_java.pid”
# 开启的工作线程数
START_POLLERS=5

启动zabbix-java-gateway:

service zabbix-java-gateway start

4、修改zabbix_server的配置文件并重启

修改zabbix-server的配置,编辑/etc/zabbix/zabbix_server.conf ,修改下面几个参数:

# JavaGateway的服务器IP地址
JavaGateway=192.168.89.204
# JavaGateway的服务端口
JavaGatewayPort=10052
# 从javaGateway采集数据的进程数
StartJavaPollers=5

配置文件修改后,重启zabbix-server:

service zabbix-server restart

好,现在zabbix-java-gateway就配置好了。

以上步骤,服务端配置就已经完成

客户端配置

1、 添加tomact中JMX的参数

编辑tomcat服务中bin目录下的catalina.sh

将以下参数,添加到CATALINA_OPTS的变量中:

-Djava.rmi.server.hostname=本地IP地址  
-Djavax.management.builder.initial= 
-Dcom.sun.management.jmxremote=true   
-Dcom.sun.management.jmxremote.port=12345  
-Dcom.sun.management.jmxremote.ssl=false  
-Dcom.sun.management.jmxremote.authenticate=false

2.下载测试工具cmdline-jmxclient-0.10.3.jar

cmdline-jmxclient-0.10.3.jar为一个测试工具,可用来测试jmx是否配置正确,下载cmdline-jmxclient-0.10.3.jar(下载到任意目录)

wget http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar

3.验证tomcat中JMX配置是否生效

在本机上执行

java -jar /tmp/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=Memory NonHeapMemoryUsage

如果有如下回显表示jmx配置正确,如不正确,请检查配置,看下端口启动是否正常,server.xml 配置。

07/22/2016 14:45:28 +0800 org.archive.jmx.Client NonHeapMemoryUsage:

committed: 80347136

init: 24576000

max: 136314880

used: 46634984

二、导入模板到zabbix,并关联到主机,添加监控

选择配置:主机-模板-选择-模板-:
Template JMX Tomcat
Template JMX Generic


从网上下载了一个不错的模板,导入后如下:


导入模板以后主机添加端口:

然后查看图形:

就有了。

三、如何监控单主机多个tomcat

监控多个tomcat实例,网上的详细的配置文档很少,几乎没有。比较好的办法是使用自动发现,但刚使用zabbix,来不及研究,所以采用笨法,修改模板、监控项、图形来达到最终目的。
关键配置:
1、添加主机时添加多个jmx端口

2、修改监控项、键值
在同一主机上,zabbix不允键值重复,但是监控的项目是一样的,不可能键值写的不重复,经过几番搜索,找到方法如下:
只要在箭头处添加1个空格就可以,也可以是多个。(注意位置不要错,在逗到后面)

剩下的就是体力活了,克隆监控项、修改监控项、克隆图形、修改图形。。。
以下是两个tomcat实例的监控项:

多个tomcat在一台主机上面最后的监控效果如下:

编写自动发现端口脚本

[root@localhost scripts]# cat /etc/zabbix/scripts/jmx_discovery.sh

#!/bin/bash

# function:monitor tcp connect status from zabbix

source /etc/bashrc >/dev/null 2>&1

source /etc/profile >/dev/null 2>&1

jmx_port_discovery () {

jmx_port=($(cat /etc/zabbix/scripts/java.txt|cut -d "|" -f2))

Tomcat_Name=($(cat /etc/zabbix/scripts/java.txt|cut -d "|" -f1))

printf '{\n'

printf '\t"data":[\n'

for((i=0;i<${#jmx_port[@]};++i))

{

num=$(echo $((${#jmx_port[@]}-1)))

if [ "$i" != ${num} ];then

printf "\t\t{ \n"

printf "\t\t\t\"{#JMX_PORT}\":\"${jmx_port[$i]}\",\n"

printf "\t\t\t\"{#JAVA_NAME}\":\"${Tomcat_Name[$i]}\"},\n"

else

printf "\t\t{ \n"

printf "\t\t \n"

printf "\t\t\t\"{#JMX_PORT}\":\"${jmx_port[$i]}\",\n"

printf "\t\t\t\"{#JAVA_NAME}\":\"${Tomcat_Name[$i]}\"}]}\n"

fi

}

}

case "$1" in

jmx_port_discovery)

jmx_port_discovery

;;

*)

echo "Usage:$0 {jmx_port_discovery}"

;;

esac

编写/etc/zabbix/scripts/java.txt文件,内容如下:

[root@localhost scripts]# cat /etc/zabbix/scripts/java.txt

Tomcat_442|8880

Tomcat_8591|8881

注:其实这里有个弊端,不太智能,也就是需要把监控的jmx端口和相关服务名称写到这个文本里去,这里还需要网友提供一个更可靠的方法,还请大家不要栗色指教。

编写jmx监控配置文件


[

[root@localhost ~]# cat /etc/zabbix/zabbix_agentd.conf.d/discovery_java_status.conf

UserParameter=java.jmx.discovery,/etc/zabbix/scripts/jmx_discovery.sh jmx_port_discovery

UserParameter=java.HeapMemoryUsage.status[*],/usr/local/jdk1.7.0_71/bin/java -jar /etc/zabbix/scripts/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory HeapMemoryUsage 2>&1|grep $2|cut -d " " -f2

UserParameter=java.NonHeapMemoryUsage.status[*],/usr/local/jdk1.7.0_71/bin/java -jar /etc/zabbix/scripts/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1|grep $2|cut -d " " -f2

UserParameter=java.LoadClass.status[*],/usr/local/jdk1.7.0_71/bin/java -jar /etc/zabbix/scripts/cmdline-jmx


一开始zabbix监控tomcat 一路顺畅,可是到测试正不正常时候,返回拒绝连接,第一时间想到就是配置有问题:

我是参考这个解决了。

zabbix大神 他的博客blog:https://blog.cactifans.com

本文出自http://blog.csdn.net/Hu_wen/article/details/53587250?locationNum=14&fps=1

http://www.cnblogs.com/Eivll0m/p/5446311.html