Fork me on GitHub
Fork me on GitHub

zabbix监控Nginx

https://nginx.org/en/docs/http/ngx_http_stub_status_module.html
在编译Nginx的时候,需要加上参数–with-http_stub_status_module,然后在配置文件中配置开启状态页面查询。
Nginx1.9.11版本之后才支持动态加载模块,因此对于之前的版本,你都需要重新编译。

启用nginx status配置

在http段加入如下配置:

server {
        listen  80;
        server_name localhost;
        location /status {
            stub_status;
            access_log off;
            allow 114.55.29.246;
            deny all;
        }
}

重载Nginx。

zabbix agent端配置

# cd /usr/local/zabbix-3.0.1/etc/zabbix_agentd.conf.d/
# vim nginx_userparams.conf

把下面的内容贴进去:

UserParameter=Nginx.active[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'
UserParameter=Nginx.reading[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2
UserParameter=Nginx.writing[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4
UserParameter=Nginx.waiting[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6
UserParameter=Nginx.accepted[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'
UserParameter=Nginx.handled[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'
UserParameter=Nginx.requests[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'

重启zabbix agent:

# killall -9 zabbix_agentd
# /usr/local/zabbix-3.0.1/sbin/zabbix_agentd

测试,在zabbix server上使用zabbix_get获取数据:

# cd /usr/local/zabbix-3.0.1/bin/
# ./zabbix_get -s 114.55.29.241 -k "Nginx.active[114.55.29.241,80]"

zabbix web gui配置监控项

创建Nginx Template

点击Configuration—>Templates,点击右上角的Create template。

填写模板的信息,点击Add。

创建Application

生产环境下只需要把我写好的模板文件import进去就可以了,不需要像下面那样再去创建模板,下面只是介绍下创建模板的过程。

点击Configuration—>Templates,找到刚才创建的Nginx template,点击所在行的Applications列。

点击右上角的Create application。

输入application的名字Nginx running status,点击Add。

创建Items

点击Configuration—>Templates,找到刚才创建的Nginx template,点击所在行的Items列。

点击右上角的Create item。分别创建8个监控项,如下图:

  1. 当前 Nginx 正处理的活动连接数(包括等待着的连接数)
  2. Nginx一共处理了的连接数
  3. Nginx一共处理了的连接数(包括失败了的,因为某些限制会导致连接被拒绝,比如the worker_connections limit)
  4. Nginx一共处理了的请求的个数(连接和请求是两码事,一个长连接可能会处理多个请求)
  5. Nginx正在读取到客户端的Header信息数
  6. Nginx正在向客户端发送响应的个数
  7. 开启keep-alive 的情况下,这个值等于active – (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接
  8. Nginx服务可用性