建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

Zabbix监控多实例Tomcat(Zabbix配置监控项及聚合图形的实例代码)

GG网络技术分享 2025-03-18 16:14 47


Zabbix监控多实例Tomcat

监控原理图

1. 监控步骤和设置

1.1监控端设置

如果add-service编写正确,并且所有需要监控的Tomcat位置固定,直接运行脚本,完成监控端的设置.重启zabbix-agent和Tomcat即可.监控还需要用到jar包,将此包上传到/lib下即可.
cmdline-jmxclient-0.10.3

如果不用脚本运行,可以如下设置:

在zabbix_agent.conf最后加入以下内容

UserParameter=java.jmx.discovery[*],/usr/local/zabbix/etc/discover_jvm.sh #这个是你discove_jvm.sh脚本放置的位置

UserParameter=java.Runtime.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.0.195:$1 java.lang:type=Runtime $2 2>&1 |grep $2 |awk \'{print $NF}\' #jar包放置的位置.这里统一放置到 /lib下

UserParameter=java.Memory.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.0.195:$1 java.lang:type=Memory $2 2>&1 |grep $2 |awk \'{print $NF}\'

UserParameter=java.System.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.0.195:$1 java.lang:type=OperatingSystem $2 2>&1 |grep $2 |awk \'{print $NF}\'

UserParameter=java.HeapMemoryUsage.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.0.195:$1 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep $2 |awk \'{print $NF}\'

UserParameter=java.NonHeapMemoryUsage.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.0.195:$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep $2 |awk \'{print $NF}\'

UserParameter=java.LoadClass.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.0.195:$1 java.lang:type=ClassLoading $2 2>&1 |awk \'{print $NF}\'

UserParameter=java.Threading.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - 192.168.0.195:$1 java.lang:type=Threading $2 2>&1 |awk \'{print $NF}\'#这里的IP是你要监控的主机的IP.

当然不想写到zabbix_agent.conf文件中,可以新建tomcat.conf放置到/etc/zabbix/zabbix_agentd.conf.d中#如果是默认安装的zabbix-agent(yum安装),如果是在源码安装,找到你的安装位置.

在catalina.sh中增加:# ----- Execute The Requested Command -----------------------------------------在才此处添加如下内容

export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote\"

export CATALINA_OPTS=\"$CATALINA_OPTS -Djava.rmi.server.hostname=192.168.0.195\"#客户端IP

export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=12346\"

export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false\"

export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false\"

设置的JMX端口.这里需要特别注意,如果是多个实例监控,不用脚本配置,手动配置时候,要和discover_jmx.sh获取到的端口匹配上,就是每个Tomcat都有自己端口.可以在本地运行discover_jmx.sh和这里匹配下.

以上配置以后重启zabbix-agent和Tomcat.

1.2 web端设置

服务器主要就是导入监控模版这里我在网络上模版基础上增加监控信息,主要是GC和堆内存详细信息。tomcat模版

导入模版

添加的监控模版

在创建监控主机后,添加上面的监控模版.

连接监控模版

看到发现项正常


看到这里启用,就是正常的了.
如果出现报错,比如说不是json格式等,那么是你的discover_jmx脚本获取的值有问题.或者你在zabbix_agent.conf第一个UserParameter=java.jmx.discovery[*],/usr/local/zabbix/etc/discover_jvm.sh配置项错误,并且disconver_jvm.sh所属是否为zabbix等。可以zabbix-server使用如下命令测试,如何使获取到值并且没有例如权限报错说明获取正确:
/usr/local/zabbix-3.0.3/bin/zabbix_get -s 192.168.199.35 -p10041 –k java.jmx.discovery #IP和端口是监控端的信息

2. dicover-jmx脚本编写 (需要根据具体环节修改脚本)

#!/bin/basht_datadir=`find 安装tomcat位置 -name catalina.sh|awk -F \"/bin/catalina.sh\" \'{print $1}\'`

tomcat_no=`find 安装tomcat位置 -name catalina.sh|awk -F \"/bin/catalina.sh\" \'{print $1}\'|wc -l`

# 这里一点要注意和add-service脚本填的一样,配置端口的顺序才能一样。

n_port=12345 #配置监控初始端口,也是和addservice匹配上,否则会找不到。

i=1

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

for tomcat in $t_datadir #输出JSON文件 do

t_service=`echo \"$tomcat\"|awk -F\"/\" \'{print $(NF-0)}\'` #这里的NF-0不能提提取tomcat服务名,则需要修改为:NF-1。

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

printf \"\\t\\t{ \\n\"

printf \"\\t\\t\\t\\\"{#JMX_PORT}\\\":\\\"${n_port}\\\",\\n\"

printf \"\\t\\t\\t\\\"{#JAVA_NAME}\\\":\\\"${t_service}\\\"},\\n\"

else

printf \"\\t\\t{ \\n\"

printf \"\\t\\t\\t\\\"{#JMX_PORT}\\\":\\\"${n_port}\\\",\\n\"

printf \"\\t\\t\\t\\\"{#JAVA_NAME}\\\":\\\"${t_service}\\\"}]}\\n\"

fi

let \"n_port=n_port+1\"

let \"i=i+1\" done

3.add-service脚本编写 (此脚本需要根据你的环境修改后才能使用)

#!/bin/basht_datadir=`find 安装tomcat位置 -name catalina.sh|awk -F \"/bin/catalina.sh\" \'{print $1}\'`

tomcat_no=`find 安装tomcat位置 -name catalina.sh|awk -F \"/bin/catalina.sh\" \'{print $1}\'|wc -l`

n_port=12345 #配置监控初始端口

local_ip=`ifconfig eth0 |awk -F \'[ :]+\' \'NR==2 {print $4}\'` #提取主机IP

for tomcat in $t_datadirdo

m_no=`cat -n $tomcat/bin/catalina.sh|grep \'Execute The Requested Command\'|awk \'{print $1}\'` #提取代码插入位置

cp $tomcat/bin/catalina.sh $tomcat/bin/catalina.sh_bak #备份catalina.sh

# cp /tmp/catalina-jmx-remote.jar $tomcat/lib/catalina-jmx-remote.jar #复制文件到实例lib目录

sed -i \'\'$m_no\'a export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote\"\' $tomcat/bin/catalina.sh #插入监控配置

let \"m_no=m_no+1\" #设置行号

sed -i \'\'$m_no\'a export CATALINA_OPTS=\"$CATALINA_OPTS -Djava.rmi.server.hostname=\'$local_ip\'\"\' $tomcat/bin/catalina.sh

let \"m_no=m_no+1\"

sed -i \'\'$m_no\'a export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=\'$n_port\'\"\' $tomcat/bin/catalina.sh

let \"m_no=m_no+1\"

sed -i \'\'$m_no\'a export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false\"\' $tomcat/bin/catalina.sh

let \"m_no=m_no+1\"

sed -i \'\'$m_no\'a export CATALINA_OPTS=\"$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false\"\' $tomcat/bin/catalina.sh

let \"n_port=n_port+1\"

done

local_ip=`ifconfig eth0 |awk -F \'[ :]+\' \'NR==2 {print $4}\'` #提取主机IP

cat >> /etc/zabbix/zabbix_agentd.conf <<END #修改zabbix_agentd.conf,添加KEY 增加了GC和堆内存监控 已经连接数等

UserParameter=java.jmx.discovery,/home/zabbix/bin/jmx_discovery.sh

UserParameter=java.Runtime.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:type=Runtime \\$2 2>&1 |grep \\$2 |awk \'{print \\$NF}\'

UserParameter=java.Memory.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:type=Memory \\$2 2>&1 |grep \\$2 |awk \'{print \\$NF}\'

UserParameter=java.System.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:type=OperatingSystem \\$2 2>&1 |grep \\$2 |awk \'{print \\$NF}\'

UserParameter=java.HeapMemoryUsage.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep \\$2 |awk \'{print \\$NF}\'

UserParameter=java.NonHeapMemoryUsage.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep \\$2 |awk \'{print \\$NF}\'

UserParameter=java.LoadClass.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:type=ClassLoading \\$2 2>&1 |awk \'{print \\$NF}\'

