设为首页 加入收藏

TOP

Nginx访问日志增长暴增出现尖刀的详细分析(一)
2015-07-24 12:05:24 来源: 作者: 【 】 浏览:119
Tags:Nginx 访问 日志 增长 暴增 出现 尖刀 详细 分析

前言:

Nginx日志里面Mobileweb_access.log增长特别大,一天上百兆,将近100W的访问记录,按照我们目前的规模,热点用户才500个左右,就算人人用手机app访问,怎么可能会有这么大的url访问量?以前只是安装使用nginx,还没有抽出时间仔细研究,这回需要彻底的去分析nginx日志了。

1,日志分类

主要2种,一种是错误日志,一种是访问日志,这些配置都在/usr/local/nginx/conf/nginx.conf里面,默认都是打开的,自己也可以选择关闭。

1.1,访问日志

访问日志主要记录每一个访问nginx的请求,格式可以自己定义,在nginx.conf文件里面,通过访问日志,你可以看到每一个请求的详细信息,对于访问日志的格式,主要是配置文件中的log_format来限制的。

1.1.1 log_format日志格式

$request_time:整个请求的总时间。

$time_iso8601:访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。

$upstream_response_time:请求过程中,upstream的响应时间。

$request_method:客户端请求的动作,通常为GET或POST。

$request_uri:是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。

$args:这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;

$query_string:与$args相同。

$proxy_add_x_forwarded_for:变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr用逗号分开,如果没有"X-Forwarded-For" 请求头,则$proxy_add_x_forwarded_for等于$remote_addr。

$upstream_addr:upstream的地址,即真正提供服务的主机地址。

$status:记录请求返回的http状态码,比如成功是200。

$http_user_agent:客户端浏览器信息

$http_range

$sent_http_content_length:发送内容的长度

$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。

$http_referer:记录从哪个页面链接访问过来的。

$host:请求主机头字段,否则为服务器名称。

$http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

$http_user_agent:客户端浏览器信息

$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。

$ssl_protocol:SSL协议版本,比如TLSv1。

$ssl_cipher:交换数据中的算法,比如RC4-SHA。

生产环境上的范例:

log_format main '$proxy_add_x_forwarded_for $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for" '

'upsteam: $upstream_addr';

access_log logs/access.log main;

log_not_found off;

1.1.2,访问日志路径

access_log logs/access.log main;

Nginx支持为每个location指定强大的日志记录。同样的连接可以在同一时间输出到不止一个的日志中。如果想关闭日志,可以如下:

access_log off;

能够使用access_log指令的字段包括:http、server、location。

PS:Nginx进程设置的用户和组必须对日志路径有创建文件的权限,否则,会报错。
1.2,错误日志

错误日志主要记录客户端访问Nginx出错时的日志,格式不支持自定义。通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的信息。错误日志由指令error_log来指定,具体格式如下:

error_log path(存放路径) level(日志等级)

path含义同access_log,level表示日志等级,具体如下:

[ debug | info | notice | warn | error | crit ]

从左至右,日志详细程度逐级递减,即debug最详细,crit最少,举例说明如下:

error_log logs/mobileweb_error.log error;

需要注意的是:error_log off并不能关闭错误日志,而是会将错误日志记录到一个文件名为off的文件中。正确的关闭错误日志记录功能的方法如下:

error_log /dev/null;

上面表示将存储日志的路径设置为“垃圾桶”。

2,为每一个工程定义特定的日志
location ~* ^/mobileWeb/.*$ {

client_max_body_size 5m;

include deny.conf;

proxy_pass http://mobilewebbackend;

include proxy.conf;

error_log logs/mobileweb_error.log error;

access_log logs/mobileweb_access.log main;

include gzip.conf;

}

这样,就会在日志路径/usr/local/nginx/logs/下面生成mobileWeb工程的专门日志mobileweb_error.log 以及mobileweb_access.log 日志,如果想查询mobileWeb工程的访问记录,就可以单独去查看这2个日志。

3,开始分析

根据来源ip进行分组统计分析,看看哪个ip的访问量最多

[root@wgq_idc_web_1_21 tmp]# cat mobileweb_access.log |grep "14/Oct/2014" |awk '{print $1}'|sort -nr |uniq -c |sort -nr |more

705980 1xx.xx.xx.185,

190273 6x.1x4.1xx.35,

14900 1xx.xxx.xx.xx3,

14670 1xx.xxx.x3.8
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇查询Oracle数据库中带有lob字段的.. 下一篇数据库中nextVal,currVal的应用.

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: