一.监控tomcat
1.在tomcat服务器上安装zabbix-agent服务
[root@node2 etc]#vim zabbix_agentd.conf
94 Server=192.168.240.13 #指向当前zabbix server
##### Passive checks related #被动检查相关配置### Option: ListenPort
ListenPort=10050 #监听端口 默认的无需修改119 StartAgents=3
#启动3个进程收集数据146 Hostname=192.168.240.11
#指定名称 一般使用 IP地址, 等会需要使用systemctl restart zabbix-agent.service
systemctl status zabbix-agent.service
2.修改配置文件
vim /usr/local/tomcat/bin/catalina.sh
#一般加在116行
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.240.11" systemctl restart tomcat
systemctl status tomcat
ss -napt|grep 12345CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote #启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345 #默认启动的JMX端口号,要和zabbix添加主机时候的端口一致即可
-Dcom.sun.management.jmxremote.authenticate=false #不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false #不使用ssl认证
-Djava.rmi.server.hostname=x.x.x.x" #tomcat主机自己的IP地址,不要写zabbix服务器的地址
3.通过jconsole 验证JMX数据
在windows安装windows版本的JDK,安装过程略,安装完成之后点击安装目录的jconsole.exe,比如C:\ProgramFiles\Java\jdk1.8.0_221\bin\jconsole.exe
4.配置zabbixserver
在主服务器上配置启动1javagateway
[root@localhost data]#vim /apps/zabbix_server/sbin/zabbix_java/settings.sh
#不需要修改35 START_POLLERS=5 #启动5个线程去采集java数据
43 TIMEOUT=30 #一个数据的超时时间30s
[root@localhost data]#/apps/zabbix_server/sbin/zabbix_java/startup.sh
# 启动服务
[root@localhost data]#ss -antp |grep 10052
配置zabbix-server对接java-gateway
[root@localhost data]#vim /apps/zabbix_server/etc/zabbix_server.conf
281 JavaGateway=192.168.240.13 #指明gateway地址
298 StartJavaPollers=5 #开启多少个进程去收集java服务器的信息289 JavaGatewayPort=10052 # 默认不用改systemctl restart zabbix-server
#快照起不来 重启机器
#重启后不要忘记开启 javagateway/apps/zabbix_server/sbin/zabbix_server
ss -natp |grep 10051
5.web页面配置
二.Zabbix监控TCP
TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务,TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。
在建立连接的时候,所谓的客户端与服务端是相对应的,即要看是谁主动连接的谁,如果A主动连接B那么A就是客户端而B是服务端,如果返过来B主动连接A,那么B就是客户端而A就成了服务端。
TCP端口连接的11种状态
CLOSED:端口默认是关闭状态。
LISTEN: 服务器程序开始监听一个端口,就是LISTEN状态。
SYN_RCVD:三次握手的第二次握手后的端口状态,是收到了客户端发送的SYN_SENT数据包之后的状态,这个状态很短暂,正常在服务器上是很少看到的,除非服务器故意不发送最后一次握手数据包,服务器返回给客户端SYN确认之后就会将在自己的端口置为SYN_RCVD。
SYN_SENT:SYN_SENT状态表示客户端已发送SYN=1的请求连接报文,发送之后客户端就会将自己的端口状态置为SYN_SENT。
ESTABLISHED:表示已经连接成功,客户端收到服务器的确认报文会回复服务器,然后就将端口置为ESTABLISHED,服务器第三次收到客户端的Ack确认就会将端口置为ESTABLISHED并开始传输数据。
FIN_WAIT_1:出现在主动关闭方,FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,当任意一方想主动关闭连接,向对方发送了FIN=1的断开连接请求报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
FIN_WAIT_2:出现在主动关闭方,当被动方回应FIN_WAIT_1的ACK报文后,则进入到FIN_WAIT_2状态
TIME_WAIT:出现在主动关闭方,表示收到了对方的FIN请求关闭报文,并发送出了ACK报文,就等2*MSL(MaxSegment Lifetime)后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
CLOSE_WAIT: 表示在等待关闭端口,这种状态存在于被动关闭的一方。
LAST_ACK: 是被动关闭方在主动关闭一方在发送FIN报文后,最后等待对方的ACK报文,当再次收到ACK报文后,也即可以进入到CLOSED可用状态了。
自定义监控项
[root@localhost zabbix]# vim /apps/zabbix/etc/zabbix_agentd.conf283 ### Option: UserParameter
284 # User-defined parameter to monitor. There can be several user-defined parameters.
285 # Format: UserParameter=<key>,<shell command>
286 # See 'zabbix_agentd' directory for examples.
287 #
288 # Mandatory: no
289 # Default:
290 # UserParameter=UserParameter=test,/usr/bin/echo hello
#修改290 行或者新加一行 命令最好绝对路径
systemctl restart zabbix-agent.service 在主服务器验证
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test"
hello
添加脚本
vim /apps/zabbix/etc/zabbix_agentd.conf
# Mandatory: no
# Default:
# UserParameter=
UserParameter=test,/usr/bin/bash /data/tcp.sh
systemctl restart zabbix-agent.service vim tcp.sh
#!/bin/bash
echo 100
主服务器上测试
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test"
100
脚本传参数
[root@localhost data]# vim tcp.sh#!/bin/bash
echo $1[root@localhost zabbix]# vim /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash /data/tcp.sh $1
服务端测试
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[20]"
20
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[30]"
30
调用多个
vim tcp.sh
#!/bin/bash
echo $1 $2
vim /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash /data/tcp.sh $1 $2
systemctl restart zabbix-agent.service服务端测试
/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[30,300]"
脚本判断
vim tcp.sh
#!/bin/bash
num=$1
if [ $num == "cpu" ];thenecho 88
fivim /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash /data/tcp.sh $1
systemctl restart zabbix-agent.service服务端测试
/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[cpu]"
监控tcp连接
准备脚本
#!/bin/bash
tcp_conn_status(){TCP_STAT=$1ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txtTCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)if [ -z $TCP_NUM ];thenTCP_NUM=0fiecho $TCP_NUM
}main(){case $1 intcp_status)tcp_conn_status $2;;;esac
}main $1 $2bash tcp_status.sh tcp_status ESTAB
bash tcp_status.sh tcp_status TIME-WAIT
chmod +x tcp_status.sh
测试脚本
修改客户端配置文件
[root@localhost etc]# vim zabbix_agentd.conf
UserParameter=linux_tcp[*],/usr/bin/bash /data/tcp.sh $1 $2systemctl restart zabbix-agent.service
systemctl status zabbix-agent.service
在主服务器上验证
[root@localhost ~]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "linux_tcp_status["tcp_status","TIME-WAIT"]"[root@localhost ~]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "linux_tcp_status["tcp_status","ESTAB"]"