Zabbix之三---Zabbix监控Nginx服务

实战一:Zabbix监控Nginx服务

1、官网下载nginx包,并进行源码编译安装

1、在官网进行下载源码包,并解压。

官网地址: https://nginx.org/en/download.html,下载14版,16版暂时兼容性较差

[root@nginx ~]# cd /usr/local/old-src # 切换到此目录下
[root@nginx old-src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz  # 下载nginx源码包
[root@nginx old-src]# tar xvf nginx-1.14.2.tar.gz  # 解压nginx源码包

2、创建nginx用户,并以nginx用户启动nginx服务

[root@nginx old-src]# useradd -r -s /sbin/nologin  nginx

3、安装依赖的包

[root@centos17old-src]#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)查看监控图形

![]()

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。