记录操作 nginx 日志文件的命令

chatgpt 强大.. 仅用于保存备用

分段读取

sed -n '100,200p' access.log
awk 'FNR>=100 && FNR<=200' access.log

时间区间

awk '/13:20:00/,/13:21:00/' access.log

匹配内容

grep 'python-request' access.log

ip 排序

cat access.log | awk '{print $1}' | sort -rn | uniq -c | sort -rn

将日志的包含 .js 的行删除

sed -i '/\.js/d' access.log

将日志的包含 .js 的导出

-n 参数表示关闭默认输出,其中 \ 是用来转义 “.” 的特殊字符, p 表示将匹配到的行打印输出。

sed -n '/\.js/p' access.log > js_requests.log

查看日志行数

wc -l access.log

grep 匹配多个正则

-E 的意思就是 | 不需要转义

grep "pattern1\|pattern2" file.txt
grep -E "pattern1|pattern2" file.txt
grep -e "pattern1" -e "pattern2" file.txt

grep 排除多个匹配

grep -v "pattern1\|pattern2" file.txt
grep -E -v "pattern1|pattern2" file.txt

vscode 删除包含字符的行

^.*(.gif|.png|.jpg|.css|.js|.ico).*\n

alt + enter 选中,再按 delete 删除

json 格式 log 的统计

# 直接 yum install jq 可能会提示 yum 库中没有,需要安装 EPEL 存储库
yum install epel-release
yum install jq

示例1:筛选 qps 大于 200 的日志

[root@VM-3-78-centos logs]# jq 'select(.qps > 200)' traffic.log 
{
  "ts": "2023-07-04 17:30:07",
  "qps": 213
}
{
  "ts": "2023-07-04 18:57:28",
  "qps": 211
}

示例2:域名此处排行榜

 cat access.log | jq -r '.host' | sort | uniq -c | sort -rn

示例3:统计某域名的IP访问排行榜

cat access.log | jq -r 'select(.host == "www.xxx.com") | .remote_addr' | sort | uniq -c | sort -rn

示例4:将 time 字段区间的日志导出

cat debug.log | jq 'select(.time >= "2023-07-20 15:27:44" and .time <= "2023-07-20 15:27:47")' > output_logs.log
本作品采用《CC 协议》,转载必须注明作者和本文链接
welcome come back
讨论数量: 1

总结的很好 :+1:

11个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
94
粉丝
24
喜欢
156
收藏
346
排名:325
访问:2.9 万
私信
所有博文
社区赞助商