您问这个问题已经5个月了,希望您已经找到了答案。我将在这里提出一些不同的建议,希望您能在其他情况下找到一些用处。
对于您的用例,我认为您不需要研究峰值检测算法。
因此,这里开始:让我们从时间轴上发生的错误的图片开始:
您想要的是一个数字指示器,它是错误出现的速度的“度量”。而且此措施应适合阈值设置-您的系统管理员应该能够设置限制,以将哪些敏感度错误变为警告来进行控制。
措施1
您提到了“峰值”,获得峰值的最简单方法是每隔20分钟绘制一次直方图:
您的系统管理员将根据条形的高度(即20分钟间隔内可容忍的最大错误)来设置灵敏度。
(此时,您可能想知道20分钟的窗口长度是否无法调整。可以调整,并且您可以认为窗口长度是在同时出现的短语错误中一起定义了单词。)
对于您的特定情况,此方法有什么问题?好吧,您的变量是一个整数,可能小于3。您不会将阈值设置为1,因为这仅表示“每个错误都是警告”,不需要算法。因此,您选择的阈值将是2和3。这不会给系统管理员带来很多细粒度的控制。
措施2
而不是在时间窗口中计算错误,而是跟踪当前错误和最后错误之间的分钟数。如果该值太小,则意味着您的错误变得过于频繁,您需要发出警告。
您的系统管理员可能会将限制设置为10分钟(即,如果错误发生的间隔时间少于10分钟,则为问题)或20分钟。对于不太关键的系统,可能需要30分钟。
该措施提供了更大的灵活性。与度量1不同的是,您可以使用其中的一小部分值,而现在有一个度量可以提供20至30个好的值。因此,您的系统管理员将具有更大的微调范围。
友好的建议
还有另一种方法可以解决此问题。除了查看错误频率外,还可以在错误发生之前对其进行预测。
您提到,此行为是在单个服务器上发生的,已知这是性能问题。您可以监视该计算机上的某些关键绩效指标,并让它们告诉您何时将发生错误。具体来说,您将查看与磁盘I / O相关的CPU使用率,内存使用率和KPI。如果您的CPU使用率超过80%,则系统将变慢。
(我知道您说过您不想安装任何软件,并且确实可以使用PerfMon来执行此操作。但是,那里有免费的工具可以为您执行此操作,例如Nagios和Zenoss。)
对于那些希望在时间序列中找到有关峰值检测的人:
时间序列中的峰值检测
X1个,X2,。。。
中号ķ= (1 - α )Mk − 1+ α Xķ
αXķ
例如,如果您的新值与移动平均线相距太远
Xķ− Mķ中号ķ> 20 %
然后您发出警告。
使用实时数据时,移动平均线很好。但是,假设您已经在一个表中包含了一堆数据,并且只想对它运行SQL查询以查找峰值。
我会建议:
- 计算时间序列的平均值
- σ
- 2个σ
关于时间序列的更多有趣的东西
许多现实世界的时间序列都表现出周期性行为。有一个称为ARIMA的模型,可以帮助您从时间序列中提取这些周期。
考虑周期行为的移动平均线:Holt和Winters