nginx是一款很优秀的web服务器软件,很多地方都有接触和使用到他,大部分的场景压力还没达到需要调优的地步,而调优的难点其实不在于调,而在于各项状态的监控,能够很快的找到资源在什么时候出现问题,调整前后出现的变化,如果都不知道变化在哪里所做的调优只能是凭感觉的

之前看到有技术人员用nginx作为rgw的前端的时候,通过优化去实现将nginx的并发提高到很大,而不出现4xx等问题,nginx的access.log里面是有记录访问的状态码的,而这个日志的分析如果是一次次的去看,这样的分析是无法用精确的数据去展示的

最开始的想法是想根据时间点去统计时间点的状态码,后来发现这样做既复杂,又无法输出到一些数据展示软件当中,实际上我只需要统计一定时间的总的状态值,然后定期去取这个值,然后在数据展示的时候,就可以看到一个数值的曲线图,增量即为这个时间区间所产生的状态值

下面就是我的实现,一个脚本就可以统计了,这个是最初的版本,纯统计状态码,还没有区分读写分离的情况,这个在后面会加入分离的情况

#!/bin/sh
#
### BEGIN INIT INFO
# Provides: nginxstatus
# Required-Start: $nginx
# Short-Description: nginxstatus
# Description: collectstatus of nginx
### END INIT INFO
#
#
# pidfile: /var/run/nginx/nginxstatus.pid
#
# Source function library.
##########################################
#状态码一般分为1xx,2xx,3xx,4xx,5xx,total
statucode="2 3 4 5"
##check intervel setting
interval=2
########################################
#check the nginxstatus pid dir if exist
if [ ! -d /var/run/nginxstatus/ ];then
mkdir /var/run/nginxstatus/
fi
##check the status of nginx access
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 nginx status
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 nginx
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
#killall nginxstatus
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、启动进程

[root@zhongbo ~]# /etc/init.d/nginxstatus start
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的状态查询

[root@zhongbo ~]# /etc/init.d/nginxstatus status
2xx:21
3xx:1
4xx:10
5xx:0

3、停止nginxstatus进程

[root@zhongbo ~]# /etc/init.d/nginxstatus stop
stop nginxstatus collect [ OK ]

4、清理历史数据

[root@zhongbo ~]# /etc/init.d/nginxstatus clean
clean /var/log/nginx/access.log [ OK ]

这个操作会清空/var/log/nginx/access.log日志的内容重新统计

这个会在后期根据需求进行优化

nginx状态监控统计的更多相关文章

  1. Nginx状态监控

    通过配置nginx.conf文件来实现对Nginx状态信息的监控. 1.配置nginx.conf vim /usr/local/nginx/conf/nginx.conf 再server块配置项中添加 ...

  2. zabbix-2.4.8-1添加nginx状态监控

    前期准备:nginx在编译是必须要加如下参数: 并且要在nginx的配置文件中添加如下配置: server { listen *: default_server; server_name localh ...

  3. nginx 状态监控

    通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况.Nginx并发查看有两种方法(之所以这么说,是因为笔者只知道两种),一种是通过web界面,一种是通过命令,web查看要比命令查看显示的 ...

  4. 毕业设计之zabbix之nginx状态监控

    监控脚本: [root@webone.quan.bbs ~]$vim /usr/local/zabbix/script/ngx_status.sh #!/bin/bash##************* ...

  5. Zabbix学习之路(七)之Nginx的状态监控

    1.安装nginx [root@linux-node2 ~]# yum install -y nginx [root@linux-node2 ~]# mkdir /etc/zabbix/zabbix_ ...

  6. 004.Nginx日志配置及状态监控

    一 Nginx请求简介 1.1 请求头部 对于HTTP而言,客户端负责发起request请求,服务端负责response响应. request:包括请求行.请求头部.请求数据: response:包括 ...

  7. Zabbix 监控MySQL、Apache、Nginx应用监控

    zabbix对第三方应用软件的监控,主要有两个工作难点,一个是编写自定义监控脚本,另一个是在编写模板并导入zabbix web中,编写脚本这个要根据 监控需求定制即可,而编写模板文件有些难度,不过网上 ...

  8. nginx服务器状态监控

    Nginx开启监控需在编译时加入with-http_stub_status_module,查看当前Nginx编译参数:/usr/local/nginx/sbin/nginx -V 1.以二级目录方式开 ...

  9. Zabbix 监控 Nginx 状态

    简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) shell > /usr/local/nginx/sbin/ngi ...

随机推荐

  1. python 不可变类型

    不可变类型有:字符串,元祖,数字 可变类型:列表,字典 字典中,可变类型不能为key值 #在函数中 可变类型,为全局变量时,会变化 不可变类型,为全局变量时,不会变化

  2. 【自学编程】C语言编程简单的小程序,计算长方体体积!

    计算长方体体积 有朋友会说长方体体积还不好算吗?长X宽X高.没错用计算器一下就可以出结果,编程反而麻烦些,但是我们说的是这种思维,如果复杂的重复运算的话写好程序就非常简单了. 简单运算下一个固定高度的 ...

  3. js 无刷新文件上传 (兼容IE9 )

    之前项目中有个文件上传了需求,于是直接就使用了FormData对象异步上传,但是在测试得时候发现ie9无法正常上传(项目要求兼容IE9+),无奈,查资料得知IE9- 版本不支持formdata对象得异 ...

  4. Anderson《空气动力学基础》5th读书笔记 第2记——流体静力学初步

    与物体在水中受到水的浮力一样,空气中的物体也会受到空气的浮力,但由于这个浮力往往比较小,实际中的很多问题我们常常将它忽略,而对于像热气球这样的靠空气的浮力产生升力的飞行器来说,空气的浮力是不能忽略的. ...

  5. 理解cookie

    Cookie的有效期 Cookie的maxAge决定着Cookie的有效期,单位为秒(Second).Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写 ...

  6. vue 用别名取代路径引用

    在项目开发过程中有可能很多包是没有放在npm上的,许多包需要下载到本地引用,这样一来我们只能通过require的方式来引用文件,但是路径的名字就会很长 例如 import Select from '. ...

  7. Java关键字——break和continue、this等

    想知道break用于if和while的区别是什么? break是跳出最近的循环.if是逻辑判断,不是循环,所以会跳出if最近的循环: break:终止退出,用于do-while.while.for中时 ...

  8. 设计模式 | 职责链模式(Chain of responsibility)

    定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 结构:(书中图,侵删) 一个抽象的处理者 若干 ...

  9. 【Flutter 混合开发】添加 Flutter 到 iOS

    Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...

  10. curl 錯誤碼

    CURL状态码列表 状态码 状态原因 解释 0 正常访问 1 错误的协议 未支持的协议.此版cURL 不支持这一协议. 2 初始化代码失败 初始化失败. 3 URL格式不正确 URL 格式错误.语法不 ...