学会用linux命令统计日志

程序在部署到测试或正式环境后,往往需要查看日志来帮助发现和解决问题,例如需要在日志中统计接口调用的success和fail的次数,来优化高并发的情况。

1.根据日志中的关键字进行统计

cat  log.txt | grep -o '关键字' | wc -l

特别注意:网上有很多文章直接用cat  log.txt | grep  '关键字' | wc -lcat  log.txt | grep -c '关键字' 是不准确的,因为它们都是以行计数,如果日志中三个关键字都在一行,那么出来的结果会是1而不是3。

用到的命令:

grep 

传统的 grep 程序, 在没有参数的情况下, 只输出符合 RE 字符串之句子. 常见参数如下:
-v: 逆反模示, 只输出"不含" RE 字符串之句子.
-r: 递归模式, 可同时处理所有层级子目录里的文件.
-q: 静默模式, 不输出任何结果(stderr 除外. 常用以获取 return value, 符合为 true, 否则为 false .)
-i: 忽略大小写.
-w: 整词比对, 类似 \<word\> .
-n: 同时输出行号.
-c: 只输出符合比对的行数.
-l: 只输出符合比对的文件名称.
-o: 只输出符合 RE 的字符串. (gnu 新版独有, 不见得所有版本都支持.)
-E: 切换为 egrep .

wc

参数:

-c或--bytes或--chars 只显示Bytes数。

-l或--lines 只显示行数。

-w或--words 只显示字数。

2.去重排序(针对格式较整齐)

cat lastb.log | awk '{print $1;$NF}' | sort | uniq -c | sort -nr

特别注意:此方法针对日志比较整齐的,数据项较多的,可以一次把所有不同项的计数都展示出来。

用到的命令:

awk

此命令用法较多,较复杂,详细了解可看这篇https://www.cnblogs.com/-beyond/p/9254007.html,这里只讲我上面用到的。

$1变量代表分隔域的第一个值,$NF变量代表分隔域的最后一个值。

sort

-b 忽略每行前面开始出的空格字符。

-c 检查文件是否已经按照顺序排序。

-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。

-f 排序时,将小写字母视为大写字母。

-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。

-m 将几个排序好的文件进行合并。

-M 将前面3个字母依照月份的缩写进行排序。

-n 依照数值的大小排序。

-o<输出文件> 将排序后的结果存入指定的文件。

-r 以相反的顺序来排序。

-t<分隔字符> 指定排序时所用的栏位分隔字符。

+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

uniq

-c或--count 在每列旁边显示该行重复出现的次数。

-d或--repeated 仅显示重复出现的行列。

-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。

-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。

-u或--unique 仅显示出一次的行列。

-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。

 未完待续。。

猜你喜欢

转载自blog.csdn.net/qq_36961530/article/details/96487827