實戰一:Zabbix監控Nginx服務
1、官網下載nginx包,並進行源碼編譯安裝
1、在官網進行下載源碼包,並解壓。
官網地址: https://nginx.org/en/download.html,下載14版,16版暫時兼容性較差。
[root@nginx ~]# cd /usr/local/src # 切換到此目錄下 [root@nginx src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz # 下載nginx源碼包 [root@nginx src]# tar xvf nginx-1.14.2.tar.gz # 解壓nginx源碼包
2、創建nginx用戶,並以nginx用戶啟動nginx服務
[root@nginx src]# useradd -r -s /sbin/nologin nginx
3、安裝依賴的包
[root@centos17src]#yum install gcc pcre-devel openssl-devel zlib-devel -y
4、開始configure編譯
[root@nginx nginx-1.14.2]#cd nginx-1.16.1/ ./configure --prefix=/apps/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module
5、開始make && make install 編譯。
[root@nginx nginx-1.14.2]# make -j 2 && make install
6、創建軟鏈接
[root@nginx nginx-1.14.2]# ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx # 創建軟鏈接(/usr/sbin/nginx) [root@nginx nginx-1.14.2]# nginx # 啟動nginx
7、將nginx服務設置為開機啟動
[root@centos17nginx-1.14.2]#vim /etc/rc.d/rc.local 寫入到默認的本地啟動服務位置 /usr/sbin/nginx 將nginx服務的路徑寫上 [root@centos17nginx-1.14.2]#chmod +x /etc/rc.d/rc.local # 加上執行權限
8、開始配置nginx服務的status狀態頁:vim /apps/nginx/conf/nginx.conf
location /nginx_status { # 訪問網頁的URL stub_status on; # 打開狀態頁 access_log off; #allow 127.0.0.1; #deny all; }
9、驗證nginx服務配置文件是否正確
[root@nginx nginx-1.14.2]# nginx -t # 檢查此時的nginx配置文件是否正確 nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
10、重新加載nginx服務,然后在網頁上訪問此時的nginx狀態頁
[root@nginx nginx-1.14.2]# nginx -s reload # 重新加載nginx服務
11、訪問網頁上的nginx狀態頁
以上網頁顯示的狀態頁含義:
Active connections: 當前處於活動狀態的客戶端連接數,包括連接等待空閑連接數。 accepts:統計總值,Nginx自啟動后已經接受的客戶端請求的總數。 handled:統計總值,Nginx自啟動后已經處理完成的客戶端請求的總數,通常等於accepts,除非有因worker_connections限制等被拒絕的連接。 requests:統計總值,Nginx自啟動后客戶端發來的總的請求數。 Reading:當前狀態,正在讀取客戶端請求報文首部的連接的連接數。 Writing:當前狀態,正在向客戶端發送響應報文過程中的連接數。 Waiting:當前狀態,正在等待客戶端發出請求的空閑連接數,開啟keep-alive的情況下,這個值等於active–(reading+writing)。
2、傳遞自定義的check_nginx.sh腳本,並配置zabbix-agent服務
(1)將自定義nginx腳本傳遞到此目錄下:/etc/zabbix/zabbix_agentd.d/(在安裝tomcat服務時,已經安裝zabbix-agent包,詳情請看https://www.cnblogs.com/struggle-1216/p/12307115.html)
[root@node2 zabbix_agentd.d]# cat check_nginx.sh #!/bin/bash # host=${2:-'127.0.0.1'} port=${3:-'80'} page=${4:-'nginx_status'} info=$(/usr/bin/curl --connect-timeout 5 -s http://${host}:${port}/${page} 2>/dev/null) code=$(/usr/bin/curl --connect-timeout 5 -o /dev/null -s -w %{http_code} http://${host}:${port}/${page}) proc=$(/usr/bin/pgrep nginx | wc -l) case "$1" in status) echo "$code $proc" | awk '{code=$1}{proc=$2}END{if(code == "200" && proc != 0){printf("%d\n",1)}else{printf("%d\n",0)}}' ;; active) echo "$info" | awk '/^Active/{var=$NF}END{if(var~/^[0-9]+$/){printf("%d\n",var)}else{printf("%d\n",0)}}' ;; reading) echo "$info" | awk '/Reading/ {print $2}' ;; writing) echo "$info" | awk '/Writing/ {print $4}' ;; waiting) echo "$info" | awk '/Waiting/ {print $6}' ;; accepts) echo "$info" | awk 'NR==3 {print $1}' ;; handled) echo "$info" | awk 'NR==3 {print $2}' ;; requests) echo "$info" | awk 'NR==3 {print $3}' ;; restimes) echo "$info" | awk 'BEGIN{OFMT="%.3f"} NR==3 {print $4/$3}' ;; *) echo "ZBX_NOTSUPPORTED" ;; esac
(2)加上執行權限
[root@node2 zabbix_agentd.d]# chmod +x check_nginx.sh
(3)在zabbix-server服務端查看是否可以執行
[root@node2 zabbix_agentd.d]# bash check_nginx.sh writing 1 [root@node2 zabbix_agentd.d]# bash check_nginx.sh status 1
(4)配置zabbix-agent文件: vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/check_nginx.sh $1 # 指定腳本的絕對路徑
(5)重新啟動zabbix-agent服務,並查看此時監聽的端口、運行狀態
[root@node2 zabbix_agentd.d]# systemctl restart zabbix-agent [root@node2 zabbix_agentd.d]# ss -nlt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 511 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 50 [::]:15833 [::]:* LISTEN 0 50 [::]:12345 [::]:* LISTEN 0 100 [::1]:25 [::]:* LISTEN 0 50 [::]:16867 [::]:* LISTEN 0 1 [::ffff:127.0.0.1]:8005 [::]:* LISTEN 0 100 [::]:8009 [::]:* LISTEN 0 100 [::]:8080 [::]:* LISTEN 0 128 [::]:22 [::]:* [root@node2 zabbix_agentd.d]# ps -ef |grep zabbix zabbix 49615 1 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 49616 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 49617 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 49618 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 49619 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 49620 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec] root 49630 43185 0 22:06 pts/1 00:00:00 grep --color=auto zabbix
3、在zabbix-server服務端進行測試zabbix-agent配置的腳本
(1)在zabbix-server服務端用zabbix_get命令查看結果,驗證效果,此時返回數值說明正常
[root@zabbix ~]# zabbix_get -s 192.168.7.102 -p 10050 -k "nginx.status[writing]" 1 [root@zabbix ~]# zabbix_get -s 192.168.7.102 -p 10050 -k "nginx.status[status]" 1 [root@zabbix ~]# zabbix_get -s 192.168.7.102 -p 10050 -k "nginx.status[waiting]" 0
4、開始在zabbix網頁上進行創建nginx監控模板
(1)自定義模板
(2)自定義模板名稱
(3)點擊剛才創建好的linux_nginx模板,然后點應用集,創建應用集
將創建的linux_nginx模板名稱關聯到nginx服務器的模板上(node2:192.168.7.102)
(4)創建監控項
對監控項進行命名,修改相關配置
(5)將創建好的監控項關聯到上面的nginx服務器上(也就是node2服務器:192.168.7.102主機)
(6)點擊剛才創建的linux_nginx模板,在監控其他指標時,就可以直接克隆,不需要再一個一個修改了,節約時間
(7)將上面的writing改為status即可,然后點擊添加。
(8)再繼續克隆,將writing改為active,以此類推,將剩下腳本里有的所有參數都克隆添加一下即可,這里只做測試,就只添加三個即可。
(9)創建圖形
(10)將上面添加的監控項一一對應
(11)三個圖形已經添加完,如下:
(12)此時檢查監控創建的圖形情況
在監控的過程中,如果我們遇到了Reading的值很大,怎么辦呢?
答:(1)可以進行增加服務器(2)查看服務器的CPU、磁盤IO是否正常,其他資源是否正常,后端響應時間是否正常,理論上reading很大,writing也會越大,而實際的waiting值比較大,reading和writing小才是正常的現象
創建監控nginx的80端口
(1)在以上創建linux_nginx的基礎上克隆一個新的監控項,用來監控nginx的80端口
(2)創建圖形即可
(3)查看監控圖形