返回
Nginx访问日志PV和UV统计的实现
前端
2023-12-11 22:39:39
Nginx访问日志PV和UV统计的实现
前言
随着互联网的快速发展,网站流量统计已经成为网站运营中必不可少的一环。PV(Page View)和UV(Unique Visitor)是两个最常用的流量统计指标,PV表示页面浏览量,UV表示独立访客数。
实现思路
使用Nginx访问日志统计PV和UV的基本思路如下:
- 前端生成uuid,并将其作为请求参数传递给后端。
- Nginx精确匹配上报请求,并按照指定格式生成日志。
- 定时任务切割日志文件。
- 使用Nodejs脚本分析日志,统计PV、UV。
前端生成uuid
前端可以使用JavaScript代码生成uuid,并将其作为请求参数传递给后端。例如,可以使用以下代码生成uuid:
function generateUuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
Nginx精确匹配上报请求
Nginx可以通过精确匹配上报请求来生成日志。例如,可以使用以下配置来匹配上报请求:
location /report {
# 精确匹配上报请求
if ($request_uri = /report) {
# 生成日志
access_log /var/log/nginx/report.log combined;
}
}
按照指定格式生成日志
Nginx可以按照指定格式生成日志。例如,可以使用以下配置来按照指定格式生成日志:
access_log /var/log/nginx/access.log combined;
# 自定义日志格式
log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$uuid"';
定时任务切割日志文件
可以使用定时任务来切割日志文件。例如,可以使用以下命令来切割日志文件:
# 每天凌晨1点切割日志文件
find /var/log/nginx/access.log -mtime +1 -exec mv {} /var/log/nginx/access.log.$(date +%Y%m%d) \;
使用Nodejs脚本分析日志
可以使用Nodejs脚本来分析日志,统计PV、UV。例如,可以使用以下脚本来统计PV、UV:
const fs = require('fs');
const path = require('path');
// 日志文件路径
const logFile = '/var/log/nginx/access.log';
// 读取日志文件
const data = fs.readFileSync(logFile, 'utf8');
// 按行分割日志文件
const lines = data.split('\n');
// 统计PV和UV
let pv = 0;
let uv = 0;
const uuidSet = new Set();
for (const line of lines) {
// 跳过空行
if (!line) {
continue;
}
// 解析日志行
const parts = line.split(' ');
const uuid = parts[10];
// 统计PV
pv++;
// 统计UV
if (!uuidSet.has(uuid)) {
uv++;
uuidSet.add(uuid);
}
}
// 输出统计结果
console.log(`PV: ${pv}`);
console.log(`UV: ${uv}`);
结语
本文介绍了一种使用Nginx访问日志统计PV和UV的实践。这种方法简单易行,可以帮助网站运营者快速统计出网站的PV和UV。