nginx监控
1.监控nginx链接数状态status
# 1.开启status页面功能
cat > /etc/nginx/conf.d/status.conf <<'EOF'
server{
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
}
}
EOF
# 2.访问测试
[root@web-7 ~]#nginx -t
[root@web-7 ~]#systemctl restart nginx
[root@web-7 ~]#
[root@web-7 ~]#curl 10.0.0.7/nginx_status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
2.开发nginx监控状态脚本
# 自定义监控内容,也就是自定义key的操作
# 脚本核心思路就是,提取status页面的数值,交给zabbix
# 1.开发监控nginx脚本
#!/bin/bash
# Author: www.yuchaoit.cn
# 接受脚本的第一个参数
# 由于nginx的status状态太多,写为一个接受参数的key
# status_nginx[*]
NGINX_COMMAND=$1
CACHEFILE="/tmp/nginx_status.log"
CMD="/usr/bin/curl http://127.0.0.1/nginx_status"
# 判断是否有status日志文件
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE 2>/dev/null
fi
# 检查status日志有效期,限定状态文件在60秒内
# 记录最后一次status日志的生成时间(秒)
STATUS_TIME=$(stat -c %Y $CACHEFILE)
# 以unix时间计算,seconds since 1970-01-01 00:00:00 UTC
# 当前系统时间减去日志时间,推算,是否超过60秒,超过就立即重新生成
TIMENOW=$(date +%s)
if [ $[ $TIMENOW - $STATUS_TIME ] -gt 60 ];then
rm -f $CACHEFILE
fi
if [ ! -f $CACHEFILE ];then
$CMD > $CACHEFILE 2>/dev/null
fi
nginx_active(){
grep 'Active' $CACHEFILE |awk '{print $NF}'
exit 0;
}
nginx_reading(){
grep 'Reading' $CACHEFILE |awk '{print $2}'
exit 0;
}
nginx_writing(){
grep 'Writing' $CACHEFILE |awk '{print $4}'
exit 0;
}
nginx_waiting(){
grep 'Waiting' $CACHEFILE |awk '{print $6}'
exit 0;
}
nginx_accepts(){
awk NR==3 $CACHEFILE|awk '{print $2}'
exit 0;
}
nginx_handled(){
awk NR==3 $CACHEFILE|awk '{print $2}'
exit 0;
}
nginx_requests(){
awk NR==3 $CACHEFILE|awk '{print $3}'
exit 0;
}
# 对脚本传入参数判断,需要获取什么值
# 如下参数,都是nginx的链接状态,
case $NGINX_COMMAND in
active)
nginx_active ;;
reading)
nginx_reading;;
writing)
nginx_writing;;
waiting)
nginx_waiting;;
accepts)
nginx_accepts;;
handled)
nginx_handled;;
requests)
nginx_requests;;
*)
echo "Invalid arguments"
exit 2
;;
esac
3创建agent的自定义key配置文件
[root@web-7 /etc/zabbix/zabbix_agentd.d]#cat nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_status.sh $1
# 授权
[root@web-7 /etc/zabbix/zabbix_agentd.d]#chmod +x nginx_status.sh
[root@web-7 /etc/zabbix/zabbix_agentd.d]#chown -R zabbix.zabbix ./*
[root@web-7 /etc/zabbix/zabbix_agentd.d]#ll
total 16
-rw-r--r-- 1 zabbix zabbix 87 Jul 4 13:40 nginx_status.conf
-rwxr-xr-x 1 zabbix zabbix 1697 Jul 4 13:40 nginx_status.sh
务必要重启
[root@web-7 /etc/zabbix/zabbix_agentd.d]#systemctl restart zabbix-agent.service
4手动测试,自定义key+脚本,是否采集nginx的各种状态
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[active]
3
[root@zabbix-server-71 /usr/lib/zabbix/alertscripts]#zabbix_get -s 10.0.0.7 -k nginx_status[reading]
0
5创建nginx_status的模板,便于给web组所有机器用
和你的web7机器关联让它用
看看图形,拿到数据了吗,最新数据
web7机器nginx,七个链接状态的数据的图形创建
触发器,当nginx的requests请求数,超过50000万,就报警,钉钉报警
ab压测,看钉钉是否报警就完事。服务端压测
ab -c 100 -n 50000 http://10.0.0.7/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南