zabbix實現對nginx監控並實現nginx服務自愈

zabbix實現對nginx監控並實現nginx服務自愈

1.zabbix-server端(ubuntu1804)

1)必要的軟件包

zabbix-server-mysql 
zabbix-frontend-php

2)啓動的服務

State                    Recv-Q                    Send-Q                             Local Address:Port                               Peer Address:Port                                                                                                                                                                                                                  
LISTEN                   0                           128                                       0.0.0.0:10051                                     0.0.0.0:*                       
users:(("zabbix_server",pid=3991,fd=4),("zabbix_server",pid=3990,fd=4),("zabbix_server",pid=3989,fd=4)……
……
LISTEN                   0                           80                                          192.168.1.14:3306                              0.0.0.0:*                     
    users:(("mysqld",pid=1461,fd=20))   
……                                                                                                                               
LISTEN                   0                         128                                           *:80                                                    *:*                      
 users:(("apache2",pid=4105,fd=4),("apache2",pid=4100,fd=4),("apache2",pid=4091,fd=4),("apache2",pid=3904,fd=4),
("apache2",pid=3900,fd=4),("apache2",pid=3801,fd=4),("apache2",pid=3576,fd=4),("apache2",pid=3501,fd=4),("apache2",
pid=3404,fd=4),("apache2",pid=1620,fd=4),("apache2",pid=1587,fd=4))
……

3)建立proxy代理端的受權數據庫

MariaDB [(none)]> create database zabbix_proxy_active character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_proxy_active.* to zabbix_proxy_active@192.168.1.20 identified by 'zabbix_proxy_active';

2.zabbix-proxy代理服務端(ubuntu1804)

1)必要的軟件包

zabbix-proxy-mysql

2)配置proxy配置文件

root@ubuntu1804:/etc/zabbix# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
ProxyMode=0  #主動模式
Server=192.168.1.14
Hostname=zabbix_proxy_active
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
EnableRemoteCommands=1 #開啓容許遠程命令
LogRemoteCommands=1
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=192.168.1.14
DBName=zabbix_proxy_active
DBUser=zabbix_proxy_active
DBPassword=zabbix_proxy_active
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=30
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=3000

3)測試是否可以登陸數據庫

root@ubuntu1804:~# mysql -uzabbix_proxy_active -pzabbix_proxy_active -h192.168.1.14
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6951
Server version: 10.1.40-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| zabbix_proxy_active |
+---------------------+
2 rows in set (0.00 sec)

4)數據庫初始化

zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix_proxy_active -pzabbix_proxy_active 
-h192.168.1.14 zabbix_proxy_active

5)啓動服務

root@ubuntu1804:~# systemctl restart zabbix-proxy
root@ubuntu1804:~# systemctl enable zabbix-proxy

6)查看啓動的服務

root@ubuntu1804:~# ss -tnlp
State                    Recv-Q                    Send-Q                                        Local Address:Port                                        Peer Address:Port                                                                                                                                                                                                                  
LISTEN                   0                         128                                                 0.0.0.0:10051                                            0.0.0.0:*                      
 users:(("zabbix_proxy",pid=3559,fd=4),("zabbix_proxy",pid=3558,fd=4),("zabbix_proxy",pid=3557,fd=4),("zabbix_proxy",pid=3556,fd=4),("zabbix_proxy",pid=3555,fd=4),("zabbix_proxy",pid=3554,fd=4),("zabbix_proxy",pid=3553,fd=4),("zabbix_proxy",pid=3552,fd=4),("zabbix_proxy",pid=3551,fd=4),("zabbix_proxy",pid=3550,fd=4),("zabbix_proxy",pid=3549,fd=4),("zabbix_proxy",pid=3548,fd=4),("zabbix_proxy",pid=3547,fd=4),("zabbix_proxy",pid=3546,fd=4),("zabbix_proxy",pid=3545,fd=4),("zabbix_proxy",pid=3544,fd=4),("zabbix_proxy",pid=3543,fd=4),("zabbix_proxy",pid=3542,fd=4),("zabbix_proxy",pid=3541,fd=4),("zabbix_proxy",pid=3540,fd=4),("zabbix_proxy",pid=3539,fd=4),("zabbix_proxy",pid=3538,fd=4),("zabbix_proxy",pid=3537,fd=4),("zabbix_proxy",pid=3536,fd=4),("zabbix_proxy",pid=3525,fd=4))
LISTEN                   0                         80                                                  0.0.0.0:3306                                             0.0.0.0:*                      
 users:(("mysqld",pid=4094,fd=17))
……

3.zabbix-agent客戶端(centos7.6)

1)安裝必要的包

zabbix-agent
nginx

2)配置agent配置文件

[root@nginx zabbix_agentd.d]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1  #必定要開啓,不然致使沒法執行遠程命令
Server=192.168.1.14,192.168.1.20  #同時指定server端和proxy代理端
ServerActive=192.168.1.20  #指定主動模式的proxy代理端
Hostname=192.168.1.16  #給本機指定一個主機名,web端上天添加的主機名必須和此處主機名相同,不然會致使數據採集失敗
Timeout=30
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1  #支持遠程命令傳輸的特殊字符,也必須開啓

3)修改nginx配置文件,打開nginx訪問狀態頁

[root@nginx ~]# vim /etc/nginx/nginx.conf
                ……
server {
                listen       8080 default_server;   #改成監聽8080端口
                listen       [::]:8080 default_server;
                server_name  _;
                root         /usr/share/nginx/html;
                ……
                location / {
                }
             location /nginx_status {   #打開狀態頁
                     stub_status;
                     alllow 127.0.0.1;#容許本地訪問
                    deny all;#爲安全,除了本地,其餘主機均不可訪問狀態頁
             }
             ……

4)建立nginx的key值採集腳本,並賦予腳本執行權限

[root@nginx ~]# vim /etc/zabbix/zabbix_agentd.d/nginx.sh
nginx_status(){
nginx_port=$1
nginx_cmd=$2
ip=`ifconfig eth0 | awk NR==2 | awk '{print $2}'`   #取出本機的ip地址
nginx_active(){
curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | grep Active | awk '{print $NF}'  #取出當前客戶端活動鏈接數
}
nginx_accepts(){
curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | awk NR==3 | awk '{print $1}'  #取出累積接收客戶端請求鏈接的鏈接數
}
nginx_handled(){
curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | awk NR==3 | awk '{print $2}'  #取出累積客戶端請求處理數
}
nginx_requests(){
curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | awk NR==3 | awk '{print $3}'  #取出累積的客戶端總共發送的請求數 
}
nginx_reading(){
curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | awk NR==4 | awk '{print $2}'  #取出當前正在讀取客戶端請求報文首部鏈接的鏈接數
}
nginx_writing(){
curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | awk NR==4 | awk '{print $4}'  #取出當前正在向客戶端發送響應報文鏈接的鏈接數
}
nginx_waiting(){
curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | awk NR==4 | awk '{print $6}'  #取出當前正在等待客戶端發來請求空閒鏈接的鏈接數
}
nginx_connecting(){
charactor=`curl ${ip}:${nginx_port}/nginx_status 2> /dev/null | grep -o Active`   #判斷nginx服務是否爲運行狀態
if [ "$charactor" == "Active" ];then
 echo 0; #0表示能夠鏈接nginx服務
else
 echo 10; #10表示是沒法鏈接到nginx服務,服務關閉
fi
}
case $nginx_cmd in
         active)
         nginx_active
         ;;
         accepts)
         nginx_accepts
         ;;
         handled)
         nginx_handled
         ;;
         requests)
         nginx_requests
         ;;
         reading)
         nginx_reading
         ;;
         writing)
         nginx_writing
         ;;
         waiting)
         nginx_waiting
         ;;
         connecting)
         nginx_connecting
         ;;
esac
}
nginx_status $1 $2

5)配置監控項key值配置文件

[root@nginx ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status_monitor.conf
UserParameter=nginx_status[*],/etc/zabbix/zabbix_agentd.d/nginx.sh $1 $2

6)查看編輯好的用於建立nginx模板所需的採集腳本文件和key值配置文件

[root@nginx ~]# ll /etc/zabbix/zabbix_agentd.d/
total 8
-rwxr-xr-x 1 root root 1350 Jul 19 20:37 nginx.sh
-rw-r--r-- 1 root root   74 Jul 19 20:43 nginx_status_monitor.conf

7)啓動agent和nginx兩個服務

[root@nginx ~]# systemctl restart zabbix-agent
[root@nginx ~]# systemctl enable zabbix-agent
[root@nginx ~]# systemctl start nginx
[root@nginx ~]# systemctl enable nginx

8)查看啓動的服務

[root@nginx ~]# ss -tnlp
State       Recv-Q Send-Q                                                  Local Address:Port                                                 Peer Address:Port              
LISTEN      0      511                                                                 *:8080                                                                *:*                   
users:(("nginx",pid=50295,fd=6),("nginx",pid=50294,fd=6),("nginx",pid=50293,fd=6),("nginx",pid=50292,fd=6),
("nginx",pid=50291,fd=6))
LISTEN      0      128                                                                 *:10050                                                               *:*   
……              
    users:(("zabbix_agentd",pid=43802,fd=4),("zabbix_agentd",pid=43801,fd=4),("zabbix_agentd",pid=43800,fd=4),
("zabbix_agentd",pid=43799,fd=4),("zabbix_agentd",pid=43798,fd=4),("zabbix_agentd",pid=43797,fd=4))
……

9)測試訪問nginx狀態頁

[root@nginx ~]# curl 127.0.0.1:8080/nginx_status
Active connections: 1 
server accepts handled requests
 1 1 1 
Reading: 0 Writing: 1 Waiting: 0

10)將zabbix用戶提高爲sudo超級用戶

[root@nginx ~]# vim /etc/sudoers
    #Defaults    requiretty   #必定要註釋掉此行,會致使sudo超級用戶沒法執行遠程命令
    ……
  ## Allow root to run any commands anywhere 
        root    ALL=(ALL)       ALL
        zabbix  ALL=(ALL)       NOPASSWD: ALL   
……

4.zabbix-server的web端建立一個主動模式的代理

zabbix實現對nginx監控並實現nginx服務自愈

5.zabbix-server的web端建立nginx模板

1)nginx_status模板建立

zabbix實現對nginx監控並實現nginx服務自愈

2)監控項建立

zabbix實現對nginx監控並實現nginx服務自愈

3)建立好的全部的nginx監控項

zabbix實現對nginx監控並實現nginx服務自愈

4)建立觸發器

zabbix實現對nginx監控並實現nginx服務自愈

5)建立好的兩個nginx觸發器

zabbix實現對nginx監控並實現nginx服務自愈

6)建立當前狀態圖形

zabbix實現對nginx監控並實現nginx服務自愈

7)建立累計狀態圖形

zabbix實現對nginx監控並實現nginx服務自愈

8)再建立一個nginx監聽端口狀態圖

zabbix實現對nginx監控並實現nginx服務自愈

9)建立聚合圖形

zabbix實現對nginx監控並實現nginx服務自愈

10)將前面的監控圖形添加聚合圖形裏,點擊構造函數

zabbix實現對nginx監控並實現nginx服務自愈

11)點擊更改進入添加界面

zabbix實現對nginx監控並實現nginx服務自愈

12)能夠看到已成功添加監控圖形到聚合圖形裏

zabbix實現對nginx監控並實現nginx服務自愈

13)查看建立好的圖形

zabbix實現對nginx監控並實現nginx服務自愈

14)nginx_status狀態模板建立完成

zabbix實現對nginx監控並實現nginx服務自愈

6.zabbix-server的web端添加監控主機

1)添加監控主機zabbix-agent並添加一個主動模式的代理

