有时候我们需要对线上的应用日志做一些分析和简单的统计工作,熟悉一下Linux下文本处理的几个命令,可能会有意想不到的收获:
more /less   查看文件内容
head/tail     查看文件中头或尾的行内容
grep    在文件中查找
awk    文本处理
sort    排序
sed    文本处理
下面举个两个例子,说明一下这几个命令的简单应用
1、统计一下今天支付宝到淘宝、淘宝到支付宝的接口调用情况
第一步,找到日志文件路径,确定日志格式
因为接口调用走是TC,先ssh到一台tc的服务器,到日志目录下,ll 一下,看到有几个命名为alipay的日志文件,感觉是打印接口调用日志的,
more alipay-notify-success.log
输出:
2009-06-29 00:00:00,421 [] INFO  alipay-notify-success -
*********alipay notify callback*********
out_trade_no=T200P2062628786,trade_status=WAIT_BUYER_PAY,notify_action_type=createPartnerTradeAction,
input:
从日志看出,这是支付宝回调淘宝接口的日志,格式包括:时间,订单号、状态、通知类型等等
more alipay.log
输出:
2009-06-29 00:00:00,072 [] INFO  core.SignedTbClientInvoker -
**********Payway Request and Response*********
Service Name:
trade_create
Request URL:
http://aligw.alipay.com
从日志上看,这是淘宝调用支付宝的日志,格式包括:时间,接口类型,请求内容等等
第二步,查找特征文本
需要分类型统计接口的调用次数,所以特征字符串就是接口的类型文本,使用grep 命令
grep ‘,notify_action_type’ alipay-notify-success.log
第二个日志比较特殊,特征文本单独一行,没有固定前缀或者后缀特征,而前一行是固定的”Service Name:“,可以查找前一行,然后grep输出的时候多输出一行:
grep ‘Service Name:’ -A1 alipay.log
grep 命令有很多可选参数,比如忽略大小写,输出前(-B before),后(-A after)行文本等等。
第三步,文本分列
通常,日志文件的一行文本,都由几列组成,中间是分隔字符串,而我们的目标就是找到需要的列,并进行相关的计算,统计,这里就需要用到 awk 命令
对于 alipay-notify-success.log 日志文件,我们使用下面命令:
grep ‘,notify_action_type’ alipay-notify-success.log | awk -F’,’ ‘{a[$3]++}END{for (i in a) print i”,”a[i]}’
grep命令找到符合的行,作为awk命令的输入,-F 后面是指定分隔符号,后面是表达式,首先定义一个数组a(也可以理解为是一个map)用分隔出来的第三列作为下标(key),值每次加一,END 后面是最后执行的语句,循环输出数组
awk命令本身很强大,可以全面地看一下它帮助
第四步,排序
第三步已经完成了计算、统计工作,最后我们根据调用次数进行一下排序,方便查看
这里使用sort 命令
grep ‘,notify_action_type’ alipay-notify-success.log | awk -F’,’ ‘{a[$3]++}END{for (i in a) print i”,”a[i]}’ |sort -t, -k2 -n -r
-t 跟ark的-F功能类似,是把一行文本分成几列,-k指定需要排序的列,-n表示按数字方式排序,-r 表示倒序
最后,我们看到了输出:
notify_action_type=createPartnerTradeAction,52641
notify_action_type=payByAccountAction,44807
notify_action_type=sellerSendGoodsAction,43848
notify_action_type=confirmReceiveAction,40705
notify_action_type=modifyTradeAction,25733
notify_action_type=allowRefundAction,10407
notify_action_type=autoFinishTradeAction,8351
notify_action_type=closeTradeAction,8030
notify_action_type=applyRefundiiiAction,2653
notify_action_type=refundDisburseAction,2330
notify_action_type=confirmDisburseAction,401
notify_action_type=extendTimeoutLimitAction,368
notify_action_type=modifyRefundiiiAction,280
notify_action_type=cancelRefundiiiAction,52
notify_action_type=null,20
notify_action_type=unfreezeTradeAction,1
notify_action_type=refundVoucherCheckPassAction,1
notify_action_type=freezeTradeAction,1
当然这是单台机器的,根据应用的机器数量,可以大致评估一下总的情况。
类似的,对于 日志alipay.log
grep ‘Service Name:’ -A1 alipay.log | sed ‘/Service Name:/’d |sed ‘/–/’d | awk -F’    ‘ ‘{a[$2]++}END{for (i in a) print i”,”a[i]}’ | sort -t, -k2 -n -r
输出:
trade_create,51326
send_goods_confirm_by_platform,40716
confirmReceiveGoods,39351
modifyTradeFee,25261
cae_charge_agent,10074
close_trade,3871
extendTimeout,378
calculate_service_fee,52
union_data_prepare,15
logistic_sign_in,4
接下来,我们再看一个例子
需求:统计一下,denali机器中,我的淘宝首页 这个页面的请求次数和平均响应时间
还是分几步:
1、首先找到日志和日志格式
Apache 的访问日志,/home/admin/cai/logs/cronlog/2009/06/2002009-06-29-taobao-access_log
more 2002009-06-29-taobao-access_log
输出:
58.208.1.15 148452 3251 [29/Jun/2009:00:00:04 +0800] “GET http://my.taobao.com/mytaobao/home/my_taobao.jhtml” 200 14147 “http://my.t
aobao.com/mytaobao/home/my_taobao.jhtml” “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; QQDownload 551; User-agent
: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;); SLCC1; .NET CLR 2.0.50727; MDDC; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
2、查找特征文本
grep ‘GET http://my.taobao.com/mytaobao/home/my_taobao.jhtml’ 2009-06-29-taobao-access_log
3、文本分列
grep ‘GET http://my.taobao.com/mytaobao/home/my_taobao.jhtml’ 2009-06-29-taobao-access_log | awk -F’ ‘ ‘{i+=$2}END{print NR “,” i/NR/1000}’

Linux下日志分析的几个常用命令相关推荐

  1. Linux下日志分析--Linux日志

    简介 我们在企业里面,当我们把服务器放到了互联网当中去了以后,我们的服务器就可能被入侵.这就需要服务器的运维人员定期的对企业的服务器做定期的入侵检测,排查服务器是否被入侵. 下面将介绍入侵检测所用到的 ...

  2. linux下mkdir头文件_Linux部分常用命令学习记录

    Linux部分常用命令 ls 显示目标列表 ls -a 显示所有档案及目录(ls内定将档案名或目录名称为"."的视为影藏,不会列出): ls -l 以长格式显示目录下的内容列表.输 ...

  3. Linux下SVN的安装及SVN常用命令

    SVN的介绍 SVN是一个开源的版本控制系統, svn版本管理工具管理随时间改变的各种数据.这些数据放置在一个中央资料档案库(repository) 中. 这个档案库很像一个普通的文件服务器,它能记住 ...

  4. Linux下KVM虚拟机基本管理及常用命令(转)

    说明:可能有重复 一.KVM的基本管理 1.查看KVM虚拟机配置文件 #Kvm虚拟机默认配置文件位置 [root@kvm qemu]# pwd /etc/libvirt/qemu [root@kvm ...

  5. Linux下安装DB2数据库步骤及常用命令

    前言: 最近有些项目在Linux下使用的是IBM的DB2数据库,感觉没MySQL那样容易了解深入,可能是DB2数据库更倾向于商业化,没MySQL那样开源,相关DB2的资源网上没MySQL那样普及,至于 ...

  6. Linux下MQ安装步骤及MQ常用命令

    文章转自: http://www.cnblogs.com/Bob-FD/p/3836780.html?utm_source=tuicool&utm_medium=referral 如有不全的, ...

  7. Linux下导入SQL文件及MySQL常用命令

    Linux系统下可以直接复制SQL语句进行导入,但是这个方法容易出现导入失败的现象,我们可以直接导入sql文件,可以大大提高成功率. 在导入sql文件前,先说一下MySQL的常用命令. MySQL的登 ...

  8. 【 Linux 】Linux下如何退出vim的一些常用命令总结

    目录 1.保存并退出 2.正常退出 3.不保存退出 4.强制退出 关于如何安装vim,gcc并使用vim编写自己的第一个c程序,我在博文:[ Linux ]安装.配置并用 Vim 编写第一个 C 程序 ...

  9. linux下redis安装配置及redis常用命令(实战详细版)

    一.下载redis 下载地址: http://code.google.com/p/redis/downloads/list 2013年12月7号,我下载的是最新版本:redis-2.6.14.tar. ...

最新文章

  1. 网页开发 与数据联动的图_零基础学习数据可视化pyecharts人物关系图开发
  2. 19.Oracle10g服务器管理恢复--RMAN表空间恢复(练习33)
  3. 安卓高手之路之图形系统(6)ListView继续
  4. python并发入门(part5 event对象)
  5. P4764-[CERC2014]Pork barrel【主席树,LCT,最小生成树】
  6. GOOGLE不让我访问啦?
  7. 33款你可能不知道的开源爬虫软件工具
  8. cpu消耗 pytorch_高效 PyTorch :如何消除训练瓶颈
  9. NB-IoT/LoRa是新技术?其实30年前就已经出现了
  10. 浅谈企业内部安全漏洞的运营(一):规范化
  11. element ui中动态合并单元格_element ui单元格的动态合并
  12. (5)Redis主从同步原理及详细配置
  13. 河北光电机顶盒安装当贝桌面
  14. 动态规划之马拉车算法(Python解法)
  15. 浅谈shadow dom
  16. java怎么取map中的key值,Java获取map中key和value的方法
  17. [Android]实现高德地图导航
  18. 教师学计算机信息,计算机教师
  19. 计算机辅助翻译在翻译中的应用,计算机辅助翻译系统在翻译教学中的应用
  20. storm DRPC问题

热门文章

  1. 【Python】2.x与3​​.x版本的选用版本间的区别
  2. Python 面向对象(二)
  3. jquery each函数 break和continue功能
  4. asp.net最常用的三十三种编程代码
  5. 人工智能、机器学习、深度学习的关系,终于有人讲明白了
  6. 凭什么老程序员被裁,应届生却能月薪 1.3 万?
  7. wps office oa控件 痕迹_WPS加载项案例应用回顾
  8. 关于解决并发问题,99%的程序员都会忽略的一个重要方案!
  9. 限流神器Sentinel,不了解一下吗?
  10. 面试官:Netty的线程模型可不是Reactor这么简单