您的位置:首页 > 其它

[原创]log分析最实用技巧---使用正则表达式分析大篇幅log

2015-01-08 23:43 399 查看
作为一名通信码农,经常性分析大篇幅的log。久而久之,如何快速的在十兆百兆的文本log中理清问题发生的场景,问题的定位, 逐渐的有了一点心得,这篇文章分享出来,希望能交流经验。

我经验的核心是使用正则表达式:

1)用正则表达式代替简单关键词搜索

一般人会直接使用一个词汇在log中搜索, 比如找模块A, 可能就直接搜索 “moduleA”,这样找到的结果虽然只是跟你模块相关的,但是仍然是log量巨大的。对分析问题带来的好处还是有限。

我的做法是,首先你要对你负责的模块的流程比较清楚,比如启动过程有类似这样的log:

moduleA I'm in status xx, send out event xxx

module A now status xxx, notify event xxx

那么就用正则表达式“moduleA.*event” 搜索。 可以检查启动流程是否正常, 不正常的, 异常发生在了哪一步骤。

2)同时搜索多个模块

接着上面的例子, 如果启动过程中, 怀疑moduleB 行为异常阻碍了moduleA的执行。一般的做法,是分两次搜索,一次搜索moduleA相关的, 一次搜索moduleB相关的。其实可以放在一起搜索:

假如moduleB有下面这样的log:

moduleB xxx run in step xxx

moduleB xxx run pass step xxx

我们可以用正则表达式“moduleA.*event|moduleB.*step” 来搜索, 这样你感兴趣的log就会放在一个搜索结果中。 对于分析两个模块之间的相互影响,时间关系等很有用。

3)如果log的场景是你陌生的, 但是大致确认了是你负责的模块有错误,你没有了固定的pattern 去搜索。这种情况我一般会尝试“moduleA.*err|moduleA.*fail”, err/fail 可以换上其他你经常遇到的表示异常的关键字, 经验上一般一半以上的概率也能找到问题发生的点:)

4) 最后说明一下: 我最长用的ultraedit 是支持上面的正则表达用法的。 虽然notepad++ 也支持,但是有个bug, 即,搜索结果常会有冗余条目,举个例子, log "moduleA in step xxx,notify moduleB", 如果我用正则搜索“moduleA|moduleB” ,上面这行log会在结果中显示两遍, 而ultraedit只显示一遍。

easylifesoso night of 2015, Jan, 8th
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: