Bu soruyu sormanızdan bu yana 5 ay geçti ve umarım bir şey bulmuşsunuzdur. Diğer senaryolarda onlar için bir miktar kullanım bulacağınızı umarak burada birkaç farklı öneride bulunacağım.
Kullanım durumunuz için ani tespit algoritmalarına bakmanız gerekmiyor.
İşte işte: Hadi, bir zaman çizgisinde meydana gelen hataların bir resmini ile başlayalım:
İstediğiniz şey sayısal bir gösterge, hataların ne kadar hızlı geldiğinin "ölçüsü". Ve bu önlem eşikleme için uygun olmalıdır - sistem yöneticileriniz hangi hassasiyet hatalarının uyarılara dönüşeceğini kontrol eden sınırlar koyabilmelidir .
1. Ölçü
"Çivilerden" bahsettiniz, çiviyi almanın en kolay yolu her 20 dakikalık aralıkta bir histogram çizmek :
Sistem yöneticileriniz çubukların yüksekliğine bağlı olarak hassasiyeti ayarlayacaktır, yani 20 dakikalık aralıklarla tolere edilebilecek en fazla hata.
(Bu noktada, o 20 dakikalık pencerenin uzunluğunun ayarlanıp ayarlanamayacağını merak ediyor olabilirsiniz. Yapabilir ve pencerenin uzunluğunu, birlikte görünen tümcecik hataları ifadesinde birlikte sözcüğü tanımlamak olarak düşünebilirsiniz .)
Özel senaryonuz için bu yöntemle ilgili sorun nedir? Değişkeniniz muhtemelen 3'ten küçük bir tamsayıdır. Eşiğinizi 1 olarak ayarlamazsınız, çünkü bu sadece bir algoritma gerektirmeyen "her hata bir uyarıdır" anlamına gelir. Bu yüzden eşik için yaptığınız seçimler 2 ve 3 olacak. Bu, sistem yöneticilerinize çok iyi bir kontrol sağlamıyor.
2. Ölçü
Bir zaman penceresinde hataları saymak yerine, geçerli ve son hatalar arasındaki dakika sayısını takip edin. Bu değer çok küçük olduğunda, hatalarınızın çok sıklaştığı ve bir uyarı vermeniz gerektiği anlamına gelir.
Sistem yöneticileriniz muhtemelen limiti 10 olarak ayarlayacaktır (yani, hatalar 10 dakikadan daha az sürüyorsa, bu bir problemdir) veya 20 dakika. Daha az kritik bir sistem için belki 30 dakika.
Bu önlem daha fazla esneklik sağlar. Birlikte çalışabileceğiniz küçük bir değer kümesinin olduğu Ölçü 1'in aksine, şimdi iyi bir 20-30 değer sağlayan bir ölçüme sahipsiniz. Bu nedenle, sistem yöneticileriniz ince ayar yapmak için daha fazla alana sahip olacaktır.
Arkadaşça tavsiye
Bu soruna yaklaşmanın başka bir yolu var. Hata frekanslarına bakmak yerine, hataları oluşmadan önce tahmin etmek mümkün olabilir.
Bu davranışın, performans sorunu olduğu bilinen tek bir sunucuda gerçekleştiğini söylediniz. Bu makinedeki bazı Temel Performans Göstergelerini izleyebilir ve bir hatanın ne zaman olacağını size bildirmelerini sağlayabilirsiniz. Özellikle, CPU kullanımı, Bellek kullanımı ve Disk G / Ç ile ilgili KPI'lara bakarsınız. CPU kullanımınız% 80'i geçerse, sistem yavaşlayacaktır.
(Herhangi bir yazılım yüklemek istemediğinizi söylediğinizi biliyorum ve bunu PerfMon kullanarak yapabileceğiniz doğru. Ancak, Nagios ve Zenoss gibi bunu sizin için yapacak ücretsiz araçlar var .)
Ve buraya, zaman serilerinde ani saplanma ile ilgili bir şeyler bulmayı umarak gelenler için:
Zaman Serilerinde Spike Detection
Yapmanız gereken en basit şey , girdi değerleriniz için hareketli bir ortalama hesaplamaktır . Seriniz ise , o zaman her gözlem olarak sonra hareketli ortalama hesaplar:x1,x2,...
Mk=(1−α)Mk−1+αxk
where the α would determine how much weight give the latest value of xk.
If your new value has moved too far away from the moving average, for example
xk−MkMk>20%
then you raise a warning.
Moving averages are nice when working with real-time data. But suppose you already have a bunch of data in a table, and you just want to run SQL queries against it to find the spikes.
I would suggest:
- Compute the mean value of your time-series
- Compute the standard deviation σ
- Isolate those values which are more than 2σ above the mean (you may need to adjust that factor of "2")
More fun stuff about time series
Many real-world time-series exhibit cyclic behavior. There is a model called ARIMA which helps you extract these cycles from your time-series.
Moving averages which take into account cyclic behavior: Holt and Winters