暂未分类暂未分类nginx状态监控统计
zphj1987nginx是一款很优秀的web服务器软件,很多地方都有接触和使用到他,大部分的场景压力还没达到需要调优的地步,而调优的难点其实不在于调,而在于各项状态的监控,能够很快的找到资源在什么时候出现问题,调整前后出现的变化,如果都不知道变化在哪里所做的调优只能是凭感觉的
之前看到有技术人员用nginx作为rgw的前端的时候,通过优化去实现将nginx的并发提高到很大,而不出现4xx等问题,nginx的access.log里面是有记录访问的状态码的,而这个日志的分析如果是一次次的去看,这样的分析是无法用精确的数据去展示的
最开始的想法是想根据时间点去统计时间点的状态码,后来发现这样做既复杂,又无法输出到一些数据展示软件当中,实际上我只需要统计一定时间的总的状态值,然后定期去取这个值,然后在数据展示的时候,就可以看到一个数值的曲线图,增量即为这个时间区间所产生的状态值
下面就是我的实现,一个脚本就可以统计了,这个是最初的版本,纯统计状态码,还没有区分读写分离的情况,这个在后面会加入分离的情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| #!/bin/sh
statucode="2 3 4 5"
interval=2
if [ ! -d /var/run/nginxstatus/ ];then mkdir /var/run/nginxstatus/ fi
check(){ for code in $statucode do echo "$code"xx:`cat /var/log/nginx/access.log |awk '{if( substr($9,0,1) == '''$code''' ) print $9}' |wc -l` > /var/log/nginx/"$code"xx.log done sleep $interval }
start() { echo -e Starting nginxstatus: "\033[32m [ OK ] \033[0m" while [ 2 > 1 ] do check
done & pid=`ps ax | grep -i 'nginxstatus' | head -n 1|awk '{print $1}'` echo -e pid is "\033[33m $! \033[0m" echo $! >> /var/run/nginxstatus/nginxstatus.pid }
stop() { echo -e stop nginxstatus collect "\033[32m [ OK ] \033[0m"
pid=`cat /var/run/nginxstatus/nginxstatus.pid 2>/dev/null` kill -10 $pid 2>/dev/null
rm -rf /var/run/nginxstatus/nginxstatus.pid }
status() { for code in $statucode do cat /var/log/nginx/"$code"xx.log done }
clean () { for code in $statucode do echo "" > /var/log/nginx/"$code"xx.log done echo "" > /var/log/nginx/access.log echo "clean /var/log/nginx/access.log" echo -e "clean /var/log/nginx/access.log" "\033[32m [ OK ] \033[0m" }
case "$1" in start) start && exit 0 ;; stop) stop || exit 0 ;; status) status ;; clean) clean ;; *) echo $"Usage: $0 {start|stop|status|clean}" exit 2 esac exit $?
|
使用方法:
1、启动进程
1 2 3
| [root@zhongbo ~] Starting nginxstatus: [ OK ] pid is 166534
|
会生成下面的状态文件,周期为2s一更新
[root@zhongbo ~]# ll /var/log/nginx/*xx.log
-rw-r–r– 1 root root 7 Feb 23 00:25 /var/log/nginx/2xx.log
-rw-r–r– 1 root root 6 Feb 23 00:25 /var/log/nginx/3xx.log
-rw-r–r– 1 root root 7 Feb 23 00:25 /var/log/nginx/4xx.log
-rw-r–r– 1 root root 6 Feb 23 00:25 /var/log/nginx/5xx.log
2、当前nginx的状态查询
1 2 3 4 5
| [root@zhongbo ~] 2xx:21 3xx:1 4xx:10 5xx:0
|
3、停止nginxstatus进程
1 2
| [root@zhongbo ~] stop nginxstatus collect [ OK ]
|
4、清理历史数据
1 2
| [root@zhongbo ~] clean /var/log/nginx/access.log [ OK ]
|
这个操作会清空/var/log/nginx/access.log日志的内容重新统计
这个会在后期根据需求进行优化