• Linux 日至分析常用命令


    (注转贴,地址详见末尾!)

    1. grep查找匹配文本

    【a】在文件中查找

     $grep 'failed to initialize BeanFactory' upp-account.log

    【b】查找并显示匹配行及以下的200行

     $grep -A 200 'failed to initialize BeanFactory' upp-account.log

    【c】查找并显示匹配行及以上的200行

     $grep -B 200 'failed to initialize BeanFactory' upp-account.log

    【d】查找,忽略大小写,并显示匹配行及以上的200行

     $grep -i -A 200 'failed to initialize BeanFactory' upp-account.log

    【Linux下日志分析的几个常用命令】

    有时候我们需要对线上的应用日志做一些分析和简单的统计工作,熟悉一下Linux下文本处理的几个命令,可能会有意想不到的收获:

    more   查看文件内容

    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}’

    例外还有tail -f 、head、more、less 、cat 和 uniq 等比较实用!

    转自思考与学习

  • 相关阅读:
    HTTP协议图解
    .NET 发布网站步骤
    使用php在服务器端生成图文验证码
    SQLServer复习文档1(with C#)
    理解 JavaScript 原型 / 原型链
    浅谈瀑布流
    懒加载
    jQuery ajax
    jQuery 动画效果 与 动画队列
    jQuery 事件
  • 原文地址:https://www.cnblogs.com/storymedia/p/4436134.html
Copyright © 2020-2023  润新知