10分钟精通Nginx访问日志分析统计

简介: 个人站长如何分析自己的网站,这里有第一手的经验

简介

很多个人站长在搭建网站时使用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. 把日志收集到日志服务后,设置每一列的类型:
![index_attribute](https://yqfile.alicdn.com/040597e2b56c987f0430e0124f1d20fee32f7125.png)


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

日志样例:

![sample_log](https://yqfile.alicdn.com/5de2c57afd7986032b64646510c72c4c8869dfbc.png)

分析访问日志

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

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

    统计代码

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

    统计结果

    pv

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

    统计代码:

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

    uv_5min

  3. 统计一小时内总的UV

    统计代码:

     *|select approx_distinct(remote_addr)
    

    统计结果:

    uv

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

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

    top10page

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

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

    method

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

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

    status

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

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

    user_agent

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

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

    注:url_extract_host为从url中提取域名
    referer

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

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

    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
              limit 60
    

    avg_max_latency

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

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

    top_latency_req

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

    *|select  numeric_histogram(10,request_time)
    

    latency_histogram1

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

     *|select max(request_time,10)
    

    top_10_latency

  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
    

    url0

    url0method
    url0useragent
    url0status

  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
    

    url_pv

![latency1000url](https://yqfile.alicdn.com/5c2faacf8860fac0d9f519474023f57ddd78bcb6.png)

进阶之路

采集并分析Nginx日志

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
监控 应用服务中间件 BI
nginx日志统计分析自动报表工具goaccess(推荐)
## 功能描述 - nginx日志统计分析自动报表工具goaccess(推荐) - 网站总访问量统计,按天统计访问量,按页面(不同URL)统计访问量(不包括JS、css),按静态页面统计访问量(包括JS、css),不存在的页面统计访问量 - 按不同的IP统计访问量,按不同的操作系统统计访问量,...
8872 0
|
8月前
|
人工智能 API 机器人
OpenClaw 用户部署和使用指南汇总
本文档为OpenClaw(原MoltBot)官方使用指南,涵盖一键部署(阿里云轻量服务器年仅68元)、钉钉/飞书/企微等多平台AI员工搭建、典型场景实践及高频问题FAQ。同步更新产品化修复进展,助力用户高效落地7×24小时主动执行AI助手。
30970 253
|
5月前
|
存储 Rust NoSQL
一条命令迁移,帮你实现 OpenClaw 与 Hermes Agent 记忆互通!
本文是基于阿里云 Tablestore 的 Agent 记忆共享实战指南:一条命令迁移 OpenClaw 记忆至 Hermes,通过统一 Tablestore 实例、应用 ID 与租户 ID,实现跨Agent(如龙虾与马)记忆自动互通、实时同步与语义检索,支持 CLI 管理与对话中直接调用,安全可靠,开箱即用。
9407 127
|
3月前
|
存储 人工智能 运维
企业AI知识库落地实操:IT运维视角下的六大能力部署与调优指南
本文从IT运维实战视角,详解企业AI知识库落地的六大核心能力:多云存储部署、全文检索调优、文件关联管理、多平台对接、文件溯源配置与数据隔离实施,结合佑桥平台案例,提供可复用的配置策略、监控要点与自动化运维方案。(239字)
295 1
|
4月前
|
存储 数据采集 机器人
具身智能爆发背后,存储如何成为关键基础设施?
具身智能爆发式发展带来存储新挑战:多模态数据采集、仿真生成、清洗标注、分布式训练与低延迟推理各环节诉求迥异。阿里云以 OSS 统一底座(支持 QoS 管控、冷热分层、Vector Bucket 向量检索)+ CPFS 高性能训练引擎协同,构建全链路、高弹性、低成本存储方案。
793 0
具身智能爆发背后,存储如何成为关键基础设施?
|
8月前
|
域名解析 缓存 网络协议
Linux dnsmasq完全教程
dnsmasq是轻量级DNS+DHCP一体化工具,专为小型局域网设计。它能实现DNS缓存加速、内网域名解析(如用“server.local”代替IP)、自动分配IP地址,配置简单、资源占用低,树莓派或老旧服务器也能流畅运行,是家庭、工作室网络管理的“全能小管家”。
|
人工智能 IDE 程序员
Qoder用户上手指南:安装、登录、快捷键、功能亮点(新用户免费领300credits,首购2美元/月)
这个容易让程序员上瘾的 Agentic Coding 平台有哪些上头的功能?对于小白开发者和资深开发者如何用好Qoder呢?
20617 6
Qoder用户上手指南:安装、登录、快捷键、功能亮点(新用户免费领300credits,首购2美元/月)
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1694 3
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
37140 1

相关产品

  • 日志服务