免费注册 查看新帖 |

Chinaunix

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

请教一个关于实时log分析的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-28 16:39 |只看该作者 |倒序浏览
假设需要登陆(假设是telnet啥的)一个不断生成log的服务器(每秒生成大约10~20行log)

需要用perl读入并进行一定分析,并做一些简单记录,应该是如何的一个思路呢?谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-11-29 13:40 |只看该作者
POE::Wheel::FollowTail

论坛徽章:
0
3 [报告]
发表于 2010-11-29 13:43 |只看该作者
一定要用模块么?perl本身不能实现?  谢谢!

论坛徽章:
0
4 [报告]
发表于 2010-11-29 14:09 |只看该作者
一定要用模块么?perl本身不能实现?  谢谢!
nathanisl 发表于 2010-11-29 13:43

http://perldoc.perl.org/functions/seek.html

Due to the rules and rigors of ANSI C, on some systems you have to do a seek whenever you switch between reading and writing. Amongst other things, this may have the effect of calling stdio's clearerr(3). A WHENCE of 1 (SEEK_CUR ) is useful for not moving the file position:

   1. seek(TEST,0,1);

This is also useful for applications emulating tail -f . Once you hit EOF on your read and then sleep for a while, you (probably) have to stick in a dummy seek() to reset things. The seek doesn't change the position, but it does clear the end-of-file condition on the handle, so that the next <FILE> makes Perl try again to read something. (We hope.)
  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. local $|;

  5. my $log_file = "log.txt";
  6. if (open(my $fp, "<", $log_file))
  7. {
  8.         seek($fp, 0, 2);
  9.         while (1)
  10.         {
  11.                 seek($fp, 0, 1);
  12.                 if (eof($fp))
  13.                 {
  14.                         # sleep 20ms
  15.                         select(undef, undef, undef, 0.02);
  16.                 }
  17.                 else
  18.                 {
  19.                         while (my $new_line = <$fp>)
  20.                         {
  21.                                 # add your code here
  22.                                 print $new_line;
  23.                         }
  24.                 }
  25.         }
  26. }
  27. else
  28. {
  29.         die "$log_file: $!\n";
  30. }
复制代码

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2010-11-29 14:11 |只看该作者
回复 2# wfnh


    能不能推荐几个 POE signal 方面的简单例子?分析到这块阻力很大啊

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-11-29 14:15 |只看该作者
回复  wfnh


    能不能推荐几个 POE signal 方面的简单例子?分析到这块阻力很大啊
zhlong8 发表于 2010-11-29 14:11

什么阻力?

莫非又是内功不足所致?

《UNIX 环境高级编程》看过吗?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2010-11-29 14:16 |只看该作者
一定要用模块么?perl本身不能实现?  谢谢!
nathanisl 发表于 2010-11-29 13:43

模块就是 Perl 本身实现的。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
8 [报告]
发表于 2010-11-29 14:29 |只看该作者
本帖最后由 zhlong8 于 2010-11-29 14:36 编辑

回复 6# flw


    看过,不过不精忘掉不少。 听老大的话我回去补课,这几天在分析POE的实现,底层就差这块了

    老大每次回复都能让我羞的面红耳赤啊

论坛徽章:
0
9 [报告]
发表于 2010-11-29 14:31 |只看该作者
回复  flw


    看过,不过不精忘掉不少。 听老大的话我回去补课,这几天在分析POE的实现,底层就差这 ...
zhlong8 发表于 2010-11-29 14:29



牛~~~

论坛徽章:
0
10 [报告]
发表于 2010-11-29 15:45 |只看该作者
我理解一下:
POE::Wheel::FollowTail
这个模块是检查某个文件的更新,相当于判断tail -f 有无新的内容更新对不对?

那么如果没有文件呢,假设只是单纯命令输入,然后屏幕输出的log呢?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP