聆雨亭

道听途说nginx系列11 - Zabbix集成

2015-12-06

阅读:

字数:3117


“test-jb-setup”

1、问题提出

想要上一套监控系统,所以研究了一点点ngix对外提供监控的方法,目前了解的情况,nginx对外提供监控的方法是设置一个url地址,里面加一个特殊的参数。

2、解决过程

#2.1、 nginx配置

在location里面顶一个监控需要的地址,如下:

    
  location /ngx_status {  
  		stub_status on;  
        access_log off;  
        allow 127.0.0.1;  
        allow 10.162.67.111;  
        deny all;  
  }  
  

这里有3个关键参数:

  • stub_status on
    它表示这个地址匹配的结果是提供统计信息。
  • allow 127.0.0.1等
    它表示允许访问该服务的地址,多个不知道是用什么分隔的,新行是可以的。 对于zabbix监控而言,zabbix主机并不会直接访问,而是通过本地进程实现。所以开放给127.0.0.1就可以了
  • deny all;
    不加这个,前面加了也不会生效,拒绝其他地址连接
  • access_log off;
    这个不需要开启,直接关闭好了

#2.2、 zabbix-agent配置

本质上,zabbix对nginx的监控是通过zabbix-agent来完成的,所以需要借助zabbix-agent的功能来实现。

  • 创建执行文件
   
  mkdir /etc/zabbix/scripts
  vim /etc/zabbix/scripts/ngx_status.sh 

  #!/bin/bash    
  # DateTime: 2015-10-25  
  # AUTHOR:凉白开  
  # WEBSITE: http://www.ttlsa.com  
  # Description:zabbix监控nginx性能以及进程状态  
  # Note:此脚本需要配置在被监控端,否则ping检测将会得到不符合预期的结果  
   
  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  
  $1   
  
  
  • 设置权限
  
  chmod +x /etc/zabbix/scripts/ngx_status.sh   
  
  • 监控设置
 
  cat << EOF > /etc/zabbix/zabbix_agent.d/userparameter_nginx.conf  
  >UserParameter=nginx.status[*],/etc/zabbix/scripts/ngx_status.sh $1  
  >EOF  
  
  • 重启
  
  service zabbix-agent restart
  
  • 测试 通过 zabbix-get

2.3、zabbix-server配置

导入模板即可

3、常见问题

有种可能是ngx_status.sh 没有加执行权限,可以通过 /var/zabbix/zabbix_agent.log查看

4、参考资料

http://www.ttlsa.com


Similar Posts

Comments