title: zabbix监控nginx #标题tags: zabbix,2020/4/6 #标签
categories: zabbix # 分类
date: 2020-04-06

记录下zabbix监控nginx性能。
自行安装zabbix、nginx、以及zabbix-agentd。

开启nginx状态页

添加location规则

确保nginx在安装时有--with-http_stub_status_module配置项,否则添加下面的location规则后会报错。

  1. location /ngx_status {
  2. stub_status on;
  3. access_log off;
  4. # allow 127.0.0.1;
  5. # deny all;
  6. }
  7. [root@kafka03 conf]# nginx -s reload # 重启nginx

访问status页面

  1. [root@kafka03 conf]# curl 127.0.0.1/ngx_status # 访问状态页
  2. Active connections: 3 # 活跃的连接数量
  3. server accepts handled requests #总共处理了14个连接 , 成功创建14次握手, 总共处理了20个请求
  4. 14 14 20
  5. Reading: 0 Writing: 1 Waiting: 0
  6. # Reading:读取客户端的连接数
  7. # writing:响应数据到客户端的数量
  8. # waiting:开启keep-alive的情况下,这个值等于active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。

配置nginx客户端的zabbix_agent

  1. [root@kafka03 zabbix]# egrep -v '^#|^$' etc/zabbix_agentd.conf # 修改zabbix_agent文件
  2. PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
  3. LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
  4. Server=192.168.20.8
  5. ServerActive=192.168.20.8
  6. Hostname=client02
  7. HostMetadata= linux client
  8. # 主要是以下几个配置
  9. Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
  10. Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
  11. UnsafeUserParameters=1
  12. UserParameter=nginx.info[*],/usr/local/zabbix/scripts/nginx.sh $1

在zabbix_agent端编写采集nginx数据的脚本

  1. [root@kafka03 zabbix]# mkdir /usr/local/zabbix/scripts
  2. [root@kafka03 zabbix]# cd /usr/local/zabbix/scripts
  3. [root@kafka03 scripts]# cat nginx.sh # 采集数据的脚本如下
  4. #!/bin/bash
  5. # __Author__: Ray
  6. # __Email__: 916551516@qq.com
  7. # __DateTime__: 2020-04-06
  8. Host="192.168.20.7"
  9. Port=80
  10. Curl="http://${Host}:${Port}"
  11. case $1 in
  12. # 检测nginx进程是否存在
  13. ping)
  14. RS=`pidof nginx | wc -l`
  15. echo ${RS}
  16. ;;
  17. # 获取nginx首页状态码
  18. index)
  19. RS=`curl -s -I ${Curl}/index.html | awk '$1== "HTTP/1.1" {print $2}'`
  20. echo ${RS}
  21. ;;
  22. # 获取活跃的连接数量
  23. active)
  24. RS=`curl -s ${Curl}/ngx_status | awk '$1 =="Active" {print $3}'`
  25. echo ${RS}
  26. ;;
  27. # 读取客户端的连接数
  28. reading)
  29. RS=`curl -s ${Curl}/ngx_status | grep Reading | awk '{print $2}'`
  30. echo ${RS}
  31. ;;
  32. # 获取响应数据到客户端的数量
  33. writing)
  34. RS=`curl -s ${Curl}/ngx_status | grep Writing | awk '{print $4}'`
  35. echo ${RS}
  36. ;;
  37. # 获取Nginx已经处理完正在等候下一次请求指令的驻留连接。
  38. waiting)
  39. RS=`curl -s ${Curl}/ngx_status | grep Waiting | awk '{print $6}'`
  40. echo ${RS}
  41. ;;
  42. # 获取共处理了多少个连接
  43. accepts)
  44. RS=`curl -s ${Curl}/ngx_status | awk 'NR==3 {print $1}'`
  45. echo ${RS}
  46. ;;
  47. # 获取成功建立握手的数量
  48. handled)
  49. RS=`curl -s ${Curl}/ngx_status | awk 'NR==3 {print $2}'`
  50. echo ${RS}
  51. ;;
  52. # 获取总共处理的请求数
  53. requests)
  54. RS=`curl -s ${Curl}/ngx_status | awk 'NR==3 {print $3}'`
  55. echo ${RS}
  56. ;;
  57. esac

好吧,写到这里不想写了,因为发现后面的所有操作,不但繁琐,而且我之前也写过类似的,就不再重复造轮子了,如果有需要的话,后面的步骤请参考:Zabbix监控Tomcat及Nginx