zoukankan      html  css  js  c++  java
  • Zabbix 监控 Nginx(四)

    简介:

    如何使用 Zabbix 监控 Nginx 状态 ?

    1、获取 Nginx 状态( HTTP Stub Status )

    [root@localhost ~]# /apps/product/nginx/sbin/nginx -V
    nginx version: nginx/1.8.1
    built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
    built with OpenSSL 1.0.1e-fips 11 Feb 2013
    TLS SNI support enabled
    configure arguments: --prefix=/apps/product/nginx --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-file-aio --with-pcre

    #查看编译时有没有加入状态监控模块,如果没有需要单独加载

    2、配置 nginx.conf

    [root@localhost ~]# vim /apps/product/nginx/conf/nginx.conf
    
        location ~ /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        allow 10.10.100.147;
        deny all;
        }
    
    # 在虚拟主机 server {} 段中加入上面配置,也可以单独定义一个专门用于监控的虚拟主机。
    # deny all , 拒绝除 allow 中的主机之外所有主机访问此 URL ,实现过程中如果遇到 403 ,有可能是你把自己测试的机器拒绝了!

    3、Nginx 监控项解释

    [root@localhost ~]# curl http://127.0.0.1/nginx_status
    Active connections: 1 
    server accepts handled requests
     77671 77671 77666 
    Reading: 0 Writing: 1 Waiting: 0 

    # Active connections:  对后端发起的活动连接数
    # Server accepts handled requests: Nginx 总共处理了 77671 个连接,成功创建了 77671 次握手(没有失败次数),总共处理了 77666 个请求
    # Reading: Nginx 读取到客户端的 Header 信息数
    # Writing: Nginx 返回给客户端的 Header 信息数
    # Waiting: 开启 keep-alive 的情况下,这个值等于 active - ( reading + writing ), 意思是 Nginx已经处理完成,正在等待下一次请求指令的驻留连接
    # 在访问效率很高,请求很快被处理完毕的情况下,Waiting 数比较多是正常的。如果 reading + writing 数较多,则说明并发访问量很大,正在处理过程中

    4、编写脚本获取上面的 key 值

    [root@localhost ~]# vim /script/nginx_status.sh
    
    #!/bin/bash
    
    case $1 in
        active)
            curl -s http://127.0.0.1/nginx_status | awk '/Active/ {print $3}' ;;
        accepts)
            curl -s http://127.0.0.1/nginx_status | awk 'NR==3 {print $1}' ;;
        handled)
            curl -s http://127.0.0.1/nginx_status | awk 'NR==3 {print $2}' ;;
        requests)
            curl -s http://127.0.0.1/nginx_status | awk 'NR==3 {print $3}' ;;
        reading)
            curl -s http://127.0.0.1/nginx_status | awk '/Reading/ {print $2}' ;;
        writing)
            curl -s http://127.0.0.1/nginx_status | awk '/Writing/ {print $4}' ;;
        waiting)
            curl -s http://127.0.0.1/nginx_status | awk '/Waiting/ {print $6}' ;;
        *)
            echo "Usage: $0 { active | accepts | handled | requests | reading | writing | waiting }" ;;
    esac

    # 脚本使用 curl 结合 awk 来获取 key 的值。
    # -s 静默模式,如果不加 -s 参数,则获取到的结果是不正确的。

    [root@localhost ~]# chmod a+x /script/nginx_status.sh 

    5、添加自定义 key 配置文件

    [root@localhost ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf
    
    ## Nginx_status
    UserParameter=nginx.active,/script/nginx_status.sh active
    UserParameter=nginx.accepts,/script/nginx_status.sh accepts
    UserParameter=nginx.handled,/script/nginx_status.sh handled
    UserParameter=nginx.requests,/script/nginx_status.sh requests
    UserParameter=nginx.reading,/script/nginx_status.sh reading
    UserParameter=nginx.writing,/script/nginx_status.sh writing
    UserParameter=nginx.waiting,/script/nginx_status.sh waiting

    # 也可以直接加到 /etc/zabbix/zabbix_agentd.conf末尾

    [root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
    
    Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
    
    UnsafeUserParameters=1 # 允许自定义 Key

    # 添加上面配置

    5、重启 Zabbix_agentd

    [root@localhost ~]# /etc/init.d/zabbix-agent restart

    ## 注意,上面全部操作都是在被监控端

    6、Zabbix 服务端测试能否拿到 Key

    [root@localhost ~]# /usr/local/zabbix/bin/zabbix_get -s 10.10.100.24 -k nginx.active   
    1
    [root@localhost ~]# /usr/local/zabbix/bin/zabbix_get -s 10.10.100.24 -k nginx.requests        
    78182

    # 可以获取到 key 的值,说明配置没有问题了
    # 被监控端记得要开启 10050 端口

    7、Zabbix 监控 Nginx 状态

    # 接下来就是在zabbix Web 界面,创建模板、添加监控项了

    1.)创建模板

    # 一起跟着我点点点 Configuration --> Templates --> Create template
    
    Template name : Template App Nginx Service
    
    Groups In groups : Templates
    
    Update

    2.) 创建应用分组

    #现在又回到了模板页,跟我一起点 Template App Nginx Service 模板后面的 Applications --> Create application
    
    Name : Nginx status
    
    Update

    3.) 创建监控项

    #现在的位置是 Template App Nginx Service 模板中的 Applications 页面,跟我一起点击刚创建的 Nginx status 后面的 Items -> Create item

    Name : nginx active           ## 监控项名称
    
    Type : Zabbix agent            ## 监控类型,默认被动模式
    
    Key : nginx.active           ## 由于是自定义 Key ,所以要自己写上去。如果使用自带的 Key ,点击 Select 选择就可以了
    
    Type of information : Numeric( unsiqned )         ## 数据在进行类型转化之后存入数据库
    
        Numeric( unsiqned ) : 64 位无符号整数
        Numeric( float ) : 浮点数类型
        Character :  字符串类型数据,限制为 255B
        Log : 日志文件,必须使用的 Key 为 log[]
        Text : 文本,不限制大小
    
    Data type : Decimal                 # 数据类型用于存储 Items 中 Key 所获取的数值值,存储在不同的表中,如:history 、history_str 等表
    
        Boolean : 在数据存储时将原本的值替换为 01,TRUE 存储为 1 ,FALSE 存储为 0 ,所有的值都区分大小写( 任何非零都为 TRUE ,0 为 FALSE )
        Octal : 八进制数的数值格式
        Decimal : 十进制数的数值格式
        Hexadecimal : 十六进制数的数值格式
    
        ## Zabbix 自动执行数据类型的格式转换
    
    Units : 留空                          ## 单位符号,Zabbix 会自动处理接收到的数据,并且把数据转换为需要显示的格式
    
    Use custom multiplier : 不勾选             ## 如果开启,所接收到的数据会被乘以整数或浮点数。该选项用于单位换算,KB 、MBps 换为 B 、Bps 等
    
    Update interval( in sec ) : 30          ## 间隔多长时间通过 Items 收集数据,单位 秒
    
        Flexible intervals :              ## 用于设置不同时间段收集数据的间隔不同,如果设置,则此时间段按这个间隔,其余的按上面参数的间隔
    
        New flexible interval Interval( in sec ) : 50 Period 1-7,00:00-24:00 Add :     ## 通过这里来添加一个新的时间段
    
    History storage period( in days ) : 90     ## 历史数据保留时间
    
    Trend storage period( in days ) : 365     ## 趋势数据保留时间
    
    Store value : As is     ## 数据存储时的类型
    
        As is : 无预处理
    
        Delta( speed per second ) : 显示每秒速率的值( 例如网卡流量 )
    
        Delta( simple change ) : 显示本次数值与上次数值的差值
    
    Show value : As is           ## 无预处理( 数据显示时的类型,值映射:将接收到的值映射为一个状态,不改变原值,只改变显示结果,例如将 1 映射为 Nginx service states )
    
    New application : 留空              ## 创建一个新的应用分组
    
    Applications : Nginx status             ## 选择一个已有的应用分组
    
    Populates host inventory field : None     ## 将此 Item 分配给某个资产管理组
    
    Description : 留空                                ## 对 Item 的描述信息
    
    Enabled : 勾选                                    ## 开启此 Item
    
    Add
    
    ## 分别定义 active | accepts | handled | requests | reading | writing | waiting 即可

    8、将模板应用到主机

    1.> 如果没有主机,跟着我点点点 Configuration -> Hosts -> Create host

    Host name : 10.10.100.24   ## 被监控端 IP( 这里要写被监控端 zabbix_agentd.conf 文件中 Hostname 的值 )
    
    Visible name : 24_report_monitor     ## 定义一个别名( 要显示的名字 )
    
    Groups In groups : H2   ## 选择加入到一个主机组中
    
    New group : 留空 ## 自定义一个主机分组
    
    Agent interfaces : ## 接口协议
    
    IP address : 10.10.100.24 ## 被监控端的 IP
    
    DNS name : 留空 ## 监控主机能够解析的名称
    
    Connect to : IP ## 选择什么方式
    
    Port : 10050 ## 被监控端要开放此端口
    
    Description : 留空 ## 对主机的描述信息
    
    Monitored by proxy : no proxy ## 不使用代理
    
    Enabled : 勾选 ## 开启监控 ( Monitored 代表主机可用,已被监控中;Not monitored 代表主机不可用,不被监控 )
    
    Add ## 代表主机添加完成( 这里先不点的啦,一并把模板链接上 )选择当前页面中的 Templates
    
    2.> 现在的位置是主机页中的模板选项卡中,跟着我点点点 Select
    
    新页面中选择 Template App Nginx Service 之后又返回来了,点击 Add 这样就成功链接模板了
    
    Add ## 最后来一次就可以啦
    

    9.) 看一下劳动成果咯

    1.> 跟着我点点点 Configuration --> Hosts

    # 你会看到刚添加的主机,它有一个 Applications,7 个 Items ,看到链接了模板,状态为 Enabled 。

    2.> 跟着我点点点 Monitoring -> Latest data

    Hosts : Select 一下刚创建的主机,注意:它在分组里面,点击 Filter
    
    # 现在,你有没有看到 7 个监控项,并且都获取到了数据的

    10、给主机添加一个 Graph(图表)

    1.> 跟着我点点点 Configuration -> Hosts 之后,点击刚创建的主机后面的 Graphs 就可以创建图表了

     # 我临时改变主意了,直接去模板里创建比较好,这样就不用给每台主机创建了

    2.> 跟着我点点点 Configuration -> Templates 之后,点击刚创建的模板后面的 Graphs -> Create graph

    Name : Nginx status     ## 图表名称
    
    width : 900                 ## 宽度
    
    height : 200                ## 高度
    
    Graph type : Normal    ## 图表类型
    
        Normal :         常规图表,值用线条表示
        Stacked :     叠图
        pie :             饼图
        Exploded :  分解饼图
    
    Show legend : 勾选                    ## 显示图表说明
    
    Show working time : 勾选                   ## 非 "工作时间" 用灰色表示,不有用于饼图跟分解饼图。
    
    Show triggers : 勾选                  ## 触发达到阈值会用红色线条显示,不能用于饼图跟分解饼图,只有部分触发器函数支持,如 min 、max
    
    Percentile line( left ) : 不勾选      ## 左边的 Y 轴用来显示百分比,仅对常规图表适用
    
    Percentile line( right ) : 不勾选     ## 右边的 Y 轴用来显示百分比,仅对常规图表适用
    
    Y axix MIN value : Calculated             ## 自动计算 Y 轴最小值
    Y axis MAX value : Calculated              ## 自动计算 Y 轴最大值
    
    Items                                 ## 点击 Add 将之前的 7 个 item 都添加到一张图中
    
        Name : Item 的名称显示的数据
    
        Function : 当一个 Item 存在不止一个值时,显示哪一个数据( all 全部 ,min 仅最小值 ,avg 仅平均值 ,max 仅最大值)
    
        Draw style : Line                ## 仅对常规图表适用,对叠图填充区域适用
    
            Line :画线条
    
            Filled region : 画填充区域
    
            Bold line : 画粗线
    
            Dot : 画圆点
    
            Dashed line : 画虚线
    
        Y axis side : Left                 ## Y 轴的左侧分给元素
    
        Colour : 每种元素代表的颜色
    
    Add                                       ## 完成 Graph 创建,如果在主机中,可以通过第二选项卡 Preview 查看

    11.)查看 Graph

    # 由于之前已经引用了模板,所以现在主机中自动就有了此 Graph

    > 跟着我点点点 Monitoring -> Graphs 就可以查看各监控图表了.

    参考文档:

    http://www.cnblogs.com/wangxiaoqiangs/archive/2016/04/20/5412111.html

  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/saneri/p/6061029.html
Copyright © 2011-2022 走看看