文档章节

nginx日志分析

实践哥
 实践哥
发布于 2017/04/28 21:18
字数 705
阅读 125
收藏 3

首先,nginx不同的输出有不同的过滤格式,分析的案例也得做对应的修改。以下是我的nginx日志配置和对应的日志输出。

nginx日志配置如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent $request_time "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

nginx日志输出格式如下:

127.0.0.1 - - [28/Apr/2017:18:15:05 +0800] "GET / HTTP/1.1" 200 96150 0.000 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-"

 

1: 实时查看nginx的访问日志,过滤自己想要的字段

tail -f /usr/local/nginx/logs/access.log 

只想看状态码 tail -f /usr/local/nginx/logs/access.log |awk '{print $9}'

只看502的请求tail -f /usr/local/nginx/logs/access.log |awk '$9~/502/'

$1是用户ip,$4是时间,$7是用户访问url,$10是响应大小,$11是响应时间,可根据自己的需要进行过滤。

 

2: 分析每个ip,url的访问量,状态码量等

每个ip的访问量:cat /usr/local/nginx/logs/access.log |awk '{print $1}'|sort |uniq -c

每个url的访问量:cat /usr/local/nginx/logs/access.log |awk '{print $7}'|sort |uniq -c

每个状态码量:cat /usr/local/nginx/logs/access.log |awk '{print $9}'|sort |uniq -c

 

3: 统计每秒,每分钟,每小时的pv量

每秒的pv:cat  /usr/local/nginx/logs/access.log |awk '{print $4}'|sort |uniq -c|sort -nrk 1|more

每分的pv从大到小排序: cat  /usr/local/nginx/logs/access.log |awk '{print $4}'|cut -b 2-19|sort |uniq -c|sort -nrk 1|more

 

4: 统计一分钟,每个请求的平均响应时间

cat /usr/local/nginx/logs/access.log |awk '{print $4}'|cut -b 2-19|sort |uniq  -c|while read line;do 
    count=`echo $line|awk '{print $1}'`;  #count为每分钟的请求量
    time=`echo $line|awk '{print $2}'`;  #时间点
    cat /usr/local/nginx/logs/access.log|grep $time|awk '{sum=sum+$11}END{print "time:"time";response time every request:"sum/count}' count=${count} time=${time} #总时间/请求量算出每个请求的响应时间。
done

 

5: 截取nginx最后一分钟访问日志,可用来分析nginx状态码的比例,nginx响应时间等等。

LANG=C
agominute=`date -d '+1 minute ago' '+[%d/%b/%Y:%H:%M'` #前一分钟的日志格式
tac /usr/local/nginx/logs/access.log|awk '{if(substr($4,0,18) == agominute){print $0}else if($4<agominute){exit}}' agominute="${agominute}" #使用tac来分析,预防统计出现性能问题,当日志时间小于前一分钟,就立即退出,避免分析不必要的日志。

 

结合以上脚本,就可以对nginx日志进行实时监控了,例如,截取最后一分钟日志,分析502、500等占用请求数的总比例来监控是否服务器出异常了。

 

最后附上本人的网络课堂地址,如有兴趣请点击: 实践哥

© 著作权归作者所有

实践哥
粉丝 68
博文 51
码字总数 35897
作品 0
杭州
运维
私信 提问
Python统计web应用的每个连接使用情况

背景:前段时间接到一个需求,领导说他想要知道我们在生产环境中某系统的每个应用使用情况。 需求: 统计每个按钮的点击量; 不能影响生产环境; 数据要不断递增,而不是看某个时间段的; 数...

xinsir999
2017/10/02
0
0
资深架构师教你如何使用elk+redis搭建nginx日志分析平台!

elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要...

java高级架构牛人
2018/06/26
0
0
Nginx 不受 CDN 服务影响获取访客真实 IP

获取和记录站点访客的真实 IP 对于站点日志的分析和安全策略的指定很有帮助,Nginx 默认的日志记录获取到的 IP 地址如果站点启用了 CDN 服务,那么这里的 IP 地址都是 CDN 服务器节点的 IP 地...

dragon_tech
02/12
0
0
第二十三周微职位elk日志系统

利用ELK+redis搭建一套nginx日志分析平台。 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。...

xinrenbaodao
2017/10/15
0
0
使用elk+redis搭建nginx日志分析平台

logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要有个队列,redis的list结构正好可...

天下杰论
2015/11/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

idea运行spring boot(推荐)

下载idea 注册激活:http://idea.lanyus.com/ 照着网上的步骤创建spring boot,这里记录存在的坑 首先gradle需要在本地配置环境变量,配制成本地的,联网下载的话要很久很久 第一次不要使用g...

安卓工程师王恒
7分钟前
1
0
java final学习笔记

代码如下:class Circle{ double r; double pi=3.14; public Circle(double r) { this.r=r; } public void getArea() { System.out.......

hellation_
25分钟前
0
0
JavaConfig版

中心思想:去xml配置文件。 在Spirng Boot和Spring Cloud中,大量使用了注解与JavaConfig。 xml文件 对应的Java类 spring.xml SpringConfig.java spring-mvc.xml SpringMvcConfig.java web.x...

流小文
44分钟前
4
0
Go 定时器内部实现原理剖析

前言 前面我们介绍了一次性定时器Timer和周期性定时器Ticker,这两种定时器内部实现机制相同。创建定时器的协程并不负责计时,而是把任务交给系统协程,系统协程统一处理所有的定时器。 本节...

恋恋美食
49分钟前
1
0
分布式协调神器 ZooKeeper 之整体概述

ZooKeeper 最早起源于雅虎研究院的一个研究小组。当时,雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就...

别打我会飞
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部