注:本文基於https://blog.51cto.com/14227204/2474670
一、監控主機內存使用情況
1、在服務器上部署agent客戶端
[root@agent /]# mkdir /zabbix # 個人習慣,可忽略
[root@agent /]# cd /zabbix/
[root@agent /]# rz
[root@agent zabbix]# tar zxf zabbix-3.2.1.tar.gz
[root@agent zabbix]# cd zabbix-3.2.1/
[root@agent zabbix-3.2.1]# useradd -M -s /sbin/nologin zabbix
[root@agent zabbix-3.2.1]# ./configure --prefix=/usr/local/zabbix --enable-agent && make && make install
[root@agent zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@agent /]# sed -i 's/BASEDIR=\/usr\/local/BASEDIR=\/usr\/local\/zabbix/g' /etc/init.d/zabbix_agentd
[root@agent /]# sed -i 's/PIDFILE=\/tmp\/$BINARY_NAME.pid/PIDFILE=$BASEDIR\/logs\/$BINARY_NAME.pid/g' /etc/init.d/zabbix_agentd
[root@agent /]# chmod +x /etc/init.d/zabbix_agentd
[root@agent /]# sed -i 's/# PidFile=\/tmp\/zabbix_agentd.pid/PidFile=\/usr\/local\/zabbix\/logs\/zabbix_agentd.pid/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/LogFile=\/tmp\/zabbix_agentd.log/LogFile=\/usr\/local\/zabbix\/logs\/zabbix_agentd.log/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/Server=127.0.0.1/Server=192.168.171.133/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/# ListenPort=10050/ListenPort=10050/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/ServerActive=127.0.0.1/ServerActive=192.168.171.133/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/Hostname=Zabbix server/Hostname=192.168.171.134/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/# Timeout=3/Timeout=15/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/# Include=\/usr\/local\/etc\/zabbix_agentd.conf.d\//Include=\/usr\/local\/zabbix\/etc\/zabbix_agentd.conf.d\//g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# sed -i 's/# UnsafeUserParameters=0/UnsafeUserParameters=1/g' /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# egrep -v '^$|^#' /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.171.133
ListenPort=10050
ServerActive=192.168.171.133
Hostname=192.168.171.134
Timeout=15
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
UnsafeUserParameters=1
[root@agent /]# mkdir -p /usr/local/zabbix/logs # 創建日誌存放路徑
[root@agent /]# chown -R zabbix:zabbix /usr/local/zabbix/ # 賦予權限
[root@agent /]# /etc/init.d/zabbix_agentd start # 啓動agent
Reloading systemd: [ OK ]
Starting zabbix_agentd (via systemctl): [ OK ]
[root@agent /]# cat > /tmp/memavailable.sh << EOF
> #!/bin/bash
> free -m | grep Mem | awk '{print $NF}'
> EOF
[root@agent /]# chmod +x /tmp/memavailable.sh
[root@agent /]# cat > /usr/local/zabbix/etc/zabbix_agentd.conf.d/memtest.conf << EOF
> UserParameter=memtest,sh /tmp/memavailable.sh
> EOF
[root@agent zabbix]# /etc/init.d/zabbix_agentd restart
Restarting zabbix_agentd (via systemctl): [ OK ]
#服務端測試:
[root@zabbix /]# zabbix_get -s 192.168.171.134 -p 10050 -k "memtest"
1307
2、登錄到Zabbix server端進行以下操作
二、監控Nginx服務
自行安裝部署Nginx,可參考博文:https://blog.51cto.com/14227204/2464167
爲了方便,我依舊是在本臺主機上進行的,如果需要在另一臺主機上監控的話也需要安裝部署agent端
1、配置agent
#再原有的配置文件基礎上再添加幾行
[root@agent /]# echo 'UserParameter=nginx.info[*],/usr/local/zabbix/scripts/nginx.sh $1' >> /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# echo "UserParameter=nginx.ping[*],netstat -anput | grep -w 80 | grep -w LISTEN | wc -l" >> /usr/local/zabbix/etc/zabbix_agentd.conf
[root@agent /]# egrep -v '^$|^#' /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.171.133
ListenPort=10050
ServerActive=192.168.171.133
Hostname=192.168.171.134
Timeout=15
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
UnsafeUserParameters=1
UserParameter=nginx.info[*],/usr/local/zabbix/scripts/nginx.sh $1
UserParameter=nginx.ping[*],netstat -anput | grep -w 80 | grep -w LISTEN | wc -l
2、在Nginx服務器上編寫Nginx腳本
[root@agent /]# mkdir /usr/local/zabbix/scripts
[root@agent /]# cd /usr/local/zabbix/scripts/
[root@agent scripts]# vim nginx.sh
#!/bin/bash
case $1 in
index)
RS=`curl -s -I 192.168.171.134/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.171.134/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
#調整相應權限,需要所有用戶都可以執行netstat命令
[root@agent scripts]# chmod +s /usr/bin/netstat
[root@agent scripts]# chmod +x nginx.sh
[root@agent scripts]# /etc/init.d/zabbix_agentd restart
Restarting zabbix_agentd (via systemctl): [ OK ]
3、配置Zabbix-Server Web界面
在配置web界面前,可現在Zabbix-Server端測試一下相關信息是否可以獲得,以便驗證腳本的正確性(同時ab壓力測試是必須要有的,Server端和Agent端都要裝該命令)
[root@zabbix /]# yum -y install httpd-tools
[root@zabbix /]# ab -q -n 1000 -c 1000 http://192.168.171.134/index.html | grep Request | awk '{print $4}'
7665.77 #有信息返回則表示正常
配置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 /]# cat a.sh
#!/bin/bash
while true
do
ab -n 1000 -c 100 192.168.171.134/index.html &> /dev/null
done
[root@zabbix /]# sh a.sh
執行腳本後,如下:
也可以自定義圖表,如下:
三、監控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端。
[root@zabbix /]# cd /zabbix/
[root@zabbix zabbix]# rpm -ivh zabbix-java-gateway-3.2.1-1.el7.x86_64.rpm
[root@zabbix 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=10052
PID_FILE="/var/run/zabbix/zabbix_java.pid"
TIMEOUT=3
#啓動zabbix-java
[root@zabbix zabbix]# systemctl start zabbix-java-gateway.service
[root@zabbix zabbix]# netstat -anput | grep 10052 # 確定端口在接聽
tcp6 0 0 :::10052 :::* LISTEN 15501/java
[root@zabbix zabbix]# cd /
[root@zabbix /]# sed -i 's/# JavaGateway=/JavaGateway=192.168.171.133/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# JavaGatewayPort=10052/JavaGatewayPort=10052/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# StartJavaPollers=0/StartJavaPollers=5/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# /etc/init.d/zabbix_server restart
Restarting zabbix_server (via systemctl): [ OK ]
2、測試端配置Tomcat
這裏我安裝在了nginx那臺服務器上
[root@agent /]# rpm -qa | grep jdk
java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el7_7.x86_64
java-1.8.0-openjdk-devel-1.8.0.242.b08-0.el7_7.x86_64
java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
copy-jdk-configs-3.3-10.el7_5.noarch
[root@agent /]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.242.b08-0.el7_7.x86_64
[root@agent /]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
[root@agent /]# mkdir tomcat
[root@agent /]# cd tomcat/
[root@agent tomcat]# rz
[root@agent tomcat]# ls
apache-tomcat-8.5.35.tar.gz jdk-8u211-linux-x64.tar.gz
[root@agent tomcat]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@agent tomcat]# tar zxf apache-tomcat-8.5.35.tar.gz
[root@agent tomcat]# mv apache-tomcat-8.5.35 /usr/local/tomcat
[root@agent tomcat]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_211
export JRE_HOME=/usr/local/jdk1.8.0_211/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@agent tomcat]# . /etc/profile
[root@agent tomcat]# java -version
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)
#kaiqi開啓tomcat的JMX遠程管理功能
[root@agent /]# vim /usr/local/tomcat/bin/catalina.sh
export 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.171.134 -Dcom.sun.management.jmxremote.authenticate=false"
#注:上面的IP爲Tomcat本機的IP,端口“8888”可以自定義,不要衝突即可
[root@agent /]# /usr/local/tomcat/bin/startup.sh
[root@agent /]# netstat -anput | grep 8888
tcp6 0 0 :::8888 :::* LISTEN 70730/java
[root@agent /]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 70730/java
3、回到Zabbix-server進行JMX連接測試
注:該測試需要系統支持圖形化桌面,若沒有圖形化桌面,此驗證過程可以省略。
[root@zabbix ~]# jconsole #執行此命令,此命令是Java-gateway提供的。
執行上面的命令後,會彈出下面提示框(輸入Tomcat的IP+JMX監聽端口,進行連接):
4、登錄到Zabbix Server的web界面進行配置