前天开发的同事让我帮忙分析下 nginx访问日志,他只要访问日志里面的4个值 ,我看了下nginx的日志格式,下面是其中一段

124.227.66.162 - - [25/Jan/2010:13:42:07 +0800] "POST /design/game.php HTTP/1.1" "uid=355288&cuid=355287&timestamp=1264484517&check=68230e418e28a9d05b8cf1e2f7cbf392&action=plantInfo" 200 1019 "http://www.ime.com/design/flash/main.swf?v=439/`DYNAMIC`/1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" -
124.240.39.49 - - [25/Jan/2010:13:42:07 +0800] "POST /design/game.php HTTP/1.1" "cid=2&lid=4&oid=2&action=researchLayer&cuid=496990&timestamp=1264398138&check=b50cd4ade18c0797df24cb1a8828ae18" 200 219 "http://www.ime.com/design/flash/main.swf?v=439/`DYNAMIC`/1" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)" -
121.236.118.126 - - [25/Jan/2010:13:42:07 +0800] "POST /design/game.php HTTP/1.1" "check=8ec1521fc3df9c03d83af9a4d933dbb0&cuid=509590&timestamp=1264398703&oid=2&action=oreInfo" 200 261 "http://www.ime.com/design/flash/main.swf?v=439/`DYNAMIC`/1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; .NET CLR 2.0.50727)" -

同事让我帮忙取 IP地址 时间 还有 cuid= 和 action= 的值

看上去好乱,但是还是有规律的,里面好多行没有 action 和cuid,我先把他过滤掉

awk '/action/{print $0}' access.log > action.log

因为 如果有action 就肯定会有cuid 所以只过滤一个action就好了
现在的所有行都有 cuid 和 action了
好了,我再来改一改格式,让他看起来更清晰一些

awk -F "[ '&''[']" '{print $1"\t"$5"\t"$10"\t"$11"\t"$12"\t"$13"\t"$14"\t"$15}' action.log > newlog
这样比较麻烦,不过确实能让他更清晰一些,下面是得到的结果

117.83.131.36    25/Jan/2010:14:31:34    "uid=438824    cuid=511252    timestamp=1264401079    check=fbb9ad922f01888e6c0757d117bf304e    action=plantInfo"    200
221.9.32.181    25/Jan/2010:14:31:34    "cuid=506517    action=plantInfo    timestamp=1264401075    check=01661377f346538eba790e856dd3713a    uid=539860"    200
221.178.128.146    25/Jan/2010:14:31:34    "timestamp=1264401105    check=7d5e41feeb3ae0482e1fe990f27ddc67    cuid=303367    display=1    action=plantInfuid=303367"
124.131.80.68    25/Jan/2010:14:31:34    "cuid=393678    timestamp=1264401093    action=checkResearchLayer    check=2f2cc50cc99aa9e05f02b6f6a47cbef6"200    765
125.107.199.28    25/Jan/2010:14:31:34    "timestamp=1264401094    oid=4    uid=350003    action=oreInfo    check=5d835e252b841c86da041b8b63b4b67e    cuid=356549"
111.167.145.209    25/Jan/2010:14:31:34    "action=plantInfo    cuid=154228    timestamp=1264401094    check=5d835e252b841c86da041b8b63b4b67e    uid=372981"    200

看到这里我有点发愁了,因为cuid 和 action 所在的列不是固定的,用简单的AWK过滤不行,需要借助AWK的循环和判断了,而这方面我没有做过于是就在群里发了求助信息,这时候有两个朋友 给了我回复一个是 辉太郎 另一个是 jeremy.zhang
他们的方案也不同,一个是用perl 脚本,另一个是直接用awk
先说说 用perl吧,其实perl我也不太懂,直接把他写的脚本贴上来

#!/usr/bin/perl -w
open(MYFILE,"/mnt/disk/newlog") || die "$!";
while(<MYFILE>)
     {
            $str = $_;
                if ($str =~ m/(.*?)\[/s)
                        {
                              $var1 =  $1;
                                 print  $var1;
                                     }
                if ($str =~ m/\[(.*?)\"/s)
                       {
                              $var4 = $1;
                                 print $var4;
                                    }
                if ($str =~ m/cuid=(\d+)/s)
                          {
                                  $var2 = $1;
                                    print "cuid=",$var2,"\t";
                                         }
               if ($str =~ m/action=(\w+)/s)
                           {
                                   $var3 = $1;
                                    print  "action=",$var3,"\n";
                                        }
                        }

/mnt/disk/newlog 这个是我刚才过滤出来的文件,执行的时候用perl 执行
perl 1.sh > newlog1
但是这条我执行后格式出了一点小偏差

124.197.61.124  25/Jan/2010:14:42:17    cuid=430334     action=plantInfo
54955 124.79.7.236    25/Jan/2010:14:42:17    cuid=318701     action=petsInfo
54956 122.230.66.90   25/Jan/2010:14:42:17    cuid=223422     action=compQuest
54957 113.128.147.225 25/Jan/2010:14:42:17    cuid=362043     action=plantInfo
54958 220.184.20.99   25/Jan/2010:14:42:17    cuid=484582     action=wordInfo
54959 222.161.49.201  25/Jan/2010:14:42:17    cuid=304167     218.95.48.90    25/Jan/2010:14:42:17    cuid=476480     action=plantInfo
54960 218.106.242.20  25/Jan/2010:14:42:17    cuid=501942     action=oreInfo
54961 221.137.223.58  25/Jan/2010:14:42:17    cuid=445595     action=takeQuest
54962 124.126.155.202 25/Jan/2010:14:42:17    cuid=0  action=initData
54963 113.224.227.68  25/Jan/2010:14:42:17    cuid=529218     action=editName
54964 121.4.66.146    25/Jan/2010:14:42:17    cuid=187626     action=researchLayer
54965 220.190.82.170  25/Jan/2010:14:42:17    cuid=62789      action=steal
54966 218.5.38.250    25/Jan/2010:14:42:17    cuid=456212     124.90.203.86   25/Jan/2010:14:42:17    cuid=492016     action=oreInfo

但是总体来讲还是可以接受的

下面看看 awk 命令,

第一步 awk '/action/{print $0}' access.log >tmp.log 过滤出包含action的行

第二步
awk '{print $1"\t"$4"\t"$9}' tmp.log > action.log

将没用的列去掉
第三部
过滤并输出 IP 时间 cuid= action=

awk -F"[ '['\"'&''=']+" '{printf $1"\t"$2"\t";for(i=3;i<=NF;i++){if($i=="cuid" || $i=="action")printf "%s",$i"="$(i+1)"\t"};printf "\n"}' action.log > cuid_action.log

下面是最终的结果

202.113.30.144        25/Jan/2010:13:42:07        cuid=181188    action=compound    
124.227.66.162        25/Jan/2010:13:42:07        cuid=355287    action=plantInfo    
124.240.39.49        25/Jan/2010:13:42:07        action=researchLayer    cuid=496990    
121.236.118.126        25/Jan/2010:13:42:07        cuid=509590    action=oreInfo    
113.139.18.82        25/Jan/2010:13:42:07        cuid=512461    action=oreInfo    
222.184.232.183        25/Jan/2010:13:42:07        cuid=520595    action=oreInfo    
218.59.80.95        25/Jan/2010:13:42:07        cuid=293339    action=questInfo    
221.6.38.37        25/Jan/2010:13:42:07        action=plantInfo    cuid=518015    
125.39.143.96        25/Jan/2010:13:42:07        cuid=133987    action=pkResult    
119.180.17.218        25/Jan/2010:13:42:07        cuid=452667    action=wordInfo

其实上面这三步可以合并成一步但是分开来弄更清晰一些
大家可以通过修改上面这些命令来 定制过滤自己需要的字段,希望对大家有所帮助

转载于:https://blog.51cto.com/13281352/1983821

用AWK来过滤nginx日志中的特定值~~~相关推荐

  1. 如何挖掘Nginx日志中隐藏的金矿?

    " 对很多开发运维人员来说,Nginx日志文件在被删除前可能都不会看上一眼.但实际上,Nginx隐藏了相当丰富的信息,或许其中便蕴含着未知的金矿等你挖掘! Nginx(读作Engine-X) ...

  2. nginx日志中$request_time时间异常问题排查

    女主宣言 nginx日志分为access_log和error_log,可以用于业务的访问统计.服务排障等.我们可以自定义设置log_format,来记录关注的各项指标.本文主要讲述了一次nginx日志 ...

  3. logstash中无法解析nginx日志中的\x09类似字符导致服务停止

    logstash中无法解析nginx日志中的"\x09"类似字符导致服务停止 logstash正常情况是一直稳定运行,突然有一天报告logstash服务宕机,排查日志,在日志中找到 ...

  4. linux awk nginx日志分析,awk分析nginx日志中的网页响应时间

    nginx日志可以十分方便的看到每一个请求的响应速度,通常我会用awk去分析这些请求耗时.通常nginx的log配置是这样的 log_format access_comment '$remote_ad ...

  5. 使用awk命令分析nginx日志定位响应慢的java接口

    nginx日志格式 可以在nginx.conf配置文件中使用log_format自定义日志文件格式,示例如下: log_format main '$remote_addr - $remote_user ...

  6. nginx日志中添加请求的response日志

    换个新公司,做一些新鲜的事情,经过一天的琢磨,终于成功添加response日志 在nginx的日志中添加接口response的日志 由于此功能在nginx内置的功能中没有,需要安装第三方模块ngx_l ...

  7. 【问题】Nginx日志中request_body为空

    部署Nginx,查看Nginx日志的时候,发现request_body的值没有记录下来 Nginx日志: 192.168.1.1--2016-02-24T13:33:54+08:00POST /rat ...

  8. 使用awk 统计分析游戏后台日志中的数据

    awk是Unix/Linux环境下一种非常好的语言,适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于从游戏日志中抽取一些特定的信息,使用awk就非常方便.鉴于在测试工 ...

  9. 如何查看Nginx日志中关于百度爬虫的日志记录

    单独从Nginx日志文件access.log中提取出关于百度爬虫的日志记录并将其存到另一个单独的文件中.可以简单的通过Linux中的管道命令实现,如下所示: cat access.log | grep ...

最新文章

  1. C++复习 第一部分c到c++的过度
  2. java高并发(三)并发编程的基础
  3. Oracle归档日志文件(Archive Log file)
  4. Modbus节点地址规则
  5. 用maya怎么做ak47_串串香应该怎么用配料才能做得好吃
  6. RocketMQ之一:RocketMQ整体介绍
  7. 算法设计与分析(第二版)上机实验题——Java实现
  8. 内网安全-域横向网络传输应用层隧道技术
  9. 基于java+jsp+mysql教师教学质量测评系统
  10. uniapp 真机运行报错 cid unmatched [object Object] at view.umd.min.js:1
  11. Simple polygon
  12. 【Windows 问题系列第 2 篇】如何让显示的窗口在桌面的最上面,而不被其它窗口遮挡?
  13. logit方程怎么写_微分方程(2)-一阶常微分方程的解法
  14. win8信息服务器不可用怎么办,win8系统rpc服务器不可用怎么办?提示rpc服务器不可用处理方法介绍...
  15. 云计算厂商们,你们辜负了中国的用户
  16. 绝对强劲的swf破解工具,swf加密者的噩梦swf reader
  17. 论文文献管理工具——Zotero
  18. 正则表达式与常用文本处理工具
  19. 光纤跳线接口_光纤跳线有哪些接口?
  20. Asynchronous example Thrift in Java

热门文章

  1. 关于自学的又一点思考
  2. STM32用IAR调试出现Error[Pe020]: identifier FILE is undefined 解决方法
  3. 白话SpringCloud | 第三章:服务注册与发现-高可用配置(Eureka)-下
  4. flutter笔记5:官方资料搬运-安卓客户端打包
  5. 轻松学DDD之二:如何高效消化知识
  6. 浅谈Borg/YARN/Mesos/Torca/Corona一类系统
  7. Concurrent and Parallel
  8. 游戏的发动机——数值设计
  9. SSH服务器能够允许root用户远程登录
  10. 同样的c代码,为何在windows下和linux下执行结果不一样?