使用shell命令从请求日志中分析pv、uv

2019-01-11  本文已影响12人  trustjs

在日常工作中,我们经常要统计用户的访问量。
对于pv、uv的统计方式有很多,一般就是前端主动埋点,然后去相关的系统里面查看。
但有时候,前端可能忘记埋点,或者一些其它原因,导致拿不到pv、uv。这个时候,我们可以通过用户的请求日志中来分析出pv、uv。

准备

假如我们有如下日志,其中user_id为用户唯一id,那么就可以通过这个字段来统计UV。其实我们的需求就是匹配出每行日志中的user_id值,然后进行排序,去重,就可以拿到数量了。最简单的办法是通过正则匹配,在这篇文章里我们另辟蹊径。
⚠️注意:如果生产环境日志量比较大,可以先把日志下载到本地再进行分析,避免在生产环境执行命令导致线上机器卡死
out.log

2019-01-07 23:56 +08:00: 200 'GET' '/v/1.0' 'serial=12312&version=2050006&ad=1231&poiId=162912563&poiName=%E5%9B%9B%E5%AD%A3%E5%A4%A7%E7%A2%97%E7%B2%A5&user_id=161991&source=android&role=1&f=android 'SPEND:' 0
2019-01-07 23:57 +08:00: 200 'GET' '/v/1.0' 'serial=32332&version=2050006&ad=1231&poiId=162912563&poiName=%E5%9B%9B%E5%AD%A3%E5%A4%A7%E7%A2%97%E7%B2%A5&user_id=161992&source=android&role=1&f=android 'SPEND:' 0
2019-01-07 23:58 +08:00: 200 'GET' '/v/1.0' 'serial=wrwer&version=2050006&ad=1231&poiId=162912563&poiName=%E5%9B%9B%E5%AD%A3%E5%A4%A7%E7%A2%97%E7%B2%A5&user_id=161993&source=android&role=1&f=android 'SPEND:' 0
2019-01-07 23:59 +08:00: 200 'GET' '/v/1.0' 'serial=qweeq&version=2050006&ad=1231&poiId=162912563&poiName=%E5%9B%9B%E5%AD%A3%E5%A4%A7%E7%A2%97%E7%B2%A5&user_id=161993&source=android&role=1&f=android 'SPEND:' 0

Grep 命令

命令格式:grep [option] pattern file

grep /v/1.0 out.log
grep /v/1.0 out.log | grep 2019-01-07

awk 命令

grep /v/1.0 out.log | grep 2019-01-07 | awk -F "user_id=" '{print $2}'

结果如下

161991&source=android&role=1&f=android 'SPEND:' 0
161992&source=android&role=1&f=android 'SPEND:' 0
161993&source=android&role=1&f=android 'SPEND:' 0
161993&source=android&role=1&f=android 'SPEND:' 0
grep /v/1.0 1.log | grep 2019-01-07 | awk -F "user_id=" '{print $2}' | awk -F "&" '{print $1}'

结果

161991
161992
161993
161993
grep /v/1.0 1.log | grep 2019-01-07 | awk -F "user_id=" '{print $2}' | awk -F "&" '{print $1}' | sort | uniq | wc -l

得到结果 3,即是我们想要的数据。

上一篇 下一篇

猜你喜欢

热点阅读