FIX消息速率监控

时间:2013-08-12 20:56:34

标签: message fix-protocol logfile rates

我是该网站的新手,具有有限的脚本技能,但能够毫无问题地通过脚本选择我的方式。 我想编写一个脚本来实时监控通过大量日志文件传来的FIX消息;按帐户和符号。费率需要按分钟计算。目前我不确定这是一分钟计算还是滚动60秒计算。 我还没有写任何东西,我只是想看看这是否可行,是否有人可以给我一些关于什么是最好的脚本语言的指示。 感谢

1 个答案:

答案 0 :(得分:0)

这是一个残酷的解决方案。如果行上有35 = D,我们使用正则表达式来分割有趣的部分,时间戳(没有秒,因此条目落入分钟级别的等价类),以及两个标记并将其转储为“多维”数组,意思是我们使用这些作为数组的索引。一旦我们浏览了所有消息,我们就会按照特定的顺序扫描数组,然后转储计数器。它非常丑陋......三个'匹配'函数应该写成一个,也许输出排序,但这在shell中的'sort'是微不足道的。

#!/usr/bin/awk -f

#Out_Vec__PWKBVSP-LE2__0 [ 601] : timestamp=2013-08-12-13:00:01.235605858 :: latency=1323.3460000000 :: 8=FIX.4.4|9=0253|35=D|34=0000601|52=20130812-13:00:01.235|49=SENDER|56=RECEIVER|‌​57=SOR|50=TRADER|128=SPSE|11=ORDERID1|453=3|448=16|447=D|452=7|448=DMA1|447=D|452‌​=54|448=ABC|447=D|452=36|1=ACCOUNT123|55=LPSB3|54=1|60=20130812-13:00:00.000|38=6‌​400|40=2|44=17.8700|15=BRL|59=0|10=010| :: aux_len=0,

/35=D/ {
    n=match($0, /.*\|1=([^\|]+)\|.*/, tmp1);
    n=match($0, /.*\|55=([^\|]+)\|.*/, tmp2);
    n=match($0, /[^:]+: timestamp=([[:digit:]]+)-([[:digit:]]+)-([[:digit:]]+)-([[:digit:]]+):([[:digit:]]+).*/, ts);
#    print tmp1[1], tmp2[1], ts[1], ts[2], ts[3], ts[4], ts[5];
    aggr[tmp1[1], tmp2[1], ts[1], ts[2], ts[3], ts[4], ts[5]]++;
}

END {
    for (i in aggr)
    print i, aggr[i];
}

对于我得到的样本:

ACCOUNT123PSSA3201308121301 3
ACCOUNT123CPFE3201308121301 1
ACCOUNT123LPSB3201308121300 1
ACCOUNT123GETI4201308121301 1

可以进一步处理。