zoukankan      html  css  js  c++  java
  • zabbix监控nginx

    nginx是常用的web服务器,需要使用zabbix监控nginx,首先nginx需要配置ngx_status ,使nginx支持采集数据(开启监控页面)

    如果是编译安装的nginx,你编译安装的时候需要增加编译模块参数--with-http_stub_status_module

    官方配置说明http://nginx.org/en/docs/http/ngx_http_stub_status_module.html

    可以采集到的指标类型

    Active connections

    当前活动客户端连接的数量,包括Waiting连接

    accepts

    接受的客户端连接的总数

    Handled

    已处理的连接总数。通常,参数值与accepts 除非达到某些资源限制(例如, worker_connections限制)相同

    requests

    客户端请求的总数

    Reading

    当前nginx正在读取请求头的连接数

    Writing

    当前nginx将响应写回客户端的连接数

    Waiting

    当前等待请求的空闲客户端连接数

    1、在agent端启用nginx的status模块

    编辑nginx配置文件

    [root@web01 ~]# vim /etc/nginx/nginx.conf

    location /ngx_status {

    stub_status ;    #开启访问功能stub_status功能

    access_log off;    #关闭访问日志

    allow 127.0.0.1;    #允许访问的ip

    allow 10.0.0.0/24;    

    deny all;    #拒绝除了允许的ip外的所有ip访问

    }

    修改完后重启nginx

    [root@web01 ~]# nginx -t

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

    nginx: configuration file /etc/nginx/nginx.conf test is successful

    [root@web01 ~]# nginx -s reload

    2、命令行手动测试取值

    [root@web01 ~]# curl http://127.0.0.1/ngx_status

    Active connections: 1

    server accepts handled requests

    81 81 135

    Reading: 0 Writing: 1 Waiting: 0

    3、定义监控项的key值并编写脚本

    创建zabbix_agentd关联nginx status的子配置文件

    [root@web01 ~]# cd /etc/zabbix/zabbix_agentd.d/

    [root@web01 zabbix_agentd.d]# vim ngx_status.conf

    UserParameter=nginx.status[*],/service/scripts/ngx_status.sh $1        #定义key为nginx.status,传入参数$1

    [root@web01 zabbix_agentd.d]# systemctl restart zabbix-agent.service    #重启服务

    编写脚本对每一个指标进行取值

    [root@web01 scripts]# pwd

    /service/scripts

    [root@web01 scripts]# vim ngx_status.sh

    #!/bin/bash

    HOST="127.0.0.1"

    PORT="80"

    # 检测nginx进程是否存在

    function ping {

    /sbin/pidof nginx | wc -l

    }

    # 检测nginx性能

    function active {

    /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'

    }

    function reading {

    /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'

    }

    function writing {

    /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'

    }

    function waiting {

    /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'

    }

    function accepts {

    /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'

    }

    function handled {

    /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'

    }

    function requests {

    /usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'

    }

    # 执行function

    $

    为脚本添加执行权限

    [root@web01 scripts]# chmod +x ngx_status.sh

    [root@web01 scripts]# ll

    总用量 4

    -rwxr-xr-x 1 root root 978 6月 13 10:13 ngx_status.sh

    4、web界面配置或导入模板

    模板的配置可以选择手动配置,手动配置模板的步骤不做过多介绍。

    另外一种方式为导入配置好的模板

    点击:配置——>模板——>导入,选择下载的模板文件并上传

    5、主机链接模板

    选择需要监控nginx的主机,链接nginx模板

    6、测试和检查

    在zabbix server端测试通过命令行任选一个监控项进行测试

    [root@zabbix ~]# zabbix_get -s 192.168.1.7 -k nginx.status[requests]

    470

    测试成功后到web界面查看最新数据

    对多个主机监控

    server端增加监控项(模板),链接所有需要监控的主机

    7、模板调整和优化

    7.1 添加计算类型的监控项,得到nginx请求丢失数

    对nginx的监控不仅仅是采集到上面每一项的数值,常常需要更直观的查看到某些数据,例如需要得到nginx请求丢失数,这就需要自定义一个计算类型的监控项,计算方法为已处理的连接总数(Handled)-接受的客户端连接的总数(accepts)

    关于计算监控项:https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes/calculated

    点击:配置——>模板,找到上面导入的nginx模板,点击监控项——>创建监控项

    公式为last("web01:nginx.status[handled]")-last("web01:nginx.status[accepts]")

    7.2 通过zabbix内置key,net.tcp.listen[port],监控nginx 80端口是否存在

    命令行测试:

    [root@zabbix ~]# zabbix_get -s 192.168.1.7 -k "net.tcp.listen[80]"

    1

    web界面新增监控项

    查看值这一项选择值映射即Service state服务状态

    刷新zabbix_server的缓存得到最新数据

    [root@zabbix ~]# zabbix_server -R config_cache_reload

    zabbix_server [30663]: command sent successfully

    采集到的最新数据如下

    7.3 通过zabbix内置key,proc.num[<name>,<user>,<state>,<cmdline>],监控nginx的进程数

    命令行测试

    [root@zabbix ~]# zabbix_get -s 192.168.1.7 -k "proc.num[nginx]"

    2        #nginx默认的进程数量为worker和master两个

    这里的nginx进程数为2,这个值是在nginx配置文件中设置不变的(worker_processes)

    此值长期不变,也可以不进行监控

    7.4 创建触发器

    根据实际情况创建需要的触发器触发报警

     

    博主原创文章,转载请务必注明出处

  • 相关阅读:
    MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用
    MVC5+EF6 入门完整教程十
    MVC5+EF6 入门完整教程九
    MVC5+EF6 入门完整教程八
    MVC5+EF6 入门完整教程七
    MVC5+EF6 入门完整教程六
    MVC5+EF6 入门完整教程五
    MVC5+EF6 入门完整教程四
    MVC5 + EF6 完整入门教程三
    从前端的UI开始
  • 原文地址:https://www.cnblogs.com/ssgeek/p/9227441.html
Copyright © 2011-2022 走看看