面向chatgpt运维:根据自定义的日志统计访问用户数
You
如何使用awk统计访问用户数,我的日志格式如下:{"level":"info","ts":"2023/03/31 08:58:03","msg":"/api/v1/goods/project","status":200,"uid":0,"method":"GET","query":"city=%E5%8E%A6%E9%97%A8&area=%E6%B5%B7%E6%B2%A7%E5%8C%BA&card_type=3&page=1&is_select=1","ip":"39.144.251.61","body":"","errors":"","cost":"1.18631ms"}
Genie
可以使用以下的awk命令对日志进行分析统计,从而得到访问用户数:
awk -F',' '{print $6}' logfile.log | awk -F':' '{print $2}' | sort | uniq | wc -l
具体解释如下:
- 第一个awk命令将每行日志根据逗号拆分成多个字段,并打印第6个字段(即uid)。
- 第二个awk命令将uid字段根据冒号进行拆分,取出冒号后面的数字部分。
- 使用sort命令将数字排序。
- 使用uniq命令去除重复的uid。
- 使用wc命令统计唯一的uid数量,即为访问用户数。
如果你的日志不是通过文本文件存在磁盘上,而是在实时流中,那么可以将以上命令中的logfile.log 替换为类似于tail -f 的命令来动态监控流,例如:
tail -f access.log | awk -F',' '{print $6}' | awk -F':' '{print $2}' | sort | uniq | wc -l
You
我想把uid分别列出来
Genie
可以使用以下的awk命令将日志中的uid分别列出来:
awk -F',' '{print $6}' logfile.log | awk -F':' '{print $2}' | sort | uniq
这个命令和之前的相同,只不过是去掉了最后的wc -l
命令,在uniq之前直接打印了所有的uid。输出结果是每一行都包含一个唯一的uid。
You
错了,用这个命令查出来是POST和GET,$6应该改成$5