Products
GG网络技术分享 2025-03-18 16:14 47
监控原理图
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\"
以上配置以后重启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和端口是监控端的信息
#!/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
#!/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}\'END4.Tomcat监控模版
监控模版的修改不建议在xml环境下修改,建议导入到zabbix中再修改监控项,这样修改后导出即可使用.现在监控主要涉及到以下几项.
GC+线程+线程(jvm线程和service)+堆内存+类+系统文件负载+非堆对象
监控模版
主要介绍了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