zabbix利用低级自动发现自动监控tomcat端口
1.为什么要使用自动发现
由于我们tomcat服务器特别多,且每一个上面跑的实例长达几十个,但是这些tomcat的端口也都需要监控起来,如果手动添加的话将会非常麻烦,我们可以利用自动发现,将自动发现配置一些规则并做成模板,给有tomcat的服务器链接模板就可以了,这个过程就会大大减少人工的工作量
2.在被控主机安装tomcat多实例
2.1.安装tomcat
[root@tomcat ~]# yum -y install java [root@tomcat ~]# tar xf apache-tomcat-8.0.49.tar.gz
2.2.部署tomcat多实例
[root@tomcat ~]# cp -rp apache-tomcat-8.0.49 /application/tomcat1 [root@tomcat ~]# cp -rp apache-tomcat-8.0.49 /application/tomcat2 [root@tomcat ~]# cp -rp apache-tomcat-8.0.49 /application/tomcat3 [root@tomcat ~]# cp -rp apache-tomcat-8.0.49 /application/tomcat4 [root@tomcat ~]# cp -rp apache-tomcat-8.0.49 /application/tomcat5
2.3.修改端口号
[root@tomcat ~]# cd /application/ [root@tomcat application]# vim tomcat1/conf/server.xml <Server port="8005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> [root@tomcat application]# vim tomcat2/conf/server.xml <Server port="5005" shutdown="SHUTDOWN"> <Connector port="5080" protocol="HTTP/1.1" <Connector port="5009" protocol="AJP/1.3" redirectPort="8443" /> [root@tomcat application]# vim tomcat3/conf/server.xml <Server port="6005" shutdown="SHUTDOWN"> <Connector port="6080" protocol="HTTP/1.1" <Connector port="6009" protocol="AJP/1.3" redirectPort="8443" /> [root@tomcat application]# vim tomcat4/conf/server.xml <Server port="7005" shutdown="SHUTDOWN"> <Connector port="7080" protocol="HTTP/1.1" <Connector port="7009" protocol="AJP/1.3" redirectPort="8443" /> [root@tomcat application]# vim tomcat5/conf/server.xml <Server port="9005" shutdown="SHUTDOWN"> <Connector port="9080" protocol="HTTP/1.1" <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
2.4.启动tomcat
[root@tomcat application]# for i in {1..5} do ./tomcat${i}/bin/startup.sh done Using CATALINA_BASE: /application/tomcat1 Using CATALINA_HOME: /application/tomcat1 Using CATALINA_TMPDIR: /application/tomcat1/temp Using JRE_HOME: /usr Using CLASSPATH: /application/tomcat1/bin/bootstrap.jar:/application/tomcat1/bin/tomcat-juli.jar Tomcat started. Using CATALINA_BASE: /application/tomcat2 Using CATALINA_HOME: /application/tomcat2 Using CATALINA_TMPDIR: /application/tomcat2/temp Using JRE_HOME: /usr Using CLASSPATH: /application/tomcat2/bin/bootstrap.jar:/application/tomcat2/bin/tomcat-juli.jar Tomcat started. Using CATALINA_BASE: /application/tomcat3 Using CATALINA_HOME: /application/tomcat3 Using CATALINA_TMPDIR: /application/tomcat3/temp Using JRE_HOME: /usr Using CLASSPATH: /application/tomcat3/bin/bootstrap.jar:/application/tomcat3/bin/tomcat-juli.jar Tomcat started. Using CATALINA_BASE: /application/tomcat4 Using CATALINA_HOME: /application/tomcat4 Using CATALINA_TMPDIR: /application/tomcat4/temp Using JRE_HOME: /usr Using CLASSPATH: /application/tomcat4/bin/bootstrap.jar:/application/tomcat4/bin/tomcat-juli.jar Tomcat started. Using CATALINA_BASE: /application/tomcat5 Using CATALINA_HOME: /application/tomcat5 Using CATALINA_TMPDIR: /application/tomcat5/temp Using JRE_HOME: /usr Using CLASSPATH: /application/tomcat5/bin/bootstrap.jar:/application/tomcat5/bin/tomcat-juli.jar Tomcat started.
2.5.查询tomcat端口
[root@tomcat application]# netstat -lnpt | grep java | awk '{print $4}' | grep 80$ | awk -F: '{print $NF}' 7080 8080 5080 9080 6080
3.配置zabbix自动发现自动监控主机tomcat进程
3.1.编写获取tomcat端口并输出为json格式的脚本
脚本思路:
1.首先定义一个获取所有tomcat端口的数组变量
2.在定义一个所有tomcat端口数量的变量用于后面json格式逗号的比较
3.使用printf输出json格式
4.定义j的值,在接下来for循环中用于每次循环都加1,最终判断是否是最后一个循环,如果是最后一个循环就不要输出逗号,否则就影响了json的格式
4.使用for循环遍历我们定义好的数组变量,在循环内部也要使用printf定义json格式,然后把遍历到的tomcat端口值输入到就json中,在用if判断当前j的值是不是小于tomcat端口总值,如果小于就要输出json格式的逗号,如果大于则不输出,大于也就表示tomcat端口值以及全部遍历完
脚本内容纯手工编写,网上给出的不太靠谱
1.编写脚本 [root@tomcat ~]# cd /etc/zabbix/scripts/ [root@tomcat scripts]# vim tomcat_port.sh #!/bin/bash #获取tomcat端口号并制作成json格式 --jxl 20201214 tomcat_port=(`netstat -lnpt | egrep -i "$1" | awk {'print $4'} | egrep -v "05|09"| awk -F: '{print $NF}'|sort|uniq`) #定义数组,获取tomcat端口号 tomcat_count=`netstat -lnpt | egrep -i "$1" | awk {'print $4'} | egrep -v "05|09"| awk -F: '{print $NF}'|sort|uniq | wc -l` #定义端口数量 printf "{\n" #打印json格式 printf '\t'"\"data\":[" j=0 for i in ${!tomcat_port[@]} #遍历数组获取索引值 do let j++ printf '\n\t\t{' printf "\"{#TOMCAT_PORT}\":\"${tomcat_port[$i]}\"}" #取到tomcat的端口号 if [ $j -lt $tomcat_count ];then #本次的i值与tomcat端口数量做比较,如果小则输出,否则不输出 printf ',' fi done printf "\n\t]\n" printf "}\n" 2.脚本输出 [root@tomcat scripts]# sh tomcat_port.sh java { "data":[ {"{#TOMCAT_PORT}":"5080"}, {"{#TOMCAT_PORT}":"6080"}, {"{#TOMCAT_PORT}":"7080"}, {"{#TOMCAT_PORT}":"8080"}, {"{#TOMCAT_PORT}":"9080"} ] } 3.脚本赋权限 [root@tomcat scripts]# chmod a+x tomcat_port.sh
3.2.zabbix-agent配置
1.增加自定义监控项 监控项使用变量传参的形式 [root@tomcat scripts]# vim /etc/zabbix/zabbix_agentd.d/tomcat_monitor.conf UserParameter=tomcat_port[*],/etc/zabbix/scripts/tomcat_port.sh $1 2.重启zabbix-agent [root@tomcat scripts]# systemctl restart zabbix-agent.service 3.取值前一定要给netstat命令增加s权限,否则zabbix是普通用户没有权限执行netstat [root@tomcat scripts]# chmod +s /bin/netstat 4.zabbix-server模拟取值 [root@bogon ~]# zabbix_get -s 192.168.81.170 -k tomcat_port[java] { "data":[ {"{#TOMCAT_PORT}":"5080"}, {"{#TOMCAT_PORT}":"6080"}, {"{#TOMCAT_PORT}":"7080"}, {"{#TOMCAT_PORT}":"8080"}, {"{#TOMCAT_PORT}":"9080"} ] }
3.3.创建监控模板
1)点击创建模板
配置—模板—创建模板
2)填写模板信息
模版名称:Template Tomcat Auto Discovery
可见的名称:Template Tomcat Auto Discovery
群组:Templates
描述:自动发现tomcat端口并监控
3.4.配置模板
3.4.1.创建应用集
配置—模板—找到我们刚刚建好的模板—应用集—创建应用集
点击创建应用集
名称:Tomcat Auto Discovery
3.4.2.创建自动发现规则
点击自动发现规则—创建
名称:
类型:zabbix客户端
键值:tomcat_port[java]
3.4.3.设置自动发现规则-监控项原型
1)点击监控项原型
2)创建监控项原型
3)填写监控项信息
名称:Tomcat $1 Port 端口检测
键值:net.tcp.listen[{#TOMCAT_PORT}] //由于是端口检测,因此这里要选择net.tcp.listen监控项,[]的值要填写{#TOMCAT_PORT}才能监控
应用集选择刚刚创建的Tomcat Auto Discovery
3.4.3.设置自动发现规则-触发器类型
名称:{HOST.NAME} Tomcat {#TOMCAT_PORT} 端口异常 //这里的{HOST.NAME}就是监控主机的名称 {#TOMCAT_PORT} 这个就是端口号
严重性:严重
表达式:{Template Tomcat Auto Discovery:net.tcp.listen[{#TOMCAT_PORT}].count(2m,0)}>3
这个表达式的含义:当2分钟内tomcat端口检测的结果都是0,并且3次都是这样就触发告警,端口检测触发的值有2个,0表示异常,1表示ok
到此自动发现模板就配置好了
4.主机应用自动发现模板
4.1.应用模板配置—主机—详细信息
点击主机
找到模板一列,选择我们的自动发现模板,点击添加
4.2.加速zabbix-server
[root@bogon ~]# systemctl restart zabbix-server
4.3.查看tomcat端口监控项是否全部添加
点击主机中的监控项,选择Tomcat Auto Discovery应用集即可看到监控项已经全部添加
4.4.查看触发器是否正常点击触发器即可
全部正常,其实触发器名称上的{HOST.NAME}可加可不加
5.再次增加tomcat应用验证是否自动添加监控项
5.1.增加tomcat实例
1.安装tomcat [root@tomcat ~]# cp apache-tomcat-8.0.49 /application/tomcat6 [root@tomcat ~]# cp apache-tomcat-8.0.49 /application/tomcat7 2.修改端口号 [root@tomcat ~]# cd /application/ [root@tomcat application]# vim tomcat6/conf/server.xml <Server port="2805" shutdown="SHUTDOWN"> <Connector port="2880" protocol="HTTP/1.1" <Connector port="2809" protocol="AJP/1.3" redirectPort="8443" /> [root@tomcat application]# vim tomcat7/conf/server.xml <Server port="3005" shutdown="SHUTDOWN"> <Connector port="3080" protocol="HTTP/1.1" <Connector port="3009" protocol="AJP/1.3" redirectPort="8443" /> 3.启动tomcat [root@tomcat ~]# for i in {6..7} do sh /application/tomcat${i}/bin/startup.sh done 4.查看目前的端口 [root@tomcat ~]# sh /etc/zabbix/scripts/tomcat_port.sh java { "data":[ {"{#TOMCAT_PORT}":"2880"}, {"{#TOMCAT_PORT}":"3080"}, {"{#TOMCAT_PORT}":"5080"}, {"{#TOMCAT_PORT}":"6080"}, {"{#TOMCAT_PORT}":"7080"}, {"{#TOMCAT_PORT}":"8080"}, {"{#TOMCAT_PORT}":"9080"} ] }
5.2.查看监控系统
监控项已经顺利增加
触发器也已经顺利增加
6.关闭其中两个tomcat查看告警
6.1.关闭tomcat
[root@tomcat ~]# ps aux | egrep "tomcat6|tomcat7" | grep -v grep | awk '{print $2}' | xargs -I {} kill -9{}
6.2.查看仪表盘告警
告警成功