您的位置:首页 > 运维架构 > Nginx

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

2017-02-20 21:29 1251 查看
通过对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).倒叙出结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: