1. 程式人生 > >Zabbix監控平臺(三)

Zabbix監控平臺(三)

Zabbix生產環境監測案例概述

  1. 專案規劃
    主機分組
    交換機(用SNMP監控)
    Nginx(用Agent監控)
    Tomcat(用JMX監控)
    MySQL
    Apache
    PHP-fpm
    redis(也有狀態頁,同學們自己研究)
    memcache(也有狀態頁,同學們自己研究)
    監控物件識別
    使用SNMP監控交換
    使用IPMI監控伺服器硬體(監控硬體)
    使用Agent監控伺服器(監控軟體)
    使用JMX監控JAVA
    監控MySQL
    監控Web狀態
    監控Nginx狀態
    監控Apache狀態
    監控Tomcat狀態

  2. SNMP監控流程
    交換機上開啟snmp
    在zabbix上新增監控(設定SNMP interfaces)
    關聯監控模版

  3. IPMI
    建議使用自定義item監控伺服器硬體,在本地執行ipmitool命令來獲取資料
    可以在本地執行ipmitool命令獲取資料(命令需要安裝)

  4. JMX(使用Zabbix Java Gateway代理)
    用來獲取java資料,本次的實戰內容

  5. 實戰監控Nginx,Apache,MySQL,PHP-fpm

  6. Zabbix的Web監測

Zabbix監控MySQL資料庫操作實戰

我們需要部署一個MySQL服務和一個zabbix-agentd客戶端

  1. 編寫監控指令碼

在nginx伺服器(192.168.0.221)上安裝一個MySQL
下面是監控mysql狀態的一個shell指令碼,內容如下:

[[email protected] ~]# mkdir -p /server/scripts
[[email protected] ~]# cd /server/scripts/
[r[email protected] scripts]# vim check_mysql.sh
#!/bin/bash

MySQL_USER="root"
MySQL_PWD="123456"
MySQL_HOST="127.0.0.1"   #此指令碼監控本地zabbix_server的MySQL資料庫
MySQL_PORT="3306"


if [ $# -ne "1" ];then
    echo "arg error!"
fi

case $1 in
    Uptime)
        result=`${MySQL_CONN} status | cut -f2 -d":" | cut -f1 -d "T"`              	#cut命令: -d指定分隔符;-f取第幾列(類似awk命令)
        echo $result
        ;;
    Com_update)
        result=`${MySQL_CONN} extended-status | grep -w "Com_update" | cut -d"|" -f3`
        echo $result
        ;;
    Slow_querles)
        result=`${MySQL_CONN} status | cut -f5 -d":" | cut -f1 -d"O"`
        echo $result
        ;;
    Com_select)
        result=`${MySQL_CONN} extended-status | grep -w "Com_select" | cut -d "|" -f3`
        echo $result
        ;;
    Com_rollback)
        result=`${MySQL_CONN} extended-status | grep -w "Com_rollback" | cut -d"|" -f3`
        echo $result
        ;;
    Questions)
        result=`${MySQL_CONN} status | cut -f4 -d":" | cut -f1 -d"S"`
        echo $result
        ;;
        echo $result
        ;;
    Com_delete)
        result=`${MySQL_CONN} extended-status | grep -w "Com_delete" | cut -d"|" -f3`
        echo $result
        ;;
    Com_commit)
        ;;
    Bytes_sent)
        result=`${MySQL_CONN} extended-status | grep -w "Bytes_sent" | cut -d"|" -f3`
        echo $result
        ;;
    Bytes_received)
        result=`${MySQL_CONN} extended-status | grep -w "Bytes_received" | cut -d"|" -f3`
        echo $result
        ;;
    Com_begin)
        result=`${MySQL_CONN} extended-status | grep -w "Com_begin" | cut -d"|" -f3`
        echo $result
        ;;
    *)
        echo "Usage:$0(Uptime|Com_update|Slow_querles|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
        ;;
esac

  1. 在zabbix-agent端建立自定義鍵值配置檔案
#建立mysql.status的鍵值
[[email protected] scripts]# chmod +x check_mysql.sh 
[[email protected] scripts]# chown zabbix.zabbix check_mysql.sh
[[email protected] zabbix]# cd /etc/zabbix/zabbix_agentd.d/
[[email protected] zabbix_agentd.d]# vim mysql_status.conf 
UserParameter=mysql.status[*],/server/scripts/check_mysql.sh $1

#刪除舊鍵值模版
[[email protected] zabbix_agentd.d]# rm -rf userparameter_mysql.conf 

#建立mysql.ping和mysql.version的鍵值
[[email protected] zabbix_agentd.d]# cat mysql_status.conf 
UserParameter=mysql.status[*],/server/scripts/check_mysql.sh $1
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot -p123456 ping | grep -c alive
UserParameter=mysql.version,/usr/bin/mysql -V

#重啟zabbix-agentd服務
[[email protected] zabbix_agentd.d]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
  1. 在zabbix-server端測試鍵值
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "mysql.status[Uptime]" 
4651
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "mysql.status[Com_commit]"
5858
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "mysql.status[Bytes_sent]"
14619224
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "mysql.status[Bytes_received]"
4172191
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "mysql.ping"
1
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "mysql.version"
/usr/bin/mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

  1. 在zabbix-server端Web前臺引入zabbix監控MySQL的模版

zabbix自帶監控MySQL的模版,我們只需要將模版引入到主機即可
配置–>主機–>選擇主機–>模板,然後將MySQL模版連線到此主機即可
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

Zabbix監控Apache、Nginx操作實戰

實戰監控Apache
  1. 原始碼編譯構建apache服務
#為了避免衝突,若系統中已經安裝httpd服務,務必刪除
[[email protected] ~]# rpm -q httpd
package httpd is not installed
[[email protected] ~]# /etc/init.d/iptables stop
[[email protected] ~]# setenforce 0
setenforce: SELinux is disabled

#原始碼構建apache
[[email protected] ~]# tar xf httpd-2.2.17.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/httpd-2.2.17/
[[email protected] httpd-2.2.17]# cd /usr/local/httpd/
[[email protected] httpd]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[[email protected] httpd]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[[email protected] httpd]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[[email protected] httpd]# chmod +x /etc/init.d/httpd
[[email protected] httpd]# cd /usr/local/httpd/htdocs/
[[email protected] htdocs]# echo "`hostname -I` I am apache" > index.html
[[email protected] htdocs]# cat index.html 
192.168.238.128  I am apache
[[email protected] htdocs]# cd ..
[[email protected] httpd]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[[email protected] httpd]# cd conf/
[[email protected] conf]#  awk '/#ServerName/{print NR,$0}' httpd.conf 
97 #ServerName www.example.com:80
[[email protected] conf]# sed -i -e '97 s/#//;s/example/yunjisuan/' httpd.conf 
[[email protected] conf]# sed -n '97p' httpd.conf 
ServerName www.yunjisuan.com:80
[[email protected] conf]# vim httpd.conf 
40 Listen 8080   	#將監聽埠改為8080(不然會與nginx監聽埠衝突)
97 ServerName www.yunjisuan.com:8080
[[email protected] conf]# /etc/init.d/httpd start
[[email protected] conf]# netstat -antup | grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      68017/httpd         
[[email protected] conf]# echo "`hostname -I` www.yunjisuan.com" >> /etc/hosts
[[email protected] conf]# tail -1 /etc/hosts
192.168.238.128  www.yunjisuan.com
[[email protected] conf]# curl www.yunjisuan.com:8080
192.168.238.128  I am apache

  1. 開啟apache狀態頁

要開啟apache的ServerStatus頁面,需要在httpd.conf檔案最下邊加入程式碼段

[[email protected] conf]# tail -7 httpd.conf
ExtendedStatus On
<location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</location>

#最後,重啟動apache即可
[[email protected] conf]# /etc/init.d/httpd restart

  1. 下載apache zabbix模版並解壓
#從如下地址下載apache zabbix模版:
[[email protected] ~]# wget https://github.com/lorf/zapache/archive/master.zip
#解壓zip格式壓縮檔案
[[email protected] ~]# unzip master 
Archive:  master
24a764b2e224f9b8d0a6bc94dcadd7568b2fe650
   creating: zapache-master/
  inflating: zapache-master/README.md  
  inflating: zapache-master/httpd-server-status.conf.sample  
  inflating: zapache-master/userparameter_zapache.conf.sample  
  inflating: zapache-master/zapache  
  inflating: zapache-master/zapache-template-active.xml  
  inflating: zapache-master/zapache-template.xml  
[[email protected] ~]# ls -d zapache-master
zapache-master
[[email protected] ~]# tree zapache-master/
zapache-master/
├── httpd-server-status.conf.sample
├── README.md
├── userparameter_zapache.conf.sample
├── zapache
├── zapache-template-active.xml
└── zapache-template.xml

0 directories, 6 files

此模版檔案中包含了監控apache的指令碼檔案,zabbix的apache模版檔案,還有客戶端zabbix自定義傳key檔案。
首先將zapache放到需要監控的apache伺服器上的/etc/zabbix/scripts目錄下,如果沒有scripts目錄,自行建立一個即可。然後執行授權:

[[email protected] ~]# mkdir -p /etc/zabbix/scripts
[[email protected] ~]# cd zapache-master/
[[email protected] zapache-master]# ls
httpd-server-status.conf.sample  userparameter_zapache.conf.sample  zapache-template-active.xml
README.md                        zapache                            zapache-template.xml
[[email protected] zapache-master]# mv zapache /etc/zabbix/scripts/
[[email protected] zapache-master]# chmod 755 /etc/zabbix/scripts/zapache
[[email protected] scripts]# cd /etc/zabbix/scripts/
[[email protected] scripts]# ./zapache 
zapache version: 1.5
usage:
  ./zapache [<url>] TotalAccesses                 - Check total accesses.
  ./zapache [<url>] TotalKBytes                   - Check total KBytes.
  ./zapache [<url>] CPULoad                       - Check CPU load.
  ./zapache [<url>] Uptime                        - Check uptime.
  ./zapache [<url>] ReqPerSec                     - Check requests per second.
  ./zapache [<url>] BytesPerSec                   - Check Bytes per second.
  ./zapache [<url>] BytesPerReq                   - Check Bytes per request.
  ./zapache [<url>] BusyWorkers                   - Check busy workers.
  ./zapache [<url>] IdleWorkers                   - Check idle workers.
  ./zapache [<url>] version                       - Version of this script.
  ./zapache [<url>] ping                          - Check if Apache is up.
  ./zapache [<url>] WaitingForConnection          - Check Waiting for Connection processess.
  ./zapache [<url>] StartingUp                    - Check Starting Up processess.
  ./zapache [<url>] ReadingRequest                - Check Reading Request processess.
  ./zapache [<url>] SendingReply                  - Check Sending Reply processess.
  ./zapache [<url>] KeepAlive                     - Check KeepAlive Processess.
  ./zapache [<url>] DNSLookup                     - Check DNSLookup Processess.
  ./zapache [<url>] ClosingConnection             - Check Closing Connection Processess.
  ./zapache [<url>] Logging                       - Check Logging Processess.
  ./zapache [<url>] GracefullyFinishing           - Check Gracefully Finishing Processess.
  ./zapache [<url>] IdleCleanupOfWorker           - Check Idle Cleanup of Worker Processess.
  ./zapache [<url>] OpenSlotWithNoCurrentProcess  - Check Open Slots with No Current Process.

接著將userparameter_zapache.conf.sample檔案放到/etc/zabbix/zabbix_agentd.d目錄下,並重命名為userparameter_zapache.conf檔案,然後修改鍵值命令的路徑。
最後,重啟zabbix-agent服務

[[email protected] ~]# cd zapache-master/
[[email protected] zapache-master]# mv userparameter_zapache.conf.sample /etc/zabbix/zabbix_agentd.d/userparameter_zapache.conf
[[email protected] zapache-master]# cd /etc/zabbix/zabbix_agentd.d/
[[email protected] zabbix_agentd.d]# vim userparameter_zapache.conf 
UserParameter=zapache[*],/etc/zabbix/scripts/zapache \$1    #本行要修改
[[email protected] zapache-master]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
  1. 測試鍵值
#在zabbix-agent端檢視指令碼用法
[[email protected] zabbix_agentd.d]# cd /etc/zabbix/scripts/
[[email protected] scripts]# ./zapache 
zapache version: 1.5
usage:
  ./zapache [<url>] TotalAccesses                 - Check total accesses.
  ./zapache [<url>] TotalKBytes                   - Check total KBytes.
  ./zapache [<url>] CPULoad                       - Check CPU load.
  ./zapache [<url>] Uptime                        - Check uptime.
  ./zapache [<url>] ReqPerSec                     - Check requests per second.
  ./zapache [<url>] BytesPerSec                   - Check Bytes per second.
  ./zapache [<url>] BytesPerReq                   - Check Bytes per request.
  ./zapache [<url>] BusyWorkers                   - Check busy workers.
  ./zapache [<url>] IdleWorkers                   - Check idle workers.
  ./zapache [<url>] version                       - Version of this script.
  ./zapache [<url>] ping                          - Check if Apache is up.
  ./zapache [<url>] WaitingForConnection          - Check Waiting for Connection processess.
  ./zapache [<url>] StartingUp                    - Check Starting Up processess.
  ./zapache [<url>] ReadingRequest                - Check Reading Request processess.
  ./zapache [<url>] SendingReply                  - Check Sending Reply processess.
  ./zapache [<url>] KeepAlive                     - Check KeepAlive Processess.
  ./zapache [<url>] DNSLookup                     - Check DNSLookup Processess.
  ./zapache [<url>] ClosingConnection             - Check Closing Connection Processess.
  ./zapache [<url>] Logging                       - Check Logging Processess.
  ./zapache [<url>] GracefullyFinishing           - Check Gracefully Finishing Processess.
  ./zapache [<url>] IdleCleanupOfWorker           - Check Idle Cleanup of Worker Processess.
  ./zapache [<url>] OpenSlotWithNoCurrentProcess  - Check Open Slots with No Current Process.

我們發現指令碼需要傳遞兩個引數,即url和選項
然後我們在zabbix-server端進行鍵值測試

[[email protected] scripts]# zabbix_get -s 192.168.238.128 -p 10050 -k "zapache[127.0.0.1 TotalAccesses]"
204
[[email protected] scripts]# zabbix_get -s 192.168.238.128 -p 10050 -k "zapache[www.yunjisuan.com version]"
1.5
[[email protected] scripts]# zabbix_get -s 192.168.238.128 -p 10050 -k "zapache[www.yunjisuan.com ping]"
1

  1. 在zabbix-server的Web頁面上監控apache

(1)建立一個監控apache的主機
在這裡插入圖片描述
(2)匯入帶有apache監控項的模版

zabbix預設並沒有監控apache的監控項模版。我們需要將它匯入到apache中。在之前解壓出來的目錄中,有待匯入的web模版

[[email protected] ~]# tree zapache-master/
zapache-master/
├── httpd-server-status.conf.sample
├── README.md
├── zapache-template-active.xml #Web模版
└── zapache-template.xml    #Web模版

0 directories, 4 files

我們將這兩個.xml字尾的拷貝到windows上,然後從Web介面匯入進去

[[email protected] zapache-master]# sz zapache-template-active.xml zapache-template.xml 

在這裡插入圖片描述
在這裡插入圖片描述
匯入以後Web端就有監控apache的監控項模版了

(3)將模版連結到apache主機
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

實戰監控nginx
  1. 開啟nginx狀態頁
[[email protected] zapache-master]# cd /usr/local/nginx/conf/
[[email protected] conf]# vim nginx.conf
#在nginx的配置檔案中,新增status配置
 location = /nginx-status {
                stub_status on;
                access_log off;
                allow 127.0.0.1;
                allow 192.168.238.128;		#zabbix伺服器地址一般是內網地址
        }
[[email protected] conf]# nginx -s reload
  1. 訪問設定好的nginx-status連結
[[email protected] conf]# curl 192.168.238.128/nginx-status
Active connections: 2 
server accepts handled requests
 34 34 287 
Reading: 0 Writing: 1 Waiting: 1 

nginx status詳細說明如下:
Active connections:對後端發起的活動連線數;
accepts:nginx總共處理了多少個連線;
handled:nginx成功建立了幾次握手;
requests:nginx總共處理了多少請求。
Reading:nginx讀取客戶端的header數;
Writing:nginx返回給客戶端的header數;
Waiting:nginx請求處理完成,正在等待下一請求指令的連線
  1. 編寫nginx狀態監控指令碼
#下面是nginx狀態監控抓取指令碼,內容如下:
[[email protected] ~]# cd /etc/zabbix/scripts/
[[email protected] scripts]# cat nginx_status.sh 
#!/bin/bash
# Set Variables

HOST="127.0.0.1"
PORT="80"

#Functions to return nginx stats

function active(){
    /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Active" | awk '{print $NF}'
}

function reading(){

    /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Reading" | awk '{print $2}'
}

function writing(){

    /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Writing" | awk '{print $4}'
}

function accepts(){

    /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $1}'

}

function handled(){

    /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $2}'
}

function requests(){

    /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $3}'
}

function ping(){

    /sbin/pidof nginx | wc -l
}

# Run the requested function

$1
  1. 給指令碼可執行許可權並且授權
[[email protected] scripts]# chmod +x nginx_status.sh 
[[email protected] scripts]# chown zabbix.zabbix nginx_status.sh

  1. 在zabbix-agent端配置nginx鍵值配置檔案
[[email protected] zabbix_agentd.d]# pwd
/etc/zabbix/zabbix_agentd.d
[[email protected] zabbix_agentd.d]# cat nginx.conf 
UserParameter=nginx.active,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep "Active" | awk '{print $NF}'
UserParameter=nginx.status[*],/etc/zabbix/scripts/nginx_status.sh $1
#重啟agent客戶端
[[email protected] zabbix_agentd.d]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
  1. 在zabbix-server端測試鍵值
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "nginx.status[active]"
6
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "nginx.status[reading]"
0
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "nginx.status[writing]"
2
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "nginx.status[ping]"
1

  1. 在Web端匯入nginx監控模版
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
  2. 異常除錯

如果Zabbix圖形介面一直沒有獲取到資料,可以通過在zabbix server上執行zabbix_get手動測試:

[[email protected] ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.238.128 -p 10050 -k "nginx.status[active]"
2

如果獲取資料有問題,會給出相應提示,如果能夠獲取到資料,那就沒問題了。

Zabbix監控Tomcat操作實戰

zabbix監控tomcat,需要zabbix_server開啟java poller,zabbix_java開啟javaGateway,埠10052,Tomcat JMX開啟12345埠,提供效能資料。
資料獲取流程為:java poller<-->javaGateway:10052<-->Tomcat:12345
在這裡插入圖片描述

  1. 配置Tomcat JMX(zabbix_agent端,需要提前搭建好Java、tomcat)
#配置jmx,在需要監控的tomcat伺服器上,編輯catalina.sh,加入如下配置
[[email protected] bin]# sed -n '249p' /usr/local/tomcat/bin/catalina.sh 
CATALINA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.238.129 -Dcom.sun.management.jmxremote.port=12345"

這裡需要注意,必須增加-Djava.rmi.server.hostname選項,並且後面的IP就是tomcat伺服器的IP

  1. 重啟Tomcat(zabbix_agent端)
[email protected] bin]# /usr/local/tomcat/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[[email protected] ~]# netstat -antup | grep java
[[email protected] bin]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected] zabbix]# netstat -antup | grep java
tcp        0      0 :::54031                    :::*                        LISTEN      1521/java           
tcp        0      0 :::8080                     :::*                        LISTEN      1521/java           
tcp        0      0 :::53881                    :::*                        LISTEN      1521/java           
tcp        0      0 :::12345                    :::*                      LISTEN      1521/java          #新增埠 
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      1521/java           
tcp        0      0 :::8009                     :::*                        LISTEN      1521/java       
  1. 編譯zabbix,加入java支援(zabbix server)

在zabbix server伺服器上,編譯安裝zabbix-server,需要加上–enable-java,以支援jmx監控,如果之前的zabbix server沒加此選項,那麼需要重新編譯安裝,編譯引數如下:
./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-libxml2

特別提示:
在啟用–enable-java編譯zabbix之前,zabbix server伺服器上需要安裝JDK,並需要設定JAVA_HOME,以讓系統能夠識別到jdk的路徑

(1) 在zabbix-server端安裝JDK

#解壓jdk
[[email protected]_Server ~]# tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/
[[email protected]_Server ~]# ln -s /usr/local/jdk1.8.0_60/ /usr/local/jdk
#配置java環境變數
[[email protected]_Server ~]# sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
[[email protected]_Server ~]# tail -3 /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
#讓環境變數立刻生效
[[email protected]_Server ~]# source /etc/profile
#檢查java環境變數情況
[[email protected]_Server ~]# which java
/usr/local/jdk/bin/java
[[email protected]_Server ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

(2) 重新編譯zabbix-server伺服器端

#重新編譯zabbix-server伺服器端之前
[[email protected] ~]#  ll /usr/local/zabbix/sbin/
total 8604
-rwxr-xr-x. 1 root root 1164622 Dec 17 00:53 zabbix_agentd
-rwxr-xr-x. 1 root root 3671919 Dec 17 00:53 zabbix_proxy
-rwxr-xr-x. 1 root root 3965917 Dec 17 00:53 zabbix_server

#開始重新編譯zabbix-server伺服器端
[[email protected]_Server ~]# /etc/init.d/zabbix_server stop
Shutting down zabbix_server:                               [  OK  ]
[[email protected]_Server ~]# cd /usr/src/zabbix-3.2.4/
[[email protected]_Server zabbix-3.2.4]# ./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-libxml2
[[email protected]_Server zabbix-3.2.4]# make && make install

#重新編譯zabbix-server伺服器端之後
[[email protected]_Server zabbix-3.2.4]# cd /usr/local/zabbix/sbin/
[[email protected] sbin]# ll
total 8608
-rwxr-xr-x. 1 root root 1164622 Dec 19 00:16 zabbix_agentd
drwxr-xr-x. 4 root root    4096 Dec 19 00:16 zabbix_java
-rwxr-xr-x. 1 root root 3671919 Dec 19 00:16 zabbix_proxy
-rwxr-xr-x. 1 root root 3965917 Dec 19 00:16 zabbix_server
[[email protected]_Server sbin]# cd zabbix_java/
[[email protected] zabbix_java]# ll
total 20
drwxr-xr-x. 2 root root 4096 Dec 19 00:16 bin
drwxr-xr-x. 2 root root 4096 Dec 19 00:16 lib
-rw-r--r--. 1 root root  791 Dec 19 00:16 settings.sh	 #java gateway配置指令碼
-rwxr-xr-x. 1 root root  545 Dec 19 00:16 shutdown.sh	  #停止java gateway服務
-rwxr-xr-x. 1 root root 2025 Dec 19 00:16 startup.sh	 #啟動java gateway服務

提示:
java gateway服務的配置指令碼settings.sh不需要修改任何配置。

(3)啟動java Gateway服務(zabbix server端)

[[email protected] zabbix_java]# /usr/local/zabbix/sbin/zabbix_java/startup.sh 
[[email protected] zabbix_java]# netstat -antup | grep 10052
tcp        0      0 :::10052                    :::*                        LISTEN      30647/java          

  1. 修改zabbix server 配置

預設的情況下,zabbix server未啟用javaPollers,需要修改zabbix_server.conf的如下配置

[[email protected]_Server zabbix]# cd /usr/local/zabbix/etc/

#修改以下配置檔案的內容
[[email protected]_Server etc]# cat -n zabbix_server.conf | sed -n '215p;223p;231p'
   215  # JavaGateway=
   223  # JavaGatewayPort=10052
   231  # StartJavaPollers=0

#將上述配置檔案內容修改成如下
[[email protected]_Server etc]# cat -n zabbix_server.conf | sed -n '215p;223p;231p'
   215  JavaGateway=127.0.0.1   #JavaGateway的地址
   223  JavaGatewayPort=10052
   231  StartJavaPollers=5
#重新開啟zabbix-server伺服器端
[[email protected] etc]# /etc/init.d/zabbix_server start
Starting zabbix_server:                                    [  OK  ]
#檢視已經開啟的java poller程序
[[email protected] etc]# ps -ef | grep "java poller" | grep -v grep
zabbix    31205  31147  0 00:50 ?        00:00:00 /usr/local/sbin/zabbix_server: java poller #1 [got 0 values in 0.000072 sec, idle 5 sec]
zabbix    31210  31147  0 00:50 ?        00:00:00 /usr/local/sbin/zabbix_server: java poller #2 [got 0 values in 0.000018 sec, idle 5 sec]
zabbix    31211  31147  0 00:50 ?        00:00:00 /usr/local/sbin/zabbix_server: java poller #3 [got 0 values in 0.000035 sec, idle 5 sec]
zabbix    31212  31147  0 00:50 ?        00:00:00 /usr/local/sbin/zabbix_server: java poller #4 [got 0 values in 0.000037 sec, idle 5 sec]
zabbix    31215  31147  0 00:50 ?        00:00:00 /usr/local/sbin/zabbix_server: java poller #5 [got 0 values in 0.000012 sec, idle 5 sec]   
[[email protected] etc]# netstat -antup | grep 10051
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      31147/zabbix_server 
tcp        0      0 127.0.0.1:39541             127.0.0.1:10051             TIME_WAIT   -                   
tcp        0      0 192.168.238.128:10051       192.168.238.128:51922       TIME_WAIT   -                   
tcp        0      0 127.0.0.1:39511             127.0.0.1:10051             TIME_WAIT   -                   
tcp        0      0 192.168.238.128:10051       192.168.238.129:50158       TIME_WAIT   -                   
tcp        0      0 127.0.0.1:39553             127.0.0.1:10051             TIME_WAIT   -                   
tcp        0      0 127.0.0.1:39473             127.0.0.1:10051             TIME_WAIT   -                   
tcp        0      0 127.0.0.1:39456             127.0.0.1:10051             TIME_WAIT   -                   
tcp        0      0 127.0.0.1:39485             127.0.0.1:10051             TIME_WAIT   -                   

  1. Zabbix圖形介面配置

(1)建立一個主機利用JMX介面監控tomcat被監控端
在這裡插入圖片描述
在這裡插入圖片描述
(2)匯入zabbix監控tomcat的模版

因為Zabbix自帶的Tomcat模版有相容性問題,並不好用,因此,我們匯入自己製作的監控項模版
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

Zabbix監控PHP-FPM操作實戰

php-fpm和nginx一樣內建了一個狀態頁,對於想了解php-fpm的狀態以及監控php-fpm非常有幫助

  1. 啟用php-fpm狀態功能
    修改php-fpm配置檔案,確保如下配置是開啟狀態:
    pm.status_path = /status,具體操作如下
#在Zabbix-server端操作如下
[[email protected]_Server etc]# pwd
/usr/local/php/etc
[[email protected]_Server etc]# ls
pear.conf  php-fpm.conf  php-fpm.conf.default  php.ini
[[email protected]_Server etc]# sed -n '360p' php-fpm.conf
;pm.status_path = /status
[[email protected]_Server etc]# vim php-fpm.conf +360
[[email protected]_Server etc]# sed -n '360p' php-fpm.conf
pm.status_path = /status

#重啟php-fpm服務
[[email protected]_Server ~]# netstat -antup | grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      1145/php-fpm
[[email protected]_Server ~]# pkill php-fpm
[[email protected]_Server ~]# netstat -antup | grep 9000
[[email protected]_Server ~]# /usr/local/php/sbin/php-fpm 
[[email protected]_Server ~]# netstat -antup | grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      18918/php-fpm
  1. nginx配置php-fpm狀態頁面

在nginx配置檔案nginx.conf裡配置php狀態頁,操作如下

[[email protected]_Server ~]# cd /usr/local/nginx/
[[email protected]_Server nginx]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
#配置php-fpm狀態頁面
[[email protected]_Server nginx]# vim conf/nginx.conf
[[email protected]_Server nginx]# cat conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
        location = /nginx-status {
            stub_status on;
            access_log off;
        }
        location = /status {         #新增此location
            include fastcgi_params;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        }
        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}
