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端創建一個主動模式的代理
5.zabbix-server的web端創建nginx模板
1)nginx_status模板創建
2)監控項創建
3)創建好的所有的nginx監控項
4)創建觸發器
5)創建好的兩個nginx觸發器
6)創建當前狀態圖形
7)創建累計狀態圖形
8)再創建一個nginx監聽端口狀態圖
9)創建聚合圖形
10)將前面的監控圖形添加聚合圖形裏,點擊構造函數
11)點擊更改進入添加界面
12)可以看到已成功添加監控圖形到聚合圖形裏
13)查看創建好的圖形
14)nginx_status狀態模板創建完成
6.zabbix-server的web端添加監控主機
1)添加監控主機zabbix-agent並添加一個主動模式的代理
2)添加一個模板
3)添加完成
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狀態頁累積狀態圖
2)nginx狀態頁當前狀態圖
3)查看nginx監聽端口狀態圖,顯示正常
9.web端建立郵件通知和創建nginx服務自愈動作
1)點擊創建媒介類型
2)創建媒介類型,填寫媒介類型信息,要求qq郵箱預先開啓smtp服務
3)可以查看到已成功添加媒介類型
4)進入用戶界面選擇admin賬戶
選擇admin賬戶
5)在選擇報警媒介
6)添加創建好的媒介類型到此用戶
7) 創建一個動作
8)在動作欄下添加觸發條件
9)在操作欄添加一遠程命令
10)操作欄再添加一個宕機通知信息,以及指定郵件的接收方
11)恢復操作欄添加恢復消息,同樣指定郵件的接收者
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端觸了發儀表盤報警
4)接收到報警郵箱通知,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)
……