nginx日志分析
转自: https://blog.csdn.net/u012467744/article/details/103821553
关键字:awk wc sort uniq head
Nginx日志分析
访问日志
access_log path(存放路径) [format(自定义日志格式名称) [buffer=size | off]]
access_log logs/access.log main;
错误日志
error_log path(存放路径) level(日志等级)
[ debug | info | notice | warn | error | crit ] 从左至右,日志详细程度逐级递减,即debug最详细,crit最少。
error_log logs/error.log info;
总请求数
wc -l access.log |awk '{print $1}'
wc -l access.log-20191009 |awk '{print $1}'
wc -l access.log-20190922.gz |awk '{print $1}' 不行
独立IP数
awk '{print $1}' access.log|sort |uniq |wc -l
每秒客户端请求数 TOP5
awk '{print $6}' access.log|sort|uniq -c|sort -rn|head -5
访问最频繁IP Top5
awk '{print $1}' access.log|sort |uniq -c |sort -nr |head -5
访问最频繁的URL TOP5
awk '{print $7}' access.log|sort |uniq -c |sort -nr |head -5
响应大于5秒的URL TOP5
awk '{if ($7 > 5){print $6}}' access.log|sort|uniq -c|sort -rn |head -5
HTTP状态码(非200)统计 Top5
awk '{if ($11 != 200){print $11}}' access.log|sort|uniq -c|sort -rn|head -5
分析请求数大于50000的源IP
cat access.log|awk '{print $NF}'|sort |uniq -c |sort -nr|awk '{if ($1 >50000){print $2}}'
| 管道符用法 上一条命令的输出,作为下一条命令参数
sort可针对文本文件的内容,以行为单位来排序。
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
#-r 以相反的顺序来排序。
#-n 依照数值的大小排序
#-u 意味着是唯一的(unique),输出的结果是去完重了的。
# -t <分隔字符> 指定排序时所用的栏位分隔字符
# -k 列 -k 2.1 第二列第一个字符开始排序 -k 2.1,2.1按第二列第一个字符排序
# +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
sort -rn -k 5 -t . access.log 分隔符.按第五列排序
uniq 可检查文本文件中重复出现的行列。
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
#-c或--count 在每列旁边显示该行重复出现的次数。
uniq -c testfile #删除重复行后的内容
3 test 30 #前面的数字的意义为该行共出现了3次
4 Hello 95 #前面的数字的意义为该行共出现了4次
2 Linux 85 #前面的数字的意义为该行共出现了2次
head显示文件的开头至标准输出中 默认显示文档的前 10 行
-n, --lines=[-]K k,显示文档开始的前k行,-k,不显示文档结尾的最后 k 行
head -n -10 a.txt
wc 命令用于计算字数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
wc [-clw][--help][--version][文件...]
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
-clw在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。
wc testfile testfile_1 testfile_2 #统计多个文件的信息
awk是一种处理文本文件的语言,是一个强大的文本分析工具。
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
选项参数说明:
-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
用法一:
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
# 每行按空格或TAB分割,输出文本中的1、4项
awk '{print $1,$4}' access.log
用法二:
awk -F #-F相当于内置变量FS, 指定分割字符
# 使用"."分割
awk -F. '{print $1,$2}' access.log
# 或者使用内建变量
awk 'BEGIN{FS="."} {print $1,$2}' access.log
# 使用多个分隔符
awk -F '[ .]' '{print $1,$2,$5}' access.log
用法三:
awk -v # 设置变量
awk -va=1 '{print $1,$1+a}' access.log # $1不是数字做0处理
awk -va=1 -vb=s '{print $1,$1+a,$1b}' access.log # 字符连接
用法四:
awk -f {awk脚本} {文件名}
awk -f cal.awk access.log
grep 命令用于查找文件里符合条件的字符串。
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
find查找指定目录下文件
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{} 花括号代表前面find查找出来的文件名。
awk '{print $7}' access_2024-04-16_023001.log|sort |uniq -c |sort -nr |head -5
awk '{print $7}' access_2024-04-16_023001.log|sort |uniq -c |sort -nr |head -20
awk '$10 > 204800 {print $7 $10}' access_2024-04-16_023001.log > filtered_urls.txt
————————————————
版权声明:本文为CSDN博主「飞飞987」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012467744/article/details/103821553
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2019-09-19 Redis详解(六)------ RDB 持久化