自从你问这个问题以来已经 5 个月了,希望你能想出一些办法。我将在这里提出一些不同的建议,希望您在其他场景中找到一些用处。
对于您的用例,我认为您不需要查看尖峰检测算法。
所以这里开始:让我们从时间轴上发生的错误的图片开始:
你想要的是一个数字指标,一个衡量错误出现速度的“衡量标准”。并且这个措施应该适合阈值 - 您的系统管理员应该能够设置限制,以控制哪些敏感度错误会变成警告。
措施 1
您提到了“尖峰”,获得尖峰的最简单方法是每 20 分钟间隔绘制一个直方图:
您的系统管理员将根据条形的高度设置敏感度,即 20 分钟间隔内可容忍的最大错误。
(此时你可能会想,那20分钟的窗口长度是不是不能调整,可以,而且你可以把窗口长度看成是词组errors together出现的词一起定义。)
对于您的特定场景,这种方法有什么问题?好吧,您的变量是一个整数,可能小于 3。您不会将阈值设置为 1,因为这只是意味着“每个错误都是一个警告”,不需要算法。因此,您对阈值的选择将是 2 和 3。这不会给您的系统管理员提供很多细粒度的控制。
措施 2
不要在时间窗口中计算错误,而是跟踪当前错误和最后错误之间的分钟数。当这个值变得太小时,这意味着你的错误变得太频繁了,你需要发出警告。
您的系统管理员可能会将限制设置为 10 分钟(即,如果错误发生的时间间隔不到 10 分钟,这是一个问题)或 20 分钟。对于任务关键性较低的系统,可能需要 30 分钟。
该措施提供了更大的灵活性。与度量 1 不同,度量 1 可以使用一小组值,现在您有一个度量可以提供 20-30 个良好的值。因此,您的系统管理员将有更多的微调空间。
友好的建议
还有另一种方法可以解决这个问题。与其查看错误频率,不如在错误发生之前对其进行预测。
您提到此行为发生在已知存在性能问题的单个服务器上。您可以监控该机器上的某些关键性能指标,并让它们告诉您何时会发生错误。具体来说,您将查看与磁盘 I/O 相关的 CPU 使用率、内存使用率和 KPI。如果你的 CPU 使用率超过 80%,系统就会变慢。
(我知道你说过你不想安装任何软件,而且你确实可以使用 PerfMon 来做到这一点。但是那里有免费的工具可以为你做到这一点,比如Nagios和Zenoss。)
对于那些希望在时间序列中找到有关尖峰检测的信息的人来说:
时间序列中的尖峰检测
您应该首先做的最简单的事情是计算输入值的移动平均值。如果你的系列是x1,x2,...,那么您将在每次观察后计算移动平均值:
Mk=(1−α)Mk−1+αxk
在哪里α将确定多少重量给出最新值xk.
例如,如果您的新值距离移动平均线太远
xk−MkMk>20%
然后你发出警告。
处理实时数据时,移动平均线很好。但是假设您的表中已经有一堆数据,并且您只想对它运行 SQL 查询以找到峰值。
我会建议:
- 计算时间序列的平均值
- 计算标准差 σ
- 隔离那些大于2σ高于平均值(您可能需要调整该因子“2”)
更多关于时间序列的有趣内容
许多现实世界的时间序列表现出循环行为。有一个名为ARIMA的模型可以帮助您从时间序列中提取这些周期。
考虑到周期性行为的移动平均线:Holt 和 Winters