繁体   English   中英

使用Python记录解析:如果在给定时间内超过N个错误,则发出警报吗?

[英]Log parsing in Python: Alert if more than N errors in a given period?

我有一个包含一小时数据的日志文件。

如果在该日志中的任何5分钟内记录的错误超过N个,我想生成警报。

不想做的就是候5分钟的时间(如00-05,06-10,等等),并遍历它们,因为如果N = 10,和我在04 8个错误,并在07 8个错误,它们将被视为两个独立的桶,不会产生警报。

我想我可以代替迭代60次,每次推进1分钟,并考虑从那一点开始的5分钟,但是有更优雅或更高效的方式吗?

我将错误列表中使用滑动窗口(请参阅在Python中滚动或滑动窗口迭代器以供参考),然后检查每次迭代是否在第一个和最后一个条目在5分钟内

示例(来自Python中的滚动或滑动窗口迭代器 ):

from collections import deque

def window(seq, n=2):
    it = iter(seq)
    win = deque((next(it, None) for _ in xrange(n)), maxlen=n)
    yield win
    append = win.append
    for e in it:
        append(e)
        yield win

for w in window(errors, 10):
    # if (w[-1]['timestamp'] - w[0]['timestamp']) > 60*5:
    #     error

我决定接受depperm评论中的建议(我希望它已经作为答案提交而不是评论,所以我可以将其标记为已接受)。

它看起来像这样:

error_queue = []
max_errors = 3
for log_line in log_lines:
    log_ts = get_timestamp(log_line)
    if contains_error(log_line):
        error_queue.append(log_ts)
        interval_start = log_ts - datetime.timedelta(minutes=5)
        try:
            threshold = error_queue[-max_errors]
        except IndexError:
            continue
        if threshold and threshold >= interval_start:
            raise Exception

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM