Products
GG网络技术分享 2025-03-18 16:14 1
监控原理图
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进去然后修改.
更新完后,跳到下面页面,稍等一会,重新载入一下页面就是可用性为绿色了
至此,监控本地主机就完成了,如果想看下监控本地主机的网卡流量就做下面图2步骤.鼠标依次根据数字挨个点,如果想要监控项是中文的话,可以做Zabbix故障例一,但是4.4版本较以前版本有所改善,监控项不是乱码,而是英文.
如果想要将这种乱码换成正常中文
如果是windows在C盘搜索simkai.tff中文楷体,拷贝/上传到服务器,然后cp到zabbix的字体目录 3.*版本: cp /root/simkai.ttf /usr/share/zabbix/fonts/ # 不同的安装方式,路径会有所不同,所以可以直接find / -type d -type fonts找到类似的文件夹,那就是了 # 注意字体权限问题 vim /usr/share/zabbix/include/defines.inc.php define(\'ZBX_GRAPH_FONT_NAME\', \'simkai\'); define(\'ZBX_FONT_NAME\', \'simkai\'); |
4.Zabbix监控远程主机
如果远程主机安装不上zabbix-agent,可以通过装的上的zabbix-agent的机器把包传过去
yum -y instlal yum-utils # 下载到指定目录 yum install zabbix-agent -y --downloadonly --downloaddir=/root 1.安装zabbix agent # 方法一(国外源zabbix好像下载不下来包了,用上面的源): # rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm yum clean all yum -y install zabbix-agent # 方法二:(使用别的机器传过来的zabbix-agent包直接rpm安装即可) rpm -ivh zabbix-agent-4.4.1-1.el7.x86_64.rpm # 修改zabbix-agent配置并启动服务 vim /etc/zabbix/zabbix_agentd.conf Server=192.168.244.144 Server=192.168.244.144 //监控主机IP地址 Hostname=agent1.zabbix.com //被监控主机到监控主机的名字 UnsafeUserParameters=1 systemctl start zabbix-agent ss -antp |grep 10050 # 接下来我们到web端进行操作 # 为了服务方便管理和易于查看。 # 监控系统中往往根据被监控的主机角色或其他属性将同类主机划分到同一个主机组中. |
如果等上一段时间,可用性哪里没有红色警告,就说明这台主机被添加进来了,但是因为没有挂载模板和创建监控项,所以我们接下来尝试着挂载一下模板,然后再去创建监控项.
我们到agent端装一个nginx,然后去zabbix的web端找到此模板并挂载.
yum -y install nginx systemctl start nginx |
5.测试监控主机
接下来我们用浏览器或者elinks访问一下nginx,产生一些数据,然后去zabbix上查看变化
elinks --dump 116.196.83.113
我们以后自定义Key监控项时,先看看最新数据有没有数据过来,如果数据都不会过来,就别提图形触发器报警什么了.
至此,添加本地主机,远程主机,创建主机组,挂载模板就已经完了
6.Zabbix监控项
监控项(Items)简介
监控项是Zabbix中获得数据的基础,没有监控项,就没有数据——因为一个主机只有监控项定义了单一的指标或者需要获得的数据,监控项适用于采集数据的,多个同类的监控项可以定义成一个应用集,如,mysql增删改查以及每秒钟的读表,写表速度可以写成一个Mysql应用集.
对于监控项的示例,需要输入以下必要的信息
名称
输入CPU Load作为值,在列表中和其他地方,都会显示这个值作为监控项名称. |
值
手动输入system.cpu.load作为值,这是监控项的一个技术上的名称,用于识别获取信息的类型,这个特定值需要是Zabbix Agent预定义值的一种. https://www.zabbix.com/documentation/3.4/manual/config/items/itemtypes/zabbix_agent # 此网址就是zabbix官网的预定义值. |
信息类型
在此处选择Numeric(float),这个属性定义了获得数据的格式 你也需要减少监控项历史保留的天数,7或者14天,对于数据库而言,最佳实践是避免数据库保留过多的历史数据. 我们选择了数据类型后,暂时保持其他选项的默认值. 1> 磁盘容量Units一般为B 2> 网卡流量单位为bps 3> Mysql每秒访问量qps,例如MySQL每秒select,insert Mysql serlect |
点击添加,新的监控项就出现在监控项列表中了
7.查看数据
当一个监控项定义完成后,你可能好奇他具体获取了什么值,前往监控首页,点击最新数据,选择相应的主机.看数据能不能过来以及是不是自己想要的类型. |
图表
当监控项运行了一段时间后,可以查看可视化图表,如果没有可以自己创建一个,下面会有详细介绍 |
8.常用监控项
1.服务器网络接口进出流量和总流量 net.if.in[if,<mode>] net.if.out[if,<mode>] net.if.total[if,<mode>] 2.服务器启动分区剩余空间 vfs.fs.size[fs,<mode>] vfs.fs.size[/boot,free] 3.监控虚拟机内存 vm.memory.size[<mode>] vm.memory.size[total vm.memory.size[free] vm.memory.size[wired] 4.服务器服务状态 net.tcp.listen[port] net.tcp.port[<ip>,port] net.tcp.service[service,<ip>,<port>] net.tcp.service.perf[service,<ip>,<port>] 5.服务器进程数量 proc.num[<name>,<user>,<state>,<cmdine>] zabbix_get -s 39.108.140.0 -k proc.num 121 zabbix_get -s 39.108.140.0 -k proc.num[,,run] 3 zabbix_get -s 39.108.140.0 -k proc.num[,,sleep] 118 6.服务器CPU状态(浮点型,无单位) system.cpu.intr system.cpu.load[<cpu>,<mode>] system.cpu.num system.cpu.switches system.cpu.util[<cpu>,<type>,<mode>] zabbix_get -s 39.108.140.0 -k system.cpu.load[all,avg1] 0.000000 zabbix_get -s 39.108.140.0 -k system.cpu.load[,avg5] 0.010000 7.磁盘IO情况 vfs.dev.read[device,<type>,<mode>] vfs.dev.write[device,<type>,<mode>] zabbix_get -s 39.108.140.0 -k vfs.dev.read[/dev/vda1] 8.监控文件修改 vfs.file.chsum下载地址
标签:
提交需求或反馈Demand feedback |