Zabbix监控Tomcat及Nginx
注:本篇博文是基于部署zabbix监控服务器的环境进行的。这里将开启一台client服务器(被监控端)用于测试。
博文大纲:
一、监控Tomcat
二、监控Nginx服务器
一、监控Tomcat
监控Tomcat需要用到zabbix_java_gateway这个组件(在zabbix2.0引入的功能),顾名思义就是:Java网关,类似于agentd,但是只用于Java方面。需要注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会提交到server端或proxy。
如果需要开启监控Tomcat功能,在编译zabbix server端时,需要添加--enable_java 参数。
1、Zabbix Server安装zabbix_java_gateway程序
zabbix_java_gateway程序既可以安装在zabbix server端,也可以安装在被监控端,不过一般都是安装在Zabbix server端,这里我就安装在Zabbix Server端。
注:文中所有用到的源码包都可以从我的网盘链接中下载
#执行下面命令前,请先下载我网盘链接中的对应rpm包[root@zabbix ~]# rpm -ivh zabbix-java-gateway-3.2.1-1.el7.x86_64.rpm#修改java_gateway配置文件[root@zabbix ~]# cd /etc/zabbix/[root@zabbix zabbix]# sed -i 's/# LISTEN_IP="0.0.0.0"/LISTEN_IP="0.0.0.0"/g' zabbix_java_gateway.conf [root@zabbix zabbix]# sed -i 's/# LISTEN_PORT=10052/LISTEN_PORT=10052/g' zabbix_java_gateway.conf [root@zabbix zabbix]# egrep -v '^$|^#' zabbix_java_gateway.conf #确定修改后的配置文件LISTEN_IP="0.0.0.0"LISTEN_PORT=10052PID_FILE="/var/run/zabbix/zabbix_java.pid"TIMEOUT=3#启动java-gateway[root@zabbix zabbix]# systemctl start zabbix-java-gateway.service #确定端口在监听[root@zabbix zabbix]# netstat -anpt | grep 10052tcp6 0 0 :::10052 :::* LISTEN 3112/java #修改Zabbix-Server的配置文件[root@zabbix zabbix]# cd /usr/local/zabbix/etc/[root@zabbix etc]# sed -i 's/# JavaGateway=/JavaGateway=192.168.20.2/g' zabbix_server.conf[root@zabbix etc]# sed -i 's/# JavaGatewayPort=10052/JavaGatewayPort=10052/g' zabbix_server.conf[root@zabbix etc]# sed -i 's/# StartJavaPollers=0/StartJavaPollers=5/g' zabbix_server.conf[root@zabbix etc]# /etc/init.d/zabbix_server restart #重启zabbix server
2、测试端配置Tomcat
启动一台IP为192.168.20.3的服务器作为Tomcat服务器,用于测试。
#安装Tomcat[root@tomcat ~]# rpm -qa | grep jdk #查询系统默认的JAVA包java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64copy-jdk-configs-1.2-1.el7.noarchjava-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64[root@tomcat ~]# rpm -e java-1.8.0-openjdk-headless --nodeps #卸载Java1.8[root@tomcat ~]# rpm -e java-1.7.0-openjdk-headless --nodeps #卸载Java1.7[root@tomcat ~]# cd /usr/src[root@tomcat src]# rz #上传我提供的两个源码包[root@tomcat src]# ls #源码包如下apache-tomcat-8.5.35.tar.gz jdk-8u211-linux-x64.tar.gz[root@tomcat ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/ #解压JDK到指定路径[root@tomcat src]# tar zxf apache-tomcat-8.5.35.tar.gz #解压Tomcat源码包[root@tomcat src]# mv apache-tomcat-8.5.35 /usr/local/tomcat #将解压后的目录移动到指定目录并命名为tomcat[root@tomcat ~]# vim /etc/profile #编辑环境变量,在配置文件末尾添加以下内容export JAVA_HOME=/usr/local/jdk1.8.0_211export JRE_HOME=/usr/local/jdk1.8.0_211/jreexport CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH[root@tomcat ~]# . /etc/profile #重新加载环境变量[root@tomcat ~]# java -version #查看java版本java version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)#开启Tomcat的JMX远程管理功能[root@tomcat src]# vim /usr/local/tomcat/bin/catalina.shexport JDK_JAVA_OPTIONS #跳转到306行,也就是该行,下面写入以下内容CATALINA_OPTS=" $CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.20.3 -Dcom.sun.management.jmxremote.authenticate=false"#注:上面的IP为Tomcat本机的IP,端口"8888"可以自定义,不要冲突即可[root@tomcat src]# /usr/local/tomcat/bin/startup.sh #启动Tomcat#确定相关端口在监听[root@tomcat src]# netstat -anpt | grep 8080tcp6 0 0 :::8080 :::* LISTEN 3871/java [root@tomcat src]# netstat -anpt | grep 8888tcp6 0 0 :::8888 :::* LISTEN 3871/java
3、回到Zabbix-server进行JMX连接测试
注:该测试需要系统支持图形化桌面,若没有图形化桌面,此验证过程可以省略。
[root@zabbix ~]# jconsole #执行此命令,此命令是Java-gateway提供的。
执行上面的命令后,会弹出下面提示框(输入Tomcat的IP+JMX监听端口,进行连接):
确保可以看到以下画面即可:
4、登录到Zabbix Server的web界面进行配置
稍等片刻,显示如下即可:
可以进行以下操作,看到JVM虚拟机相关的信息:
二、监控Nginx服务器
自行安装部署Nginx,这里我还将Nginx配置在Tomcat这台主机上。部署Nginx可参考博文:搭建Nginx服务器及深度优化
1、在Nginx服务器上部署agent客户端
#安装zabbix-agent[root@tomcat src]# tar zxf zabbix-3.2.1.tar.gz [root@tomcat src]# cd zabbix-3.2.1/[root@tomcat zabbix-3.2.1]# ./configure --prefix=/usr/local/zabbix --enable-agent && make && make install[root@tomcat zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/[root@tomcat zabbix-3.2.1]# chmod +x /etc/init.d/zabbix_agentd #修改启动脚本[root@tomcat zabbix-3.2.1]# sed -i 's/BASEDIR=\/usr\/local/BASEDIR=\/usr\/local\/zabbix/g' /etc/init.d/zabbix_agentd [root@tomcat zabbix-3.2.1]# sed -i 's/PIDFILE=\/tmp\/$BINARY_NAME.pid/PIDFILE=$BASEDIR\/logs\/$BINARY_NAME.pid/g' /etc/init.d/zabbix_agentd[root@tomcat zabbix-3.2.1]# useradd -M -s /sbin/nologin zabbix[root@tomcat ~]# mkdir -p /usr/local/zabbix/logs/[root@tomcat ~]# chown -R zabbix:zabbix /usr/local/zabbix[root@tomcat zabbix-3.2.1]# chkconfig --add zabbix_agentd[root@tomcat zabbix-3.2.1]# chkconfig zabbix_agentd on[root@tomcat zabbix-3.2.1]# systemctl start zabbix_agentd[root@tomcat zabbix-3.2.1]# netstat -anpt | grep zabbixtcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 97364/zabbix_agentd #修改agent配置文件[root@tomcat zabbix-3.2.1]# cd /usr/local/zabbix/etc/[root@tomcat etc]# sed -i 's/# PidFile=\/tmp\/zabbix_agentd.pid/PidFile=\/usr\/local\/zabbix\/logs\/zabbix_agentd.pid/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/LogFile=\/tmp\/zabbix_agentd.log/LogFile=\/usr\/local\/zabbix\/logs\/zabbix_agentd.log/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/Server=127.0.0.1/Server=192.168.20.2/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/# ListenPort=10050/ListenPort=10050/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/# ListenIP=0.0.0.0/ListenIP=0.0.0.0/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/ServerActive=127.0.0.1/ServerActive=192.168.20.2/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/Hostname=Zabbix server/Hostname=192.168.20.3/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/# Timeout=3/Timeout=15/g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/# Include=\/usr\/local\/etc\/zabbix_agentd.conf.d\//Include=\/usr\/local\/zabbix\/etc\/zabbix_agentd.conf.d\//g' zabbix_agentd.conf[root@tomcat etc]# sed -i 's/# UnsafeUserParameters=0/UnsafeUserParameters=1/g' zabbix_agentd.conf[root@tomcat etc]# echo 'UserParameter=nginx.info[*],/usr/local/zabbix/scripts/nginx.sh $1' >> zabbix_agentd.conf[root@tomcat etc]# echo "UserParameter=nginx.ping[*],netstat -anput | grep -w 80 | grep -w LISTEN | wc -l" >> zabbix_agentd.conf[root@tomcat etc]# egrep -v '^$|^#' zabbix_agentd.conf #确定配置无误PidFile=/usr/local/zabbix/logs/zabbix_agentd.pidLogFile=/usr/local/zabbix/logs/zabbix_agentd.logServer=192.168.20.2ListenPort=10050ListenIP=0.0.0.0ServerActive=192.168.20.2Hostname=192.168.20.3Timeout=15Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.confUnsafeUserParameters=1UserParameter=nginx.info[*],/usr/local/zabbix/scripts/nginx.sh $1UserParameter=nginx.ping[*],netstat -anput | grep -w 80 | grep -w LISTEN | wc -l
2、在Nginx服务器上编写Nginx脚本
注:此脚本可在我文章开头的下载链接中获得。
[root@tomcat etc]# mkdir /usr/local/zabbix/scripts/[root@tomcat etc]# cd /usr/local/zabbix/scripts/[root@tomcat scripts]# cat nginx.sh #脚本如下,所有IP均为Nginx的IP#!/bin/bashcase $1 inindex) RS=`curl -s -I 192.168.20.3/index.html |head -n1 |awk '{print $2}'` echo $RS ;;WorkerProcesses) RS=`ps aux |grep nginx | grep -w worker |wc -l` echo $RS ;;bps) RS=`ab -q -n 1000 -c 1000 http://192.168.20.3/index.html |grep Request | awk '{print $4}'` echo $RS ;;Current) LINES=`cat /usr/local/nginx/logs/access.log |wc -l` sleep 1 NOW_LINES=`cat /usr/local/nginx/logs/access.log |wc -l` echo $NOW_LINES $LINES | awk '{print $1 -$2}';;IP) RS=`cat /usr/local/nginx/logs/access.log | awk '{print $1}' |sort -u | wc -l` echo $RS ;;VirtualHost) RS=`cat /usr/local/nginx/conf/nginx.conf |grep -v '#' | grep server_name | wc -l` echo $RS ;;MD5) RS=`md5sum /usr/local/nginx/conf/nginx.conf |awk '{print $1}'` echo $RS ;;PV) RS=`wc -l /usr/local/nginx/logs/access.log | awk '{print $1}'` echo $RS ;;esac[root@tomcat scripts]# /etc/init.d/zabbix_agentd restart #重启agent#调整相应权限,需要所有用户都可以执行netstat命令[root@tomcat scripts]# chmod +s /usr/bin/netstat[root@tomcat scripts]# chmod +x nginx.sh
3、配置Zabbix-Server Web界面
1、在配置web界面前,可现在Zabbix-Server端测试一下相关信息是否可以获得,以便验证脚本的正确性(同时ab压力测试是必须要有的,Server端和Agent端都要装该命令)。
[root@zabbix fonts]# yum -y install httpd-tools #安装ab压力测试命令[root@zabbix fonts]# ab -q -n 1000 -c 1000 http://192.168.20.3/index.html |grep Request | awk '{print $4}'2117.31 #有信息返回则表示正常
配置Web界面:
1)配置应用集
2)配置监控项
监控Nginx总访问量:
接下来每添加一个监控项,都要点击下面的按钮,为了简单,以后就不截下面页面的图了。
独立IP数
Nginx主页的状态
Nginx当前并发数
配置文件MD5值用来监控nginx配置文件是否被更改(注意图中其信息类型)
当前吞吐量bps,并且让其更新时间为60秒(注意其信息类型)
监控nginx工作进程的个数
监控Nignx虚拟主机的个数
3)创建触发器
nginx服务意外停止工作触发器
创建Nginx主页不可访问的触发器
创建Nginx配置文件被修改触发器
4)添加被监控主机
5)查看Zabbix监控的数据
6)给监控nginx状态添加映射(更加友好)
确定已添加:
关联到监控项
在Server端模拟并发,然后查看图形检测页面:
[root@zabbix ~]# vim a.sh #编写脚本#!/bin/bashwhile truedoab -n 1000 -c 100 192.168.20.3/index.html &> /dev/nulldone[root@zabbix ~]# sh a.sh #执行脚本
执行脚本后,图形界面如下:
也可以自定义图表,如下: