基于腾讯云CLS统计分析nginx的access.log

一、简介

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

1、使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求。

2、分析nginx的access log,从日志中挖掘有用信息。

两种方式各有优缺点:

1、CNZZ使用起来比较简单,各种指标定义清楚。但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录。

2、access log对所有的请求都有记录,可以说信息非常详细,但需要站长对访问日志具备详细的了解和动手能力。

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

腾讯云日志服务产品CLS在最新版中增强查询分析功能,支持对日志数据实时索引与查询分析,能够在秒级别对亿级别数据完成统计,极大的降低了站长们分析access log的门槛。本文将详细介绍如何使用腾讯云日志服务CLS分析access log中的各种指标。

一个典型的访问日志,包括了以下几个字段:

代码语言:txt
复制
1. remote_addr : 客户端地址
2. remote_user : 客户端用户名
3. time_iso8601 : 服务器本地时间
4. method : HTTP 请求方法
5. url : url地址
6. protocol : 协议类型
7. status : 返回的http状态码
8. body_bytes_sent : 发送给客户端的字节数
9. request_time : 整体请求延时(单位:秒)
10. http_referer : 访问来源的页面链接地址
11. http_user_agent : 客户端信息
12. http_x_forwarded_for : 当前端有代理服务器时,追踪记录客户端真实 IP 地址的配置

下面是一段访问日志的样例:

代码语言:txt
复制
180.171.159.132 - - [2020-02-11T15:34:27+08:00] "GET / HTTP/1.1" 304 0 0.000 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" "-"

腾讯云日志服务CLS中原始日志展示:

二、利用SQL进行统计样例

1、UV统计:

代码语言:txt
复制
select HISTOGRAM(CAST(time_iso8601 AS TIMESTAMP), INTERVAL 1 MINUTE) AS dt, count(distinct(remote_addr)) as uv group by dt order by dt 

2、PV统计:

代码语言:txt
复制
select HISTOGRAM(CAST(time_iso8601 AS TIMESTAMP), INTERVAL 1 MINUTE) AS dt, count(*) as pv group by dt order by dt

3、状态码占比统计:

代码语言:txt
复制
select count(*) as count, status where url like '/%' group by status

4、TOP URL统计:

代码语言:txt
复制
select url as "t-url", count(*) as uc group by url limit 10
select url as "t-url", count(*) as uc group by url order by uc desc limit 10

5、带宽曲线图:

代码语言:txt
复制
 select HISTOGRAM(CAST(time_iso8601 AS TIMESTAMP), INTERVAL 1 MINUTE) AS dt, round(SUM(body_bytes_sent)*8/1000.0, 2) AS "带宽(Kb/min)" group by dt order by dt limit 50 

select HISTOGRAM(CAST(time_iso8601 AS TIMESTAMP), INTERVAL 1 MINUTE) AS dt, round(SUM(body_bytes_sent) * 1.0 / SUM(request_time),2) AS "下载速度(KB/s)" group by dt order by dt limit 50

代码语言:txt
复制

7、请求类型分布:

代码语言:txt
复制
 select HISTOGRAM(CAST(time_iso8601 AS TIMESTAMP), INTERVAL 1 MINUTE) AS dt, count(*) as pv, method group by dt, method order by dt limit 200

三、日志监控告警

CLS还支持各种监控统计指标,如HTTP状态码等

有任何问题欢迎大家加入企业微信群咨询:【云原生日志服务CLS】技术社区群(或者联系:v_ltvli加入)