坛子里面的大侠能不能推荐一个功能比较强大的日志扫描软件? 大致是这样的,我的交易系统能够产生非常详细的日志,并定时把一些关键的信息整合成电邮发送,然后我在blackberry上能看到。但是,如果我想看更多的一些信息,或者需要定制一些条件时,就要修改现有的代码,增加复杂度 ..... 我打算把定时生成邮件的这个功能从现有系统中抽出来。最好能找一个专门的软件单独做这件事。具体有如下功能: *) 智能扫描日志(能记住上次扫描的位置,不重复扫描) *) 能同时扫描多个日志 *) 发送邮件通知 *) 能够定义很多扫描规则,例如 匹配XXX,时间在Y范围内,发送邮件(甚至使用邮件模板) 匹配ZZZ,将日志中连续3行发送邮件 *) 最好支持regular expression
没有人回复啊,大家都不监测交易的运行结果?如何做分析和排错?.... 这似乎说明我在系统运行和监测方面还是有点先进的? 只有自问自答....供大家参考吧,我基本决定使用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。
fun兄,看了一下觉得这不是我需要的东西,不过还是很感谢你的推荐。 K兄,有时候自己造的轮子还是不如专业轮子啊,我倒是知道几个企业级的日志监测软件,但是再“牛刀”了,所以来坛子里面问问有没有小而精的。我系统运行在VPS上面,没必要一天看着它运行,但是一些关键的信息还是要在掌控之中,比如进场单子执行情况,数据源没更新什么的。 所以通过邮件是最简单的啦。 chris兄的工具功能很强大,要不考虑在这里开个帖子详细介绍一下?相信很多海友(尤其是自动交易的)也有类似的需求吧。自动交易最重要的是策略,然后就是执行和监控了。
时隔一年,过来更新一下。 我最近开始用 Corner Bowl Log Manager (CBLM) http://www.cornerbowl.com/Log-Manager/Log-Manager.aspx 就是#2楼里面的第二个,去年评估那个版本是v9.0的,现在用的是v11.0.0.95。 这应该是个不大的公司,不过技术支持非常快,我这两天和作者交流了一下, 希望能在邮件标题里面增加被扫描到的日志条目,他第二天就发了个包含此功能的新版本,哈哈~ 功能的确很强大,支持正则表达regular expression, SMTP SSL 认证(google smtp必须的),多行日志作为一行处理,监测日志不变化,监测日志大小,同一个日志上面设置很多不同的监测规则,并发不同的邮件,等等等等。 是监测自动交易系统的利器啊。价格也不贵,$29 single license 特此推荐!
我现在都一直用这个软件( 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天试用期过后要付费才能接着用。等到我那边的系统发布出来之后再安装试用这个软件也不迟。而且,大家最好不要用破解的,毕竟是要安装在做交易的计算机上面,现在很多破解软件都是带毒带后门,悄悄偷你东西那种,危险得很。) 之所以提前在这里说这个事,就是不希望大家到最后发现为了用这个策略自动化系统,还要花$99美元去买另一个软件。 现在有几个选择: #1 - 不觉得$99美元是个问题的海友,后面就不用看了,网上信用卡付款购买很方便。 #2 - 如果有很多朋友试用这个软件觉得还行,但是价格有点不能接受的话,可以试试团购,比如凑够10个人,我试试联系一下这个公司,看能不能搞个$30刀的团购价。但是每次都要团购的话,也不是长久之记。如果要的人足够多的话,我也可以试试问他们是否愿意定制个$30刀的阉割版 ,只包括文件日志扫描功能。当然了,这都只能试试,不一定能行... #3 - 找个能够替代CBLM, 并且价格比较合适的。这个需要大家帮忙在网上看看有没有合适的。不过,很多日志扫描方面的配置就需要修改,而且稳定性和性能就不得而知了。这个CBLM毕竟是实际运行了1,2年,稳定性和性能都很有保证。 #4 - 自己开发。其实从功能上说,如果是使用Perl或Python的话,高手在1,2个星期内可以做出个基本能用的脚本,其实界面没所谓,只要命令行能运行就可以,去读个配置文件,然后能定时运行就可以。我自己花点时间是可以做的,但是无奈手头事情太多,顾不过来。:o #4其实是我比较希望的一个方向,如果海洋里面的有志之士愿意用Perl或者Python为大家开发一个类似功能的脚本,我可以给你提供日志文件进行测试,也可以做你的测试用户,实际地放在我的系统里面运行。到时大家商量一下怎么酬谢一下这位大侠。 (具体功能需求其实在此帖#1楼已经说明,再有就是,能够通过SSL协议发邮件,比如使用gmail的SMTP) 大家还有更好的思路吗?集思广益,多多益善。
顶贴。 我自己也设计了个很粗糙的轮子:低频扫描日志本件,延时短信通知异常状态。同时会把日志文件上传到云服务器上,真需要的话就手机浏览网页日志。 为了设计这个轮子花的钱远远超过$99了,很迷惑的事情是,如果我去买个更高级的轮子,熟悉使用它说不准又要花上N多时间。所以我倾向于用大众货,至少客服或者技术咨询容易获得。
系统运行监测,我也是自己做的脚本检测。 主要监测: 1、电脑设置是否满足运行 2、行情软件设置及运行是否正常 3、交易策略参数、资金设置是否正常 4、下单系统是否运行正常,有无异常告警 5、电源及网络是否正常。 并对错误进行合理的处理。
这个是要自己写代码生成日志文件吧,我需要的工具是scan/parse日志文件的。 另外也感谢9楼,10楼两位朋友分享自己的思路和经验。 还没有perl/python大侠啊, 看来我要问问开发CBLM的这家公司能给大家提供点什么优惠了。
Perl/Python的话在非Unix类机器上部署稍麻烦。 其实这样的工具一定很多,比如 Mozilla 出品的 Heka https://github.com/mozilla-services/heka 刚Google出来的 OSSEC,http://www.ossec.net/doc/index.html 只是需要自己去选型,学习配置。
多谢epaulin提供的信息, OSSEC 以前我看过,但是因为什么原因就没有采用,等我有空看看。 另外一个Heka倒是第一次听说,也要看一下。 Perl/Python其实在windows也还行,安装很容易。 不过能用现成的就最好了,这方面我是信奉拿来主义的。
大概看了一下OSSEC的文档,发现以下几个关键的功能没有: #1 SMTP发邮件不能使用安全连接,所以不能用gmail的邮件服务器,看到网上有人问类似问题,回答尽然是还要自己配置个邮件服务器再转发...我晕死 #2 日志中的多行可以合并视为一行处理,但是行数尽然必须事先设定,比如每次都把3行的内容合并行一行。这种设计相当无厘头啊,我怎么事先知道某个事件有几行呢,我可以一次下5个单,前3个马上有反馈,后2个可能延迟一下才回来,这个就没法配置了。 #3 配置太复杂了,文档全部是unix命令的,很怀疑它在windows上的表现。看来我还得雇人专门配置和管理这玩意。 我当初没有选它就是太对了。 另外的heka好像太新,主要是处理文件,甚至不能发邮件。 唉,看来人家CBLM涨价也是有一定道理的。
Heka只是日志收集处理,默认不带 email output,因为企业应用通常不在收集层发送email,有第三方的email插件: https://github.com/tgulacsi/heka-plugins 只是这玩意比较新,包括用的语言也算是新的,要会配置。从各方面去看,我还是很喜欢这套东西的。
日志文件扫描 功能说明 Wenyan兄,我大概整理了一个功能说明,看上去挺吓人的,不过大多都是我的口水话和例子 。 其实主要是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