[英]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.