原文链接

简介

很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段:

  1. 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求。
  2. 利用流计算、或离线统计分析nginx的access log,从日志中挖掘有用信息。

两种方式各有优缺点:

  1. CNZZ使用起来比较简单,各种指标定义清楚。但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录。
  2. 利用流计算、离线计算引擎可以支持个性化需求,但需要搭建一套环境,并且在实时性以及分析灵活性上比较难平衡。

两种手段相互补充,才能对网站的状况有更加深入的了解。

日志服务在查询基础上新推出来SQL支持实时日志分析功能,极大的降低了站长们分析access log的门槛,本文将详细介绍如何使用日志服务分析access log中的各种指标。

Nginx访问日志格式

一个典型的nginx访问日志配置:

      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" $http_host ''$status $request_length $body_bytes_sent "$http_referer" ''"$http_user_agent"  $request_time';access_log  access.log  main;

字段解释:

  1. remote_addr : 客户端地址
  2. remote_user : 客户端用户名
  3. time_local : 服务器时间
  4. request : 请求内容,包括方法名,地址,和http协议
  5. http_host : 用户请求是使用的http地址
  6. status : 返回的http 状态码
  7. request_length : 请求大小
  8. body_bytes_sent : 返回的大小
  9. http_referer : 来源页
  10. http_user_agent : 客户端名称
  11. request_time : 整体请求延时

收集访问日志到日志服务

  1. 首先把日志收集到日志服务

    请参考文档5分钟快速文档

  2. 把日志收集到日志服务后,设置每一列的类型:

    注:其中request拆分城method 和uri两列

    日志样例:

分析访问日志

通常,对access log的访问需求有,查看网站的pv,uv,热点页面,热点方法,错误请求,客户端类型,来源页面等等。下文将逐个介绍各个指标的计算方法。

  1. PV统计不仅可以一段时间总的PV,还可以按照小的时间段,查看每段时间的,比如每5分钟pv

    统计代码

    *|select from_unixtime( __time__- __time__% 300) as t, count(1) as pv  group by __time__- __time__% 300 order by t limit 60

    统计结果

  2. 统计一小时内每5分钟的UV

    统计代码:

    *|select from_unixtime( __time__- __time__% 300) as t,approx_distinct(remote_addr) as uv  group by __time__- __time__% 300 order by t limit 60
    

  3. 统计一小时内总的UV

    统计代码:

    *|select approx_distinct(remote_addr)
    

    统计结果:

  4. 最近一小时访问最多的10个页面

    *|select url,count(1) as pv group by url order by pv desc limit 10
    

  5. 最近一小时各种请求方法的占比

    *| select method, count(1) as pv group by method
    

  6. 最近一小时各种http状态码的占比

    *| select status, count(1) as pv group by status
    

  7. 最近一小时各种浏览器的占比

    *| select user_agent, count(1) as pv group by user_agent
    

  8. 最近一小时referer来源于不同域名的占比

    *|select url_extract_host(http_referer) ,count(1) group by url_extract_host(http_referer)
    

    注:url_extract_host为从url中提取域名

  9. 最近一小时用户访问不同域名的占比

    *|select  http_host ,count(1) group by http_host
    

    一些高级功能

除了一些访问指标外,站长常常还需要对一些访问请求进行诊断,查看一下处理请求的延时如何,有哪些比较大的延时,哪些页面的延时比较大。

  1. 通过每5分钟的平均延时和最大延时, 对延时的情况有个总体的把握

    *|select from_unixtime(__time__ -__time__% 300) as time, avg(request_time) as avg_latency ,max(request_time) as max_latency  group by __time__ -__time__% 300 limit 60
    

  2. 知道了最大延时之后,我们需要知道最大延时对应的请求页面是哪个,方便进一步优化页面响应。

    *|select from_unixtime(__time__ - __time__% 60) , max_by(url,request_time)  group by __time__ - __time__%60
    

  3. 从总体把握,我们需要知道网站的所有请求的延时的分布, 把延时分布在十个桶里边,看每个延时区间的请求个数

    *|select  numeric_histogram(10,request_time)
    

  4. 除了最大的延时,我们还需要知道最大的十个延时,对应的值是多少

    *|select max(request_time,10)
    

  5. 当我们知道了/0这个页面的访问延时最大,为了对/0页面进行调优,接下来需要统计/0这个页面的访问PV,UV,各种method次数,各种status次数,各种浏览器次数,平均延时,最大延时

    url:"/0"|select count(1) as pv, approx_distinct(remote_addr) as uv, histogram(method) as method_pv,histogram(status) as status_pv, histogram(user_agent) as user_agent_pv, avg(request_time) as avg_latency,  max(request_time) as max_latency
    



  6. 同时,我们也可以限定只查看request_time 大于1000的请求的pv,uv,以及各个url的请求次数

    request_time > 1000 |select count(1) as pv, approx_distinct(remote_addr) as uv, histogram(url) as url_pv
    

原文链接

通过实时日志分析_进行访问日志的快速统计相关推荐

  1. 分析网站原始访问日志

    分析网站原始访问日志 Ludou 人气: 3,844 次我要评论( 21 )我要投稿 文章目录 1.注意那些被频繁访问的资源 2.注意那些你网站上不存在资源的请求 3.观察搜索引擎蜘蛛的来访情况 4. ...

  2. awstats linux日志分析,日志分析:用AWStats分析Nginx的访问日志,它可以统计您站点的如...

    日志分析:用AWStats分析Nginx的访问日志,它可以统计您站点的如 Awstats是一个免费非常简洁而且强大有个性的统计工具.它可以统计您站点的如下信息: 一:访问量,访问次数,页面浏览量,点击 ...

  3. 网站服务器日志分析,如何进行网站日志分析(理论篇)

    搜索引擎通过蜘蛛爬行抓取网页,通过分析网站日志,可以了解蜘蛛在网站中的抓取规律,以及网站在结构.收录.内容更新等方面存在的不足. 在进行日志分析时,一个可以事半功倍的工具是必不可少的,例如光年日志分析 ...

  4. windows下安装awstats来分析apache的访问日志

    一.啰嗦两句 之前在Windows下用Apache时,也曾经配置过Awstats,然后换了工作,改用Linux+nginx,渐渐把Apache忘记了.又换了工作,又得用Apache,这回版本更新到2. ...

  5. golang 日志分析_容器日志采集利器:Filebeat深度剖析与实践

    在云原生时代和容器化浪潮中,容器的日志采集是一个看起来不起眼却又无法忽视的重要议题.对于容器日志采集我们常用的工具有filebeat和fluentd,两者对比各有优劣,相比基于ruby的fluentd ...

  6. 学会分析网站原始访问日志

    如果你的博客或网站是搭建在付费的Linux主机上,如果你是博客或网站的管理员,如果你连原始访问日志(Raw Access Log)是什么都不知道,或者对其根本不屑一顾,我只能说你是一个不称职的网站管理 ...

  7. 阿里云sls日志服务接入k8s-ingress访问日志分析与监控

    接入k8s日志 接入k8s-ingress日志 一.接入数据 1.添加logtail-ds组件 2.安装配置alibaba-log-controller 二.查看Nginx Ingress日志与报表 ...

  8. oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志

    logminer和配置 安装logminer 以sqlplus / as sysdba登录系统数据库系统,ORACLE默认安装logminer,如果没有安装,执行SQL脚本安装 --安装logmine ...

  9. AI驱动智能化日志分析 : 通过决策树给日志做聚类分析

    日志自动化.智能化分析对于AI需求 通常,我们分析日志,是为了两个目标: 对数据有个整体的概览,例如,生成一天内的报表. 对异常数据进行挖掘,例如,对特殊的日志进行告警. 日志分析,通常对分析者有这些 ...

最新文章

  1. linux之SQL语句简明教程---IN
  2. java前后端分离账号错误_前后端分离,获取token,验证登陆是否失效
  3. c++如何把字符串转为变量名_如何优雅地计算多变量
  4. 咖友:X零蛋丨只靠“威尔逊算法”,知乎危险了?
  5. winform窗体 小项目【安装程序】
  6. 豆瓣读书评分 8.7 以上! 这 40 本 Python 畅销书包邮送
  7. 【工作经验分享】java图片转文字
  8. 大数据Hadoop2.x与Hadoop3.x相比较有哪些变化
  9. 基于canvas的原生JS时钟效果
  10. [******] 堆排序
  11. C++类中的main函数
  12. java获得当前路径_JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址...
  13. 软件测试岗位工作,到底可以做多久?
  14. Spring项目跟Axis2结合
  15. 数据中台之数据集成平台的数据抽取
  16. matlab有限元分析杆单元,有限元实验1-杆单元有限元分析
  17. 炒外汇APP平台哪个好,排名前十的炒外汇平台
  18. 关于PV、EV、AC、CV、SV、CPI、SPI、BAC、ETC、EAC的解析及计算
  19. 系统重启后接口代理服务器ip地址会变,重启路由器可以IP会变吗
  20. 看看人家那公众号管理系统,那叫一个优雅(附源码)

热门文章

  1. vb中的模块是什么意思?
  2. Asp基础教程(上)
  3. Windows程序设计-通用对话框
  4. windows环境下在不支持AVX指令集的CPU上使用anaconda配置tensorflow
  5. python入门篇1:组合数据类型
  6. Log4j2维护者吐槽没工资还要挨骂,GO安全负责人建议开源作者向公司收费
  7. 关于IBV_WR_RDMA_WRITE_WITH_IMM的理解
  8. 总投资30亿、算力500P,宜昌先进计算产业可持续发展之路
  9. mysql duplicate variable_报错:Duplicate local variable
  10. 《蜡笔小新》 中《大象》主题歌 第668回《兴致勃勃的结婚典礼》