`
longzhun
  • 浏览: 370294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux下使用awk,wc,sort,uniq,grep对nginx日志进行分析和统计

 
阅读更多

通过对awk, wc, uniq, grep, sort等命令的组合,分析nginx的access和error日志。

统计各种总量、单位时间量。

 

access.log日志格式(见下图)

说明:
a). 按照Tab键拆分每项数据
b). 字段含义(如下说明)
column1:ip_address
column2:log_time
column3:request
column4:status_code
column5:send_bytes
column6:referer

 

需求一:统计总记录数,总成功数,各种失败数:404,403,500

1. 提取总数

    思路:拆分原始文件,找到状态列,按照不同条件值,分别获取总数。

    a). 使用awk拆分并提取状态码列,并保证该列值大于0,并使用wc命令计算总行

     wc -l 对结果进行汇总

     awk使用-F来指定数据项分隔符。一个字符可是直接使用,比如-F:(英文逗号分隔),否则应该使用英文‘’将分隔符括起来,比如

-F'\t'。

    b). 添加说明信息

    wc -l 的结果作为awk的第一列,所以取$1


 

2. 提取成功、各种失败总数

 

    a). 200成功总数

    在使用awk时,针对变量使用条件执行过滤

 

    b). 404失败总数

 

    c). 403失败总数

 

   d).500失败总数

 

需求二:各种错误中,哪类URL出现的次数最多,要求剔除重复项,并倒叙给出结果

    思路:
    1). 拆分获取request和StatusCode
    2). 对request再拆分获取真实URL
    3). 对URL排序,排重,再计算总数,最后再倒叙给出结果

 

    a). 使用awk得到某类错误(status=500)包含request的中间结果。注意request和status之间使用空格连接

 

    b). 针对中间结果再次使用空格进行拆分,获取request中的URL

    当内容默认使用空格或tab来分隔数据项时,使用awk拆分时,不需要使用-F来执行分隔符。

    如下面命令中的 awk '{print $2}' 没有使用-F指定分隔符。

 

    c). 排序、去除重复项

使用sort对结果进行默认排序

使用uniq -c去除重复项并给出计数结果

 

    d). 根据图上结果,发现重复的URL会被自动计数,但是计数的结果顺序是随机的。我们需要再次针对结果进行排序,使用sort 中的 -k指定列,并指明要求是按照数字的倒叙

去除重复项后,希望对结果进行倒叙

-k指明使用哪一列进行排序,-k1:表示使用第一列进行排序

n指明排序列为数字

r代表使用倒叙

所以-k1nr 代表:要进行排序的第一列请作为数字看待,并且结果要进行倒叙

注意:在去重前,最好先使用sort对结果进行排序,然后才能顺利合并。

 

需求三:要统计URL中文件名出现的次数,结果中要包含Code 和 Referer。但是 URL和 Referer中都包含 / 字符,对于过滤有干扰,尝试去解决。

    思路:
    1). 先拆分获取必要数据
    2). 想办法将URL中文件名之前的部分去除
    3). 然后再排序等

 

    a). 查看原始文件内容

使用cat命令查看原始文件内容。

 

    b). 获取必要信息

由于是\t分隔各个数据项,所以符合默认拆分,不需要-F指明分隔符

 

   c).将URL中文件名之前的部分剔除,但保留referer中的"/"。

 

这部分重点:使用了sed命令对URL进行过滤,只保留URL中的文件名部分,其余部分不再要。

本sed命令只对第一列数据进行应用过滤操作。

#.*/.#\1#解释:

整个内容被#分成两部分

第一部分(两个#号中间的内容).*/.,用来匹配URL中的两部分内容

比如URL为:/koubei/2012/11/19/60/abc.jpg (注意最后有一个空格)

.*/用来匹配:"/koubei/2012/11/19/60/"

.用来匹配:"abc.jpg "

第二部分

\1,用来匹配第一部分中()中的内容,即 "文件名.扩展名 " 

整个命令的含义是:

将URL替换成文件名

即将 "/koubei/2012/11/19/60/abc.jpg "替换成"abc.jpg "

 

    d). 执行排序

注意这里要对第一列先进行排序,否则会影响去重。

 

   e).去重

 

   f).倒叙出结果

分享到:
评论

相关推荐

    nginx-log-analysis:用于分析 nginx 日志文件的很棒的 linux shell 命令的精选列表

    最后,如果你想要进行更深度的分析或自动化处理,可以考虑使用脚本语言(如Python或Perl)编写更复杂的工具,或者使用专门的日志分析软件,如Logstash、ELK Stack(Elasticsearch、Logstash、Kibana)等。...

    Nginx日志统计分析的常用命令总结

    本文主要给大家总结了关于Nginx日志统计分析的一些常用命令,分享出来供大家参考学习,下面来一起看看详细的介绍: 一、IP相关统计 统计IP访问量 awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一...

    nginx日志测试使用 access.log.zip

    分析日志文件通常使用命令行工具,如`grep`、`awk`、`sort`和`uniq`,或者使用专门的日志分析软件如Logstash、Splunk和ELK(Elasticsearch、Logstash、Kibana)堆栈。对于大型日志,可能需要实时分析,这时可以考虑...

    linux 下web服务器每天生成日志的shell脚本

    通过编写和使用shell脚本,我们可以实现Linux环境下Web服务器日志的自动化管理,包括日志生成、归档、切割、分析和安全控制。结合`cron`和`logrotate`工具,可以实现高效的日志维护流程,同时确保日志数据的安全性和...

    p431 - p441如何查看PV原语操作

    首先,用`ack`(或`grep`)组合日期和IP地址,然后`sort`和`uniq`去除重复,最后使用`awk`进一步统计每一天的UV次数。 这些命令和技巧是Linux系统中进行日志分析的基础工具,掌握它们能帮助IT从业者有效地监控和...

    Nginx状态监控以及日志分析详解

    在IT行业中,对服务器的监控和日志分析是运维工作中不可或缺的部分。对于Nginx,一个流行的高性能HTTP和反向代理服务器,了解如何监控其状态和解析日志至关重要。本文将详细阐述Nginx的状态监控和日志分析。 首先,...

    Linux如何查看当前有多少IP连接了这台机子.如何查看都谁连接了我

    netstat -an | grep ESTABLISHED | grep -v '127.0.0.1' | awk '{print $5}' | cut -d: -f1 | sort | uniq | wc -l ``` 这个命令首先筛选出连接,然后提取第五列的IP地址,进一步处理为只取IP部分,去重后计算...

    切割日志和topquery

    在实际操作中,这些脚本(如`topquery.sh`和`urlcode.sh`)可能会结合使用,先对日志进行切割,然后提取出查询并解码,最后统计和展示最频繁的查询。这样的流程对于网站运营、搜索引擎优化(SEO)以及服务器性能优化...

    详解NGINX如何统计网站的PV、UV、独立IP

    而后,可以使用如awk、grep、sort等Linux命令行工具对日志文件进行处理,以得到PV、UV和独立IP的统计数据。例如,通过awk命令提取日志文件中的cookie值,并通过sort和uniq命令进行统计,就可以得到UV数据;对于独立...

    linux 每秒并发数计算方法

    这条命令将取出日志文件的最后一万条记录,然后用 awk 取得日志文件中表示时间的一列,接着再对该列进行一次排序,最后是用 uniq 把这一列相邻的重复行合并,并计算合并的条数。 通过这种方法,可以计算出服务器每...

    传智播客linux基础增强

    了解常用的Shell命令如awk、sed、cut、sort和uniq的使用,将有助于编写更复杂的脚本。同时,理解Shell脚本中的I/O重定向和文件描述符,以及如何调试和优化Shell脚本也是非常重要的。 通过这个课程,你将能够熟练地...

    面试题.md

    - 使用`cat`、`awk`、`uniq`、`sort`和`head`命令组合,可以统计Nginx访问日志中每个IP地址的访问次数,并列出前10名。 - `awk`用于提取日志中的IP地址并计数。 - `uniq`与`sort`结合使用来排序计数结果。 8. **...

    Linux 每日小技巧

    使用`ifconfig`命令结合`grep`、`awk`和`cut`,可以轻松获取当前网络接口的IP地址: ```bash ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -c 6- ``` 这里`ifconfig eth0`显示eth0接口的信息,`grep...

    Linux/Nginx如何查看搜索引擎蜘蛛爬虫的行为

    本文主要介绍了在Linux系统上,特别是使用Nginx作为Web服务器时,如何查看和分析搜索引擎爬虫的活动。以下是具体的步骤和命令详解: 1. **查看搜索引擎爬虫访问次数** 使用`grep`命令筛选出特定爬虫的访问记录,...

    shell统计pv和uv、独立ip的方法

    这里首先使用`cut`命令以空格为分隔符提取第一列(客户端IP地址),然后通过`sort`命令排序,接着使用`uniq`命令去除重复项,最后使用`wc -l`统计剩余行数,即为UV的值。 #### 三、独立IP统计方法 **独立IP**统计...

    shell编程面试题.doc

    `awk`命令用于提取日志中的IP地址(`$1`),`sort -u`进行排序和去重,`uniq -c`统计每个唯一IP的数量。 5. **计算所有进程占用内存的总和**: `ps aux`列出所有进程的信息,`tail -n +2`跳过第一行(标题行),`...

    linux grep与正则表达式使用介绍

    Linux中的`grep`命令是系统管理员和程序员的得力助手,它通过正则表达式对文本进行高效且精准的搜索。`grep`这个名字来源于“Global search for a Regular Expression and Print”,意味着全局搜索正则表达式并打印...

Global site tag (gtag.js) - Google Analytics