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 [email protected] 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賬戶

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 nginx

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)

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)
……

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

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章