面向chatgpt运维:根据自定义的日志统计访问用户数

发布时间 2023-03-31 16:45:19作者: 西门飘柔
Crafted by [Genie](https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode)

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

具体解释如下:

  1. 第一个awk命令将每行日志根据逗号拆分成多个字段,并打印第6个字段(即uid)。
  2. 第二个awk命令将uid字段根据冒号进行拆分,取出冒号后面的数字部分。
  3. 使用sort命令将数字排序。
  4. 使用uniq命令去除重复的uid。
  5. 使用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