#重啟動nginx服務
[[email protected]_Server nginx]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected]_Server nginx]# /usr/local/nginx/sbin/nginx -s reload

  1. 狀態頁瀏覽器訪問測試

php-fpm狀態頁比較個性化的一個地方是它可以帶引數,可以帶的引數有json、xml、html,使用zabbix或者nagios監控可以考慮使用xml或者預設方式。
在這裡插入圖片描述

#具體含義說明如下
[[email protected]_Server nginx]# curl 127.0.0.1/status
pool:                 www           #fpm程序池名稱,大多數為www
process manager:      dynamic       #程序管理方式(static,dynamic or nodemand.dynamic)
start time:           26/Jan/2018:02:56:58 -0500    #啟動日期
start since:          2972          #執行時長
accepted conn:        517           #當前FPM程序池接受的請求數
listen queue:         0             #請求等待佇列,如果值不是0,那麼要增加FPM的程序數
max listen queue:     4             #請求等待佇列最高的數量
listen queue len:     128           #socket等待佇列長度
idle processes:       2             #空閒程序數量
active processes:     1             #活躍程序數量
total processes:      3             #總程序數量
max active processes: 3             #最大的活躍程序數量(FPM啟動開始算)
max children reached: 0             #達到最大子程序的次數,如果值不為0,那麼需要調高最大程序數
slow requests:        0             #當啟用了php-fpm的slow-log功能時,如果出現php-fpm慢請求這個計數器會增加,一般不當的MySQL查詢會觸發這個值

其他狀態引數顯示形式的資料(json,xml,html)

#以xml的格式輸出PHP-fpm狀態頁
[[email protected]_Server nginx]# curl 127.0.0.1/status?xml
<?xml version="1.0" ?>
<status>
<pool>www</pool>
<process-manager>dynamic</process-manager>
<start-time>1516953418</start-time>
<start-since>3731</start-since>
<accepted-conn>647</accepted-conn>
<listen-queue>0</listen-queue>
<max-listen-queue>4</max-listen-queue>
<listen-queue-len>128</listen-queue-len>
<idle-processes>2</idle-processes>
<active-processes>1</active-processes>
<total-processes>3</total-processes>
<max-active-processes>3</max-active-processes>
<max-children-reached>0</max-children-reached>
<slow-requests>0</slow-requests>

