Zabbix之三---Zabbix监控Nginx服务及nginx的80端口状态

实战一: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)查看监控图形

 

 

  

 

  

  

  

  

  

  

  

  

  

  

posted @ 2020-02-28 22:34  一叶知秋~~  阅读(2532)  评论(0编辑  收藏  举报