UserParameter=java.Threading.status,java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:type=Threading \\$2 2>&1 |awk \'{print \\$NF}\'

UserParameter=java.CMS.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:name=ConcurrentMarkSweep,type=GarbageCollector \\$2 2>&1 |grep \\$2|awk \'{print \\$NF}\'

UserParameter=java.Copy.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:name=Copy,type=GarbageCollector \\$2 2>&1 |grep \\$2|awk \'{print \\$NF}\' #这个有可能是copy也有可能是ParNew

UserParameter=java.Survivor.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:name=\"Survivor Space\",type=MemoryPool Usage 2>&1 |grep \\$2|awk \'{print \\$NF}\'

UserParameter=java.PermGen.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:name=\"CMS Perm Gen\",type=MemoryPool Usage 2>&1 |grep \\$2|awk \'{print \\$NF}\'

UserParameter=java.OldGen.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:name=\"CMS Old Gen\",type=MemoryPool Usage 2>&1 |grep \\$2|awk \'{print \\$NF}\'

UserParameter=java.EdenSpace.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 java.lang:name=\"Eden Space\",type=MemoryPool Usage 2>&1 |grep \\$2|awk \'{print \\$NF}\'

UserParameter=java.tomcatThreadPool.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\\$1 Catalina:type=Executor,name=tomcatThreadPool \\$2 2>&1 |grep \\$2|awk \'{print \\$NF}\'END

4.Tomcat监控模版

监控模版的修改不建议在xml环境下修改,建议导入到zabbix中再修改监控项,这样修改后导出即可使用.现在监控主要涉及到以下几项.
GC+线程+线程(jvm线程和service)+堆内存+类+系统文件负载+非堆对象

监控模版

Zabbix配置监控项及聚合图形的实例代码

主要介绍了Zabbix配置监控项及聚合图形,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1.安装Zabbix Agent监控本机

安装agent软件

与server端不同,Agent只需安装zabbix-agent包

cat /etc/yum.repos.d/zabbix.repo

[zabbix]

name=Zabbix Official Repository - $basearch

baseurl=https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/$basearch/

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

[zabbix-non-supported]

name=Zabbix Official Repository non-supported - $basearch

baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX

gpgcheck=1

curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX

yum -y install zabbix-agent zabbix-get

2.配置Agent并启动

vim /etc/zabbix/zabbix_agentd.conf

Server=39.108.140.0 # 被动模式 zabbix-server-ip

ServerActive=39.108.140.0 # 主动模式 zabbix-server-ip

Hostname=You-Men # Agent端主机名,最终显示在监控页面上的名字

UnsafeUserParameters=1 # 是否限制用户自定义keys使用特殊字符

systemctl restart zabbix-agent

netstat -antp|grep agent

tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 3898/zabbix_agentd

tcp6 0 0 :::10050 :::* LISTEN 3898/zabbix_agentd

3.配置snmp(可以不做)

zabbix除了可以使用agent获取数据之外,还可以通过snmp获取数据,为了能够让zabbix监控更多的信息,将本机的snmp功能启动起来.

yum -y install net-snmp net-snmp-utils

vim /etc/snmp/snmpd.conf

com2sec notConfigUser 39.108.140.0 public

access notConfigGroup \"\" any noauth exact all none none

view all included .1 80

systemctl restart snmpd && systemctl enabel snmpd

ss -anup |grep snmp # 161端口,udp协议

# 测试snmp协议工作是否正常

# snmpwalk -v 1 -c public 39.108.140.0 .1.3.6

# 使用v1版本,共同体为public,来对192.168.0.1的.1.3.6分支进行walk。

snmpwalk -v 2c -c public 39.108.140.0

# 使用v2c版本,共同体为public,对39.108.140.0进行walk。

# -v 显示当前SNMPWALK命令行版本.

# -

# 获取cisco设备39.108.140.0的接口类型

接下来我们到web界面上配置如何监控本地主机,我们看到接口上是127.0.0.1,但是我们配置文件写的是39.108.140.0,我们让这两个IP一致.点击3进去然后修改.

下载地址

标签:

提交需求或反馈

Demand feedback