设为首页 收藏本站
查看: 811|回复: 0

[经验分享] nginx web日志介绍和分析

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-9-11 10:50:31 | 显示全部楼层 |阅读模式
nginx web日志介绍和分析
Nginx访问日志打印的格式可以自定义,例如Nginx日志打印格式配置如下,Log_format 用来设置日志格式,Name(模块名) Type(日志类型),可以配置多个日志模块,分别供不同的虚拟主机日志记录所调用:
log_formatlog_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                  '$status $body_bytes_sent "$http_referer" '              '"$http_user_agent"  $request_time';access_log /spool/logs/nginx-access.log compression buffer=32k;
log_format 指定日志格式 niginx日志格式及其内部变量函数参数说明:
  • $remote_addr 记录客户端IP地址
  • $server_name 虚拟机主机名称
  • $http_x_forwarded_for HTTP请求的真实IP
  • $remote_user 记录客户端用户名称
  • $request 记录请求的URL和Http协议版本
  • $status 记录返回http请求的状态
  • $upstream_status upstream的状态
  • $ssl_protocol SSL协议版本
  • $body_bytes_sent 发送客户端的字节数,不包括响应头的大小
  • $bytes_sent 发送客户端的总字节数
  • $connection_requests 当前通过一个连接获得的请求数量
  • $http_referer 记录从哪个页面链接过来的
  • $http_user_agent 记录客户端浏览器的相关信息
  • $request_length 请求的长度,包括请求行,请求头和正文
  • $msec 日志写入时间
  • $request_time 请求处理的时间,单位为秒,精度毫秒,nginx发送第一个字节到发送完响应数据的时间。
  • $upstream_response_time 应用程序响应的时间,nginx响应向后端服务器建立连接开始到接受完数据然后关闭连接为止的总时间。

access_logaccess_log /spool/logs/nginx-access.log compression buffer=32k;access_log off;
access_log: 为访问日志设置路径,格式和缓冲区的大小(nginx访问日志支持缓存)。 在同一个配置层级里可以指定多个日志。 特定值off会取消当前配置层级里的所有access_log指令。 如果没有指定日志格式则会使用预定义的“combined”格式。

日志文件的路径可以包含变量,但此类日志存在一些限制:

  • 工作进程使用的user 应拥有在目录里创建文件的权限;
  • 写缓冲无效;
  • 每条日志写入都会打开和关闭文件。然而,频繁使用的文件描述符可以存储在缓存中, 在open_log_file_cache指令的valid参数指定的时间里,
    写操作能持续写到旧文件

  • 每次日志写入的操作都会检查请求的 根目录是否存在, 如果不存在则日志不会被创建。
    因此在一个层级里同时指定root 和access_log是一个不错的想法。

open_log_file_cacheopen_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
open_log_file_cache: 定义一个缓存,用来存储频繁使用的文件名中包含变量的日志文件描述符。 该指令包含以下参数:
  • max : 设置缓存中描述符的最大数量;如果缓存被占满,最近最少使用(LRU)的描述符将被关闭。
  • inactive : 设置缓存文件描述符在多长时间内没有被访问就关闭; 默认为10秒。
  • min_uses : 设置在inactive参数指定的时间里, 最少访问多少次才能使文件描述符保留在缓存中;默认为1。
  • valid : 设置一段用于检查超时后文件是否仍以同样名字存在的时间; 默认为60秒。
  • off : 禁用缓存功能

IP PV UV VV的介绍

IP:独立的IP,一天内相同的访问相同的IP地址被计算一次。

PV:Page View,就是页面浏览量或者点击量,就是每次打开一个页面就算作一次PV,也指页面刷新的次数,每一次页面刷新,就算做一次PV流量。

UV:Unique Visitor,独立访客数,一天内访问某站点的人数,以COOKIE为依据,一天内相同客户端的IP只被计算为一次访客。

用Cookie分析UV值 : 当客户端第一次访问某个网站服务器的时候,网站服务器会给这个客户端的电脑发出一个Cookie,通常放在这个客户端电脑的C盘当中。在这个Cookie中会分配一个独一无二的编号,这其中会记录一些访问服务器的信息,如访问时间,访问了哪些页面等等。当你下次再访问这个服务器的时候,服务器就可以直接从你的电脑中找到上一次放进去的Cookie文件,并且对其进行一些更新,但那个独一无二的编号是不会变的。

VV : Visit View,访客访问的次数,当访客完成所有的浏览并最终关掉该网站的所有页面时,便完成了一次访问,同一访客一天内可能有多次访问行为,访问次数累计。

实例说明

小明在家用ADSL拨号上网,早上8点访问了www.jj.com下的2个页面,下午2点又访问了www.jj.com的3个页面。那么,对于www.jj.com来讲,今天的PV、UV、VV、IP各项指标该如何计算呢?
PV:5 PV指浏览量,因此PV指等于上午浏览的2个页面和下午浏览的3个页面之和;
UV:1 UV指独立访客数,因此一天内同一访客的多次访问只计为1个UV;
VV:1 VV指访客的访问次数,上午和下午分别有一次访问行为,因此VV为2
IP:2 IP为独立IP数,由于ADSL拨号上网每次都IP不同,因此独立IP数位2;
日志分析
通过Nginx日志,可以简单分析WEB网站的运行状态、数据报表、IP、UV(unique visitor)、PV(page view)访问量等需求,如下为常用需求分析:

使用的日志格式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '              '$status $body_bytes_sent "$http_referer" '          '"$http_user_agent"  $request_time';
  • 统计nginx服务器的独立IP数
    awk  '{print $1}' access.log |sort -r|uniq -c | wc -l
  • 统计Nginx的PV量
    awk  '{print $7}' access.log |wc -l
  • 统计Nginx服务器UV统计(仅做演示)
    awk  '{print $11}' access.log |sort -r|uniq -c |wc -l
  • 分析Nginx访问日志截止目前为止访问量前20的IP列表。
    awk  '{print  $1}'  access.log|sort |uniq -c |sort -nr |head -20
  • 分析Nginx访问日志早上9点至中午12点的总请求量。
    sed  -n  "/2016:09:00/,/2016:12:00/"p access.log|wc -lawk  '/2017:09:00/,/2017:12:00/' access.log|wc –l
  • 分析Nginx访问日志截止目前为止访问量前20的IP列表。
    awk  '{print  $1}'  access.log|sort |uniq -c |sort -nr |head -20
  • 分析Nginx访问日志状态码404、502、503、500、499等错误信息页面,打印错误出现次数大于20的IP地址。
    awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'
  • 分析Nginx访问日志访问最多的页面。
    awk  '{print $7}'   access.log |sort |uniq -c|sort -nr|head -20
  • 分析Nginx访问日志请求处理时间大于5秒的URL,并打印出时间、URL、访客IP。
    awk  '{if ($NF>5)  print $NF,$7,$1}'  access.log|sort -nr|more


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-404314-1-1.html 上篇帖子: Nginx Location和Rewrite深入剖析 下篇帖子: Nginx服务配置综合实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表