免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5002 | 回复: 15
打印 上一主题 下一主题

关于日志分析的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-10 11:03 |只看该作者 |倒序浏览
我现在想做个自动的日志分析,但是之前没有做过类似的脚本,想请教高手能否给个思路。

    现在是这样的,日志的内容大概如下:
  
    2008-12-06 05:43:36,594  INFO (Logger.java:139) - Register RequestParameterHandler with
    2008-12-06 06:06:39,746 ERROR (IMServlet.java:307) - java.net.SocketException: Write failed: Broken pipe
    2008-12-06 06:06:57,711 ERROR (DBOperate.java:170) - 数据库插入操作异常.

    日志中会有INFO、ERROR或者其他状态,现在想先扫描日志将所有的错误描述扫描出来,确定有多少种错误类型,然后使用错误类型在扫描日志,分析每种错误的数量。

    例如:发现日志种有"Broken pipe"和“数据库插入操作异常”两种错误,然后在分析日志种这两种错误各有多少个。

    我用shell做了个脚本,现在想用perl做一个,因为之前没有用perl做过文本分析,想请高手指点一下思路。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
2 [报告]
发表于 2009-02-10 11:08 |只看该作者
原帖由 kidd05 于 2009-2-10 11:03 发表
我现在想做个自动的日志分析,但是之前没有做过类似的脚本,想请教高手能否给个思路。

    现在是这样的,日志的内容大概如下:
  
    2008-12-06 05:43:36,594  INFO (Logger.java:139) - Register Requ ...

用hash。错误类型为键,出现次数为值
扫描文件一次就行了。

论坛徽章:
0
3 [报告]
发表于 2009-02-10 11:32 |只看该作者
谢谢楼上的思路,呵呵。

怎么能将错误类型取出来呢,每行的长短都不一样,规律是最后两列是错误的类型,这个怎么处理呢??

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
4 [报告]
发表于 2009-02-10 11:40 |只看该作者
原帖由 kidd05 于 2009-2-10 11:32 发表
谢谢楼上的思路,呵呵。

怎么能将错误类型取出来呢,每行的长短都不一样,规律是最后两列是错误的类型,这个怎么处理呢??

就是这点是个问题。根据你举的例子不太好判断什么是错误类型。
最后两列, 怎么判断列的?

是下面规律吗
1) 最后一个冒号:后的内容
2008-12-06 06:06:39,746 ERROR (IMServlet.java:307) - java.net.SocketException: Write failed: Broken pipe

2) 最后一个横线(-)后的内容(如果横线后没有冒号的话)
2008-12-06 06:06:57,711 ERROR (DBOperate.java:170) - 数据库插入操作异常.

论坛徽章:
0
5 [报告]
发表于 2009-02-10 11:54 |只看该作者
是的,就是这个规律。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
6 [报告]
发表于 2009-02-10 11:57 |只看该作者
原帖由 kidd05 于 2009-2-10 11:54 发表
是的,就是这个规律。

简单写了个。

  1. #!/usr/bin/perl

  2. while (<DATA>) {
  3.     next if !/ERROR/;

  4.     $error{$1}++ if /\s*([^-.:]+).?\n$/;
  5. }

  6. print "$_: $error{$_}\n" for(keys %error);

  7. __END__
  8. 2008-12-06 05:43:36,594  INFO (Logger.java:139) - Register RequestParameterHandler with
  9. 2008-12-06 06:06:39,746 ERROR (IMServlet.java:307) - java.net.SocketException: Write failed: Broken pipe
  10. 2008-12-06 06:06:57,711 ERROR (DBOperate.java:170) - 数据库插入操作异常.
复制代码

论坛徽章:
0
7 [报告]
发表于 2009-02-10 12:02 |只看该作者
非常感谢~~~~我去试试先。

论坛徽章:
0
8 [报告]
发表于 2009-02-10 12:10 |只看该作者
log4j

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
9 [报告]
发表于 2009-02-10 12:14 |只看该作者
原帖由 cobrawgl 于 2009-2-10 12:10 发表
log4j

不错的说

论坛徽章:
0
10 [报告]
发表于 2009-02-10 13:47 |只看该作者
原帖由 ynchnluiti 于 2009-2-10 11:57 发表

简单写了个。

#!/usr/bin/perl

while () {
    next if !/ERROR/;

    $error{$1}++ if /\s*([^-.:]+).?\n$/;
}

print "$_: $error{$_}\n" for(keys %error);

__END__
2008-12-06 05:43:36 ...



搞定了,非常感谢~~~

[ 本帖最后由 kidd05 于 2009-2-10 13:56 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP