linux高效统计命令 linux 统计

Linux常见日志统计分析命令在上文中,我们已经详细介绍 linux 三剑客的基本使用,接下来我们看看具体在性能测试领域的运用 , 本文主要介绍的是在 Tomcat 和 Nginx access日志的统计分析 。
server.xml使用配置方式,%D-请求时间,%F-响应时间
字段说明如下:
日志样例:
使用默认 combined 的经典格式上扩展response_timeupstream_response_time
nginx.conf使用配置方式:
字段说明如下:
【linux高效统计命令 linux 统计】日志示例:
为了能理解 AWK 程序,我们下面概述其基本知识 。
模式( pattern ) 用于匹配输入中的每行文本 。对于匹配上的每行文本 , awk 都执行对应的 动作( action ) 。模式和动作之间使用花括号隔开 。awk 顺序扫描每一行文本,并使用 记录分隔符(一般是换行符)将读到的每一行作为 记录,使用 域分隔符( 一般是空格符或制表符 ) 将一行文本分割为多个 域,每个域分别可以使用 2, … 表示 。1 表示第一个域,表示第二个域,n 表示第 n 个域 。$0 表示整个记录 。模式或动作都可以不指定,缺省模式的情况下,将匹配所有行 。缺省动作的情况下,将执行动作 {print},即打印整个记录 。
此处使用Nginx access.log 举例,Tomcat 日志自己举一反三 。使用 awk 分解出Nginx access日志中的信息
以此类推…… 当我们使用默认的域分割符时,我们可以从日志中解析出下面不同类型的信息:
我们不难发现,仅使用默认的域分隔符,不方便解析出请求行、引用页和浏览器类型等其他信息,因为这些信息之中包含不确定个数的空格 。因此,我们需要把域分隔符修改为 “,就能够轻松读出这些信息 。
注意:这里为了避免 Linux Shell 误解 “ 为字符串开始,我们使用了反斜杠,转义了 “。现在,我们已经掌握了 awk 的基本知识 , 以及它是怎样解析日志的 。
此处使用Nginx access.log 举例,Tomcat 日志自己举一反三 。
如果我们想知道那些类型的浏览器访问过网站,并按出现的次数倒序排列,我可以使用下面的命令:
此命令行首先解析出浏览器域,然后使用管道将输出作为第一个 sort 命令的输入 。第一个 sort 命令主要是为了方便 uniq 命令统计出不同浏览器出现的次数 。最后一个 sort 命令将把之前的统计结果倒序排列并输出 。
我们可以使用下面的命令行,统计服务器返回的状态码,发现系统可能存在的问题 。
正常情况下 , 状态码 200 或 30x 应该是出现次数最多的 。40x 一般表示客户端访问问题 。50x 一般表示服务器端问题 。下面是一些常见的状态码:
HTTP 协议状态码定义可以参阅:
查找并显示所有状态码为 404 的请求
统计所有状态码为 404 的请求
现在我们假设某个请求 ( 例如 : URI: /path/to/notfound ) 产生了大量的 404 错误,我们可以通过下面的命令找到这个请求是来自于哪一个引用页,和来自于什么浏览器 。
有时候会发现其他网站出于某种原因,在他们的网站上使用保存在自己网站上的图片 。如果您想知道究竟是谁未经授权使用自己网站上的图片 , 我们可以使用下面的命令:
注意:使用前,将修改为自己网站的域名 。
统计共有多少个不同的 IP 访问:
统计每一个 IP 访问了多少个页面:
将每个 IP 访问的页面数进行从小到大排序:
统计 2018 年 8 月 31 日 14 时内有多少 IP 访问 :
统计访问最多的前十个 IP 地址
查看某一个 IP访问了哪些页面:
统计某个 IP 的详细访问情况,按访问频率排序
列出传输大小最大的几个文件
列出输出大于 204800 byte ( 200kb) 的页面以及对应页面发生次数
列出访问最频的页面(TOP100)
列出访问最频的页面([排除php页面】(TOP100)
列出页面访问次数超过100次的页面
列出最近1000条记录,访问量最高的页面
统计每分钟的请求数,top100的时间点(精确到分钟)
统计每小时的请求数,top100的时间点(精确到小时)
统计每秒的请求数,top100的时间点(精确到秒)
统计当天的 pv
说明:
可以使用下面的命令统计出所有响应时间超过 3 秒的日志记录 。
注意:NF 是当前记录中域的个数 。$NF 即最后一个域 。
列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条
列出相应时间超过 5 秒的请求,显示前20条
统计蜘蛛抓取次数
统计蜘蛛抓取404的次数
通过本文的介绍,我相信同学们一定会发现 linux三剑客强大之处 。在命令行中,它还能够接受,和执行外部的 AWK 程序文件,可以对文本信息进行非常复杂的处理,可以说“只有想不到的,没有它做不到的” 。
linux命令对某一列去重/统计cat file.csv | awk -F '\t' '{print $2}'
'\t'指的是file.csv不同列以'\t'分割,如果的是以其他符号分割,换成其她符号;
'{print $2}'是指取第2列,此处从1开始计数,第1列 , 第2列;
一般去重之前要进行排序
cat file.csv | awk -F '\t' '{print $2}' | sort | uniq
前半部分与命令1一样,后面加上| sort | uniq
比如通过命令2发现 , 第2列取值有两种 , 分别是'neg'和‘pos’,那么我想知道有多少行的第2列取值为'pos',多少行的第2列取值为'neg' 。
cat file.csv | awk -F '\t' '{print $2}' | grep -o 'neg'| wc -l
前半部分与命令1一样,后面加上 | grep -o 'neg'| wc -l
grep -o 'neg'就是取出取值为'neg'的行
wc -l 是计数有多少行
Linux 文件行数统计一、行数统计方法
1、系统命令:wc -l filename
2、grep方法:grep -c "" filename
3、sed方法:sed -n '$=' filename
4、awk方法:awk 'END{print NR}' filename
参考文件
linux下如何统计一个目录下的文件个数以及代码总行数的命令知道指定后缀名的文件总个数命令:
find
.
-name
*.cpp
|
wc
-l
知道一个目录下代码总行数以及单个文件行数:
find
.
-name
*.h
|
xargs
wc
-l
linux统计文件夹中文件数目
第一种方法:
ls
-l|grep
“^-”|wc
-l
ls
-l
长列表输出该目录下文件信息(注意这里的文件 , 不同于一般的文件,可能是目录、链接、设备文件等) 。如果ls
-lR|grep
“^-”|wc-l则可以连子目录下的文件一起统计 。
grep
^-
这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是
^d
wc
-l
统计输出信息的行数 , 因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数 。
第二种方法:
find
./
-type
f|wc
-l
由于默认find会去子目录查找,如果只想查找当前目录的文件用
需要说明的是第二种方法会比第一种方法快很多,尤其是也统计子目录时 。
Linux 命令统计日志某个字段的信息如上图,某个服务器的日志文件 , 通过命令
grep "Send kafka Success" 2021-08-01-info.log | grep "result_size:100"
可以得到相关日志 。现在要求统计所有result_size累加的结果 。
grep "Send kafka Success" 2021-08-01-info.log | grep -o -E "result_size:[0-9] " | awk -F ':' 'BEGIN{print "开始统计result_size累加和"} {sumSize =$2 } END{print "sumSize="sumSize}'
sed 命令可以很好的进行行匹配,但从某一行中精确匹配某些内容,则使用 grep 命令并辅以 -o 和 -E 选项可达到此目的 。其中 -o 表示“only-matching”,即“仅匹配”之意 。光用它不够,配合 -E 选项使用扩展正则表达式则威力巨大 。
比如下面有一条文本 tmp.txt,其中内容为:
{"aid":45,"path":"attachment/Mon_1112/2_1_5728040df3ab346.jpg"}
我们想从中过略出 aid 的值即 45 ,那么可以先如下这么做:
grep -o -E 'aid":[1-9]*' tmp.txt
得到的结果为:
aid":45
这时就好办了,我们可以使用 awk 的 -F 选项指示出冒号分隔符,这样就容易过滤出 45 这个值来,整个命令综合如下:
grep -o -E 'aid":[1-9]*' tmp.txt |awk-F: '{print $2}'
参考文档:
linux高效统计命令的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于linux 统计、linux高效统计命令的信息别忘了在本站进行查找喔 。

    推荐阅读