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 创建触发器

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

 

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

原文地址:https://www.cnblogs.com/ssgeek/p/9227441.html