日志扫描工具 ...

Discussion in 'General Topics on Software and Data' started by espresso, Jun 5, 2011.

  1. 坛子里面的大侠能不能推荐一个功能比较强大的日志扫描软件?

    大致是这样的,我的交易系统能够产生非常详细的日志,并定时把一些关键的信息整合成电邮发送,然后我在blackberry上能看到。但是,如果我想看更多的一些信息,或者需要定制一些条件时,就要修改现有的代码,增加复杂度 .....

    我打算把定时生成邮件的这个功能从现有系统中抽出来。最好能找一个专门的软件单独做这件事。具体有如下功能:
    *) 智能扫描日志(能记住上次扫描的位置,不重复扫描)
    *) 能同时扫描多个日志
    *) 发送邮件通知
    *) 能够定义很多扫描规则,例如
    匹配XXX,时间在Y范围内,发送邮件(甚至使用邮件模板)
    匹配ZZZ,将日志中连续3行发送邮件
    *) 最好支持regular expression
     
  2. 没有人回复啊,大家都不监测交易的运行结果?如何做分析和排错?.... :confused: :confused:
    这似乎说明我在系统运行和监测方面还是有点先进的? :p :D

    只有自问自答....供大家参考吧,我基本决定使用logparser了。

    Advance Log Monitor
    http://www.advancedlogmonitor.com/software.asp
    昨天晚上试了一下advance log monitor,功能太简单,而且不能使用SSL连接发送邮件。不予考虑。

    CB log monitor (CBLM)
    http://www.diskmonitor.com/Log-Manager/Log-Manager.aspx
    昨天晚上也试了一下CBLMadvance log monitor,需要.net framework 3.5,大约230M的安装文件。安装之后启动两个服务,占用大约80M内存。功能比较丰富,可以监测很多类型的日志,包括网络环境里面其他服务器上的日志,可以使用SSL连接发送邮件,具有日志合并,归档等功能。

    如果要使用CBLM的话,目前的一些代码需要修改,才能生成方便CBLM监测的日志。这个需要综合仔细考虑,不急于修改目前运行还不错的代码。

    Logparser
    (更新:June 06, 2011 10:11 )
    这个是微软的工具。前天晚上实验了一下,觉得功能比较强大,而且非常灵活。也许最终会使用这个工具,大致的想法就是写个简单的程序(以保存SMTP的用户和密码)调用这个工具,然后就可以去执行多条查询语句并生成email,然后发送邮件。唯一的缺点是不支持regular expression。
     
  3. 不用第三方也可以吧
    不过你为什么要发email呢?
     
  4. 总算有人跟我需求一致了,做交易实时监控非常重要,除regular expression没实现,比作者需要的功能还要强。
     
  5. fun兄,看了一下觉得这不是我需要的东西,不过还是很感谢你的推荐。

    K兄,有时候自己造的轮子还是不如专业轮子啊,我倒是知道几个企业级的日志监测软件,但是再“牛刀”了,所以来坛子里面问问有没有小而精的。我系统运行在VPS上面,没必要一天看着它运行,但是一些关键的信息还是要在掌控之中,比如进场单子执行情况,数据源没更新什么的。:) 所以通过邮件是最简单的啦。

    chris兄的工具功能很强大,要不考虑在这里开个帖子详细介绍一下?相信很多海友(尤其是自动交易的)也有类似的需求吧。自动交易最重要的是策略,然后就是执行和监控了。
     
  6. 时隔一年,过来更新一下。

    我最近开始用 Corner Bowl Log Manager (CBLM)
    http://www.cornerbowl.com/Log-Manager/Log-Manager.aspx

    就是#2楼里面的第二个,去年评估那个版本是v9.0的,现在用的是v11.0.0.95。



    这应该是个不大的公司,不过技术支持非常快,我这两天和作者交流了一下,
    希望能在邮件标题里面增加被扫描到的日志条目,他第二天就发了个包含此功能的新版本,哈哈~ :D

    功能的确很强大,支持正则表达regular expression, SMTP SSL 认证(google smtp必须的),多行日志作为一行处理,监测日志不变化,监测日志大小,同一个日志上面设置很多不同的监测规则,并发不同的邮件,等等等等。

    是监测自动交易系统的利器啊。价格也不贵,$29 single license
    特此推荐! :)
     
  7. 我现在都一直用这个软件( Corner Bowl Log Manager - CBLM: http://www.cornerbowl.com/Log-Manager/ ) 。该公司被另一公司收购之后,单机版就从$29涨到了$99美元。以前付$29美元买我现在用的功能觉得还挺值,现在付$99就觉得贵了点,主要是很多功能都针对企业网络环境的,用不到... :(

    如果有朋友要使用即将发布的那个策略自动化引擎( 参见 http://www.hylt.net/vb/showpost.php?p=345704&postcount=20) ),就需要用到这个软件做的日志扫描。

    请暂时不要下载和安装这个软件,因为30天试用期过后要付费才能接着用。等到我那边的系统发布出来之后再安装试用这个软件也不迟。而且,大家最好不要用破解的,毕竟是要安装在做交易的计算机上面,现在很多破解软件都是带毒带后门,悄悄偷你东西那种,危险得很。:cool:

    之所以提前在这里说这个事,就是不希望大家到最后发现为了用这个策略自动化系统,还要花$99美元去买另一个软件。

    现在有几个选择:

    #1 - 不觉得$99美元是个问题的海友,后面就不用看了,网上信用卡付款购买很方便。:)

    #2 - 如果有很多朋友试用这个软件觉得还行,但是价格有点不能接受的话,可以试试团购,比如凑够10个人,我试试联系一下这个公司,看能不能搞个$30刀的团购价。但是每次都要团购的话,也不是长久之记。如果要的人足够多的话,我也可以试试问他们是否愿意定制个$30刀的阉割版 :D,只包括文件日志扫描功能。当然了,这都只能试试,不一定能行...

    #3 - 找个能够替代CBLM, 并且价格比较合适的。这个需要大家帮忙在网上看看有没有合适的。不过,很多日志扫描方面的配置就需要修改,而且稳定性和性能就不得而知了。这个CBLM毕竟是实际运行了1,2年,稳定性和性能都很有保证。

    #4 - 自己开发。其实从功能上说,如果是使用Perl或Python的话,高手在1,2个星期内可以做出个基本能用的脚本,其实界面没所谓,只要命令行能运行就可以,去读个配置文件,然后能定时运行就可以。我自己花点时间是可以做的,但是无奈手头事情太多,顾不过来。:o

    #4其实是我比较希望的一个方向,如果海洋里面的有志之士愿意用Perl或者Python为大家开发一个类似功能的脚本,我可以给你提供日志文件进行测试,也可以做你的测试用户,实际地放在我的系统里面运行。到时大家商量一下怎么酬谢一下这位大侠。 :)

    (具体功能需求其实在此帖#1楼已经说明,再有就是,能够通过SSL协议发邮件,比如使用gmail的SMTP)

    大家还有更好的思路吗?集思广益,多多益善。
     
  8. 顶贴。

    我自己也设计了个很粗糙的轮子:低频扫描日志本件,延时短信通知异常状态。同时会把日志文件上传到云服务器上,真需要的话就手机浏览网页日志。

    为了设计这个轮子花的钱远远超过$99了,很迷惑的事情是,如果我去买个更高级的轮子,熟悉使用它说不准又要花上N多时间。所以我倾向于用大众货,至少客服或者技术咨询容易获得。
     
  9. 系统运行监测,我也是自己做的脚本检测。
    主要监测:
    1、电脑设置是否满足运行
    2、行情软件设置及运行是否正常
    3、交易策略参数、资金设置是否正常
    4、下单系统是否运行正常,有无异常告警
    5、电源及网络是否正常。
    并对错误进行合理的处理。
     
  10. 这个是要自己写代码生成日志文件吧,我需要的工具是scan/parse日志文件的。

    另外也感谢9楼,10楼两位朋友分享自己的思路和经验。

    还没有perl/python大侠啊,
    看来我要问问开发CBLM的这家公司能给大家提供点什么优惠了。:D
     
  11. 多谢epaulin提供的信息,
    OSSEC 以前我看过,但是因为什么原因就没有采用,等我有空看看。
    另外一个Heka倒是第一次听说,也要看一下。
    Perl/Python其实在windows也还行,安装很容易。
    不过能用现成的就最好了,这方面我是信奉拿来主义的。:D
     
  12. 大概看了一下OSSEC的文档,发现以下几个关键的功能没有:
    #1 SMTP发邮件不能使用安全连接,所以不能用gmail的邮件服务器,看到网上有人问类似问题,回答尽然是还要自己配置个邮件服务器再转发...我晕死
    #2 日志中的多行可以合并视为一行处理,但是行数尽然必须事先设定,比如每次都把3行的内容合并行一行。这种设计相当无厘头啊,我怎么事先知道某个事件有几行呢,我可以一次下5个单,前3个马上有反馈,后2个可能延迟一下才回来,这个就没法配置了。
    #3 配置太复杂了,文档全部是unix命令的,很怀疑它在windows上的表现。看来我还得雇人专门配置和管理这玩意。

    我当初没有选它就是太对了。:D

    另外的heka好像太新,主要是处理文件,甚至不能发邮件。

    唉,看来人家CBLM涨价也是有一定道理的。
     
  13. 我用Python写一个吧,只是最近有点忙,要稍微过一阵。

    espresso, 你如果有详细一点的需求说明的话可以发给我,或者直接给测试数据和用例更好。
     
  14. 啊哈哈~终于有Wenyan大侠出手了!非常感谢!:D

    大部分需求其实都在这个帖子里面,不过我会整理一个有更详细说明的给你,
    还有实际生成的日志文件也会准备好给你,方便测试。:)
     
  15. Heka只是日志收集处理,默认不带 email output,因为企业应用通常不在收集层发送email,有第三方的email插件: https://github.com/tgulacsi/heka-plugins

    只是这玩意比较新,包括用的语言也算是新的,要会配置。从各方面去看,我还是很喜欢这套东西的。
     
  16. 等我把详细功能列出来(其实也就2,3点很关键),如果有兴趣的话,
    看看能否配置一下heka就搞定,如果行的话,那也是不错啊~ :)
     
  17. 日志文件扫描 功能说明

    Wenyan兄,我大概整理了一个功能说明,看上去挺吓人的,不过大多都是我的口水话和例子 :D :D

    其实主要是4点关键功能,配置文件可能10多行吧。哪天你有空请先看一下,如果哪里没说明白或者一些细节我们再讨论。



    =================================================

    这个日志扫描工具需要监控3个文件(如果连接2个交易商接口则有6个日志文件)。每个文件需要监控的频率,扫描的内容不完全一样。

    为了简化,我们是否就做一个脚本去读一个配置文件,每次也只是扫描一个日志文件即可?比如我们可以这样调用这个脚本:

    log_monitor.py -c tws_core.cfg
    log_monitor.py -c tws_trade.cfg
    log_monitor.py -c tws_msg.cfg


    这样就可以直接用Windows自带的任务调度去控制每n分钟运行一次脚本,每周24x5运行。对其他日志文件就只要提供相应配置文件,然后设定另外一个调度任务即可。这样就完全不需要考虑调度的事情,节省好多代码。

    下面是需要的功能描述,和我想到的配置文件里面包括的相关内容(供你参考,如果你有更好的方法就照你的)。

    #1,定义路径及日志文件名,使用固定文件名,目前不存在日志文件名会变化的问题。本来这个也可以作为脚本参数,但是我觉得放在配置文件里面,今后会有更多的灵活性。
    target_file: path/to/log_file

    #2,每次扫描完文件之后能记住上次扫描的位置和文件最后更新时间,当日志文件有更新之后只需要从上次已完成的位置继续。(可能需要一个临时文件保存这个行号?)
    last_line: 23100
    last_update: timestamp
    (用途参见#4)


    #3,支持简单或正则表达(RegEx)匹配,这个稍微有点复杂。
    先说日志文件单行或者多行合并为一行的扫描模式这个细节,CBLM里面可以定义每次把单独一行作为扫描对象,进行匹配;
    也可以把多行视为一行再进行匹配,这里的一个技巧就是每行开头必须定义一个行首标记,而这个标记也是RegEx表达。
    比如,我的一个需要多行扫描模式的日志文件里面,每行开头都是 ^[WUIDE] 201|^TWS#
    表示每行或者以 ^[WUIDE] 201 开头,或者以 ^TWS# 开头。

    为了简化程序,我们就规定要扫描的日志文件要不全部是单行扫描,要不就全部都必须有“行首标记”以使用“多行合并一行”的扫描模式,不能混合(其实CBLM也是这样的)。
    multi_line_scan: false | true
    multi_line_mark: "^[WUIDE] 201|^TWS#" (only used when multi_line_scan = true)



    下面是使用“多行合并一行”扫描模式实际的例子:
    最前3行和最后3行都是每一行有个行首标记(蓝色),所以每行都视作一行处理。
    中间第5行是以 ^TWS# 开头(红色),后续的4行都没有行首标记,所以中间第5行至9行视作“一行”进行处理。
    这“一行”其实包含了多个订单的状态,这里有三个订单状态行(实际运行时可以有很多行)。
    如果我定义一个 RegEx 去匹配 "TWS Message(s)" 然后发邮件,那么程序就应该把中间第5行至9行作为“一行”匹配出来,然后作为邮件内容发送。


    I 2013-10-08 10:21:04 ... (第1行)
    I 2013-10-08 10:21:04 ... (第2行)
    I 2013-10-08 10:21:04 ... (第3行)
    TWS#3 EURUSD 10-08 10:21 (第4行)
    TWS Message(s)
    ROW[015]: EUR USD SELL ...
    ROW[016]: EUR USD SELL ...
    ROW[017]: EUR USD SELL ...
    I 2013-10-08 10:21:04 ... (第5行)
    I 2013-10-08 10:22:07 ... (第6行)
    I 2013-10-08 10:22:11 ... (第7行)


    找到一个匹配行之后,我目前能想到的响应方式就两种:远程运行则发邮件,参见#3.1。本地运行则可以播放一个声音文件,参见#3.2(其实这个可以不做?)

    #3.1,对于发送邮件,应该能够使用安全连接和用户认证的SMTP服务发送邮件,比如gmail, amazon的邮件发送服务都有这样的要求。
    (如果发送邮件失败,也许最简单的方法就是不要更新 last_line,那么下次又重新扫描即可?)

    (下面5行只需定义一次)

    smtp_host: smtp.gmail.com
    smtp_port: 465
    smtp_user: user_name
    smtp_pwd: user_pwd
    email_send_to: email_addr1, email_addr2


    (下面这种匹配和响应可以定义很多组,这样就可以监控很多事件)

    regex_rule_1: "TWS Message(s)"
    send_email: extract, before_M_lines, after_N_lines

    regex_rule_2: "^E.*TWS.*no heartbeat"
    send_email: text, "please check data source."


    说明:
    上面第一个例子是找到匹配之后,就把匹配行,包括前面M行, 后面N行的内容一起作为邮件内容发送(这个在实际当中非常有用,能看到这个事件的部分前因后果)。CMLB在这些细节方面做得非常好,还能定制邮件标题,这里我们就先简化吧,比如邮件标题可以固定使用匹配行前30个字符,M,N的设定也可以先不管,就自动把前后5行的内容一起包括在邮件里面即可。比如我上面的例子中,最后发送一个邮件:

    Email_Subject:
    TWS#3 EURUSD 10-08 10:21 ...
    Email_Body:
    ... (前面5行)
    TWS#3 EURUSD 10-08 10:21 (第4行)
    TWS Message(s)
    ROW[015]: EUR USD SELL ...
    ROW[016]: EUR USD SELL ...
    ROW[017]: EUR USD SELL ...
    ... (后面5行)
    Email_End


    上面第二个例子是匹配某个结果后,就固定发预先设定的内容。CBLM可以使用模板,里面还可嵌入一些变量得到动态内容,我们不用搞这么复杂。


    (Python能在Windows上面播放声音吗?其实,我在想要不我们先不考虑播放声音?:) 因为现在的收邮件程序大多有声音警告功能。可先把重点放在发邮件上面,暂不考虑下面#3.2)

    #3.2 ??? 指定声音文件,这里面有个稍复杂的地方,对于一次扫描中的不同 RegEx 匹配结果,需要指定不同声音文件,比如日志里面的订单确认,错误信息,可能有不同的声音。:) 这个是和某个RegEx匹配关联的。(以下表达只是个想法,可能有其他更清晰和灵活的方式)
    regex_rule_1: ^E.*TWS.*ERROR
    play_sound: /path/to/sound_file1
    play_sound_repeat: 0 | N (0: mute)

    regex_rule_2: ^W.*JFX.*WARN
    play_sound: /path/to/sound_file2
    play_sound_repeat: 0 | N (0: mute)



    #4 如果日志文件N分钟内没有更新了,说明产生日志文件的程序有某些异常,这个时候可以发邮件或声音提示。

    file_idle_minutes: 5 (5 minutes)
    send_email: text, "please check XYZ."

    或者
    file_idle_minutes: 5 (5 minutes)
    play_sound: /path/to/sound/file
    play_sound_repeat: 0 | N



    #5 (低优先级)如果日志文件超过指定大小,说明日志需要备份清空,或程序运行异常导致日志暴增,这个时候可以发邮件或声音提示。
    这个监控功能比前面那些简单,但可以先不做,我现在实际使用中每个星期日志文件最多几十兆,每周都备份然后清空。

    file_size_max: 200 (200MB)
    send_email: text, "please archive log."

    或者
    file_size_max: 200 (200MB)
    play_sound: /path/to/sound_file
    play_sound_repeat: 0 | N