zoukankan      html  css  js  c++  java
  • 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
    ",1)}else{printf("%d
    ",0)}}'
        ;;
      active)
        echo "$info" | awk '/^Active/{var=$NF}END{if(var~/^[0-9]+$/){printf("%d
    ",var)}else{printf("%d
    ",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)查看监控图形

      

     

      

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    python3 内置函数
    python3 模块和包
    python3 面向对象编程
    vue.js的devtools安装
    数组对象排序
    插件资源库
    Vue.js 2.0生命周期
    vue学习--自定义全局vue组件
    搭建VUE项目
    入职新公司
  • 原文地址:https://www.cnblogs.com/struggle-1216/p/12347283.html
Copyright © 2011-2022 走看看