#以json的格式輸出PHP-fpm的狀態頁
</status>[[email protected]_Server nginx]# curl 127.0.0.1/status?json
{"pool":"www","process manager":"dynamic","start time":1516953418,"start since":3736,"accepted conn":648,"listen queue":0,"max listen queue":4,"listen queue len":128,"idle processes":2,"active processes":1,"total processes":3,"max active processes":3,"max children reached":0,"slow requests":0}[[email protected]_Server nginx]# 

#以html的格式輸出PHP-fpm的狀態頁
[[email protected]_Server nginx]# curl 127.0.0.1/status?html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>PHP-FPM Status Page</title></head>
<body>
<table>
<tr><th>pool</th><td>www</td></tr>
<tr><th>process manager</th><td>dynamic</td></tr>
<tr><th>start time</th><td>26/Jan/2018:02:56:58 -0500</td></tr>
<tr><th>start since</th><td>3748</td></tr>
<tr><th>accepted conn</th><td>650</td></tr>
<tr><th>listen queue</th><td>0</td></tr>
<tr><th>max listen queue</th><td>4</td></tr>
<tr><th>listen queue len</th><td>128</td></tr>
<tr><th>idle processes</th><td>2</td></tr>
<tr><th>active processes</th><td>1</td></tr>
<tr><th>total processes</th><td>3</td></tr>
<tr><th>max active processes</th><td>3</td></tr>
<tr><th>max children reached</th><td>0</td></tr>
<tr><th>slow requests</th><td>0</td></tr>
</table>
</body></html>

4,。 在Zabbix agent端修改配置

在建立Zabbix的agent端鍵值配置檔案的時候,我們可以考慮利用PHP-fpm狀態頁的不同輸出格式來抓取資料。例如我們利用xml格式獲取資料,操作如下:

#檢視xml格式PHP-fpm狀態頁資料
[email protected]_Server nginx]# curl 127.0.0.1/status?xml
<?xml version="1.0" ?>
<status>
<pool>www</pool>
<process-manager>dynamic</process-manager>
<start-time>1516953418</start-time>
<start-since>3731</start-since>
<accepted-conn>647</accepted-conn>
<listen-queue>0</listen-queue>
<max-listen-queue>4</max-listen-queue>
<listen-queue-len>128</listen-queue-len>
<idle-processes>2</idle-processes>
<active-processes>1</active-processes>
<total-processes>3</total-processes>
<max-active-processes>3</max-active-processes>
<max-children-reached>0</max-children-reached>
<slow-requests>0</slow-requests>

#建立zabbix監控的agent端鍵值配置檔案(zabbix_server端)
[[email protected]_Server ~]# cd /etc/zabbix/zabbix_agentd.d/
[[email protected]_Server zabbix_agentd.d]# cat userparameter_php-fpm.conf 
UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<$1>" | awk -F "[>|<]" '{print $$3}'    #這裡需要注意在腳本里如果寫成$3的話,指令碼會認識是一個變數,因此我們需要用$$3

#重啟動agent客戶端
[[email protected]_Server ~]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
  1. 進行鍵值配置檔案測試
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "php-fpm.status[process-manager]"
dynamic
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "php-fpm.status[start-since]"
476
[[email protected] zabbix_agentd.d]# zabbix_get -s 192.168.238.128 -p 10050 -k "php-fpm.status[active-processes]"
1

  1. Zabbix圖形介面匯入我們的監控模版
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述

Zabbix的Web監測功能

Zabbix的Web監測功能,沒有任何依賴,不需要agent端,全部依賴於Server的主動監測

利用Web監測,監測Server端的nginx首頁

[[email protected] zabbix_agentd.d]# curl 127.0.0.1/nginx-status
Active connections: 2 
server accepts handled requests
 499 499 3036 
Reading: 0 Writing: 1 Waiting: 1 
[[email protected] zabbix_agentd.d]# curl -I 127.0.0.1/nginx-status
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Tue, 18 Dec 2018 17:44:54 GMT
Content-Type: text/plain
Connection: keep-alive

在這裡插入圖片描述

相關推薦

Zabbix監控平臺

Zabbix生產環境監測案例概述 專案規劃 主機分組 交換機(用SNMP監控) Nginx(用Agent監控) Tomcat(用JMX監控) MySQL Apache PHP-fpm redis(也有狀態頁,同學們自己研究) memcache(也有狀態頁,同學們自己研究) 監控

Zabbix監控平臺生產環境案例

Zabbix監控平臺(三)生產環境案例   一,Zabbix生產環境監測案例概述 1.1 專案規劃 1.2 SNMP監控流程 1.3 IPMI 1.4 JMX(使用Zabbix Java Gateway代理

Zabbix監控平臺搭建部署與概述。

Zabbix監控平臺(一)搭建部署與概述 Zabbix監控平臺   一,Zabbix架構 zabbix 是一個基於 WEB 介面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。zabbix 能監視各種網路引數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統

Zabbix監控平臺深入理解zabbix

一,Zabbix Web操作深入   1.1 Zabbix Web下的主機和模版以及監控項的新增方式   (1)建立一個模版 我們所有的功能幾乎都是在模版中定義的 我們再點進新建立的模版檢視 模版裡幾乎可以設定我們需要的所有功能

Zabbix監控平臺

Zabbix架構 zabbix 是一個基於 WEB 介面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。zabbix 能監視各種網路引數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。 zabbix架構: 一臺伺服器,搭建serve

Zabbix監控平臺

Zabbix Web操作深入 Zabbix Web下的主機和模版以及監控項的新增方式 (1)建立一個模版 我們所有的功能幾乎都是在模版中定義的 我們再點進新建立的模版檢視 模版裡幾乎可以設定我們需要的所有功能 (2)在模版裡建立應用集 應用集的作用就

Zabbix監控平臺搭建部署與概述

一、Zabbix架構 zabbix 是一個基於 WEB 介面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。zabbix 能監視各種網路引數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。 Zabbix 的執行架構如下圖所示: 1.1

Zabbix監控平臺深入瞭解

Zabbix監控(二)深入瞭解 一,Zabbix Web操作深入 1.1 Zabbix Web下的主機和模版以及監控項的新增方式 1.2 Zabbix Web下觸發器與表示式的編寫方法 1.3 Zabbix Web建立觸發器過程以及觸發器與監控項對應關係 1.4

zabbix 監控key

分鐘 xxxxx ldap cached zabbix用戶 written was not in cpuinfo Key 描述 返回值 參數 詳細說明 agent.hostname 返回被監控端名稱 字符串 - 返回配置文件中配置的被監控端的名稱 a

zabbix-告警方式

har nbsp 企業 get csharp 圖片 log blog 方式 目錄 onealert報警方式 微信告警方式 一、onealert報警方式 http://www.onealert.com   通過 OneAlert 提供的通知分派與排班策略,以及全方位

Django+xadmin打造在線教育平臺

cor 靜態 實現 span xadmin 下載 註冊頁面 用戶名 alt Django+xadmin打造在線教育平臺(三) 代碼 github下載 五、用戶註冊 主要實現功能 用戶輸入郵箱、密碼和驗證碼,點註冊按鈕 如果輸入的不正確,提示錯誤信息 如果正確,發

JEESITE快速開發平臺項目文件結構與配置文件詳解

lib http 說明 dep java ee 訪問時間 參數 windows -c 1. 文件結構 1.0. 源碼目錄 src/main/Java com.thinkgem.jeesite Jeesite平臺目錄 ├ common 公共模

Zabbix監控系統Zabbix管理之自動發現服務

1. 建立自動發現 配置->自動發現->建立發現規則 設定名稱 配置IP範圍 設定延遲時間 設定IP地址為唯一性準則 啟用發現規則 2. 建立動作 配置->動作->建立動作 2.1 設定執

Zabbix監控系統:初識Zabbix

一、Zabbix簡介 Zabbix 是由 Alexei Vladishev 開發的一種網路監視、管理系統,基於 Server-Client 架構。可用於監視各種網路服務、伺服器和網路機器等狀態。 使用各種 Database-end 如 MySQL, PostgreSQL, SQLite, O

資料實時監控平臺:Telegraf簡介及安裝

接著上一篇部落格:InfluxDB簡介及安裝,這篇部落格介紹下Linux環境下Telegraf安裝以及其功能特點。。。 官網地址:influxdata 官方文件:telegraf文件   環境:CentOS7.4 64位 Telegraf版本:0.11.1-1   一、Tel

數據實時監控平臺:Telegraf簡介及安裝

完成 成功 show user 官方文檔 targe 相關 erp tps 設計 接著上一篇博客:InfluxDB簡介及安裝,這篇博客介紹下Linux環境下Telegraf安裝以及其功能特點。。。 官網地址:influxdata 官方文檔:telegraf文檔 環境:C

項目在線教育平臺

har 登錄驗證 mod class true 技術 abs 姓名 ali 五、登錄功能 1、首頁和登錄頁面配置   將首頁的index.html和登錄頁面login.html前端文件拷貝到項目的templates文件夾內,如果需要前端初始文件請聯系我QQ:77906069

電商大資料分析平臺nginx配置及flume讀取日誌資訊

一、nginx配置 在本專案中nginx的作用只是接收客戶端傳送的事件,並將相應的session寫入日誌檔案中,所以配置較為簡單,只需要配置寫入的日誌檔案和寫入的格式 1.地址配置 server { listen

C#公眾平臺—— 生成帶引數的二維碼

遇到了一個需求,就是要生成客戶的專屬二維碼,要求掃碼後能關注訂閱號,並且將每個掃碼的人和這個二維碼所屬客戶繫結,但是系統用的是商戶號,商戶號不能繫結訂閱號,這就存在了怎麼確認是同一個客戶的問題。 生成帶引數的二維碼文件 基礎幫助類 unionid 只有在使用者將公眾號繫結到微信開

使用Kafka、Elasticsearch、Grafana搭建業務監控系統Elasticsearch

系列目錄 一、Elasticsearch是什麼 如果之前學習過ES基礎知識可以跳過,直接看spring整合ES Elasticsearch是一個基於Apache Lucene™的開源搜尋引擎。無論在開源還是專有領域,Lucene可以被認為是迄今為止最先進、效