zabbix實現對nginx監控並實現nginx服務自愈

2)添加一個模板

zabbix實現對nginx監控並實現nginx服務自愈

3)添加完成

zabbix實現對nginx監控並實現nginx服務自愈

7.分別在zabbix-server端和zabbix-proxy端測試nginx服務的key值採集

1)分別下載zabbix-get測試工具

root@ubuntu1804:~# apt-get install zabbix-get -y

2)鏈接狀態測試

root@ubuntu1804:~# zabbix_get -s 192.168.1.16 -p 10050 -k nginx_status[8080,connecting]
0

3)接收客戶端發送的請求鏈接的鏈接數測試

root@ubuntu1804:~# zabbix_get -s 192.168.1.16 -p 10050 -k nginx_status[8080,accepts]
5

4)正在讀取客戶端請求報文首部鏈接的鏈接數測試

root@ubuntu1804:~# zabbix_get -s 192.168.1.16 -p 10050 -k nginx_status[8080,reading]
0

8.web端查看監控主機zabbix-agent採集數據圖形

1)nginx狀態頁累積狀態圖

zabbix實現對nginx監控並實現nginx服務自愈

2)nginx狀態頁當前狀態圖

zabbix實現對nginx監控並實現nginx服務自愈

3)查看nginx監聽端口狀態圖,顯示正常

zabbix實現對nginx監控並實現nginx服務自愈

9.web端創建郵件通知和建立nginx服務自愈動做

1)點擊建立媒介類型

zabbix實現對nginx監控並實現nginx服務自愈

2)建立媒介類型,填寫媒介類型信息,要求qq郵箱預先開啓smtp服務

zabbix實現對nginx監控並實現nginx服務自愈

3)能夠查看到已成功添加媒介類型

zabbix實現對nginx監控並實現nginx服務自愈

4)進入用戶界面選擇admin帳戶

選擇admin帳戶php

zabbix實現對nginx監控並實現nginx服務自愈

5)在選擇報警媒介

zabbix實現對nginx監控並實現nginx服務自愈

6)添加建立好的媒介類型到此用戶

zabbix實現對nginx監控並實現nginx服務自愈

7) 建立一個動做

zabbix實現對nginx監控並實現nginx服務自愈

8)在動做欄下添加觸發條件

zabbix實現對nginx監控並實現nginx服務自愈

9)在操做欄添加一遠程命令

zabbix實現對nginx監控並實現nginx服務自愈

10)操做欄再添加一個宕機通知信息,以及指定郵件的接收方

zabbix實現對nginx監控並實現nginx服務自愈

11)恢復操做欄添加恢復消息,一樣指定郵件的接收者

zabbix實現對nginx監控並實現nginx服務自愈

10.測試nginx服務是否能接收到郵件通知以及實現自愈功能

1)先在在zabbix-agent客戶端將nginx服務關閉

[root@nginx zabbix_agentd.d]# systemctl stop nginxhtml

2)再zabbix-agent客戶端快速查看nginx服務的狀態,服務已經被關閉

[root@nginx ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: inactive (dead)mysql

3)nginx服務關閉後,在web端觸了發儀表盤報警

zabbix實現對nginx監控並實現nginx服務自愈

4)接收到報警郵箱通知,nginx服務器斷開鏈接

zabbix實現對nginx監控並實現nginx服務自愈

5)間隔3-5秒後,發現nginx服務自動重啓,實現自愈

[root@nginx zabbix_agentd.d]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2019-07-19 16:43:10 CST; 12min ago
Process: 50272 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 50245 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 50243 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
……nginx

6)在web端查看nginx-8080監聽圖形,數值從超出警惕線到降低恢復到正常值

zabbix實現對nginx監控並實現nginx服務自愈

7)儀表盤又自動恢復正常

zabbix實現對nginx監控並實現nginx服務自愈

8)接收到故障自動恢復成功的郵箱通知

zabbix實現對nginx監控並實現nginx服務自愈

相關文章
相關標籤/搜索