Минуло 5 місяців, як ви задали це питання, і, сподіваємось, ви щось зрозуміли. Я збираюся зробити декілька різних пропозицій тут, сподіваючись, що ви знайдете для них певне використання в інших сценаріях.
Для вашого використання я не думаю, що вам потрібно дивитися на алгоритми виявлення шипів.
Отже, далі: Почнемо з картини помилок, що трапляються на часовій шкалі:
Те, що ви хочете, - це числовий показник, «міра» того, як швидко з’являються помилки. І ця міра повинна піддаватися встановленню порогових значень - ваші системні адміністратори повинні мати можливість встановлювати межі, які контролюють, які помилки чутливості перетворюються на попередження.
Захід 1
Ви згадали про "шипи", найпростіший спосіб отримати шип - намалювати гістограму через кожні 20-хвилинний інтервал:
Ваші sysadmins встановили б чутливість на основі висоти барів, тобто найбільш помилок, допустимих за 20-хвилинний інтервал.
(На даний момент вам може бути цікаво, чи не можна скоригувати цю 20-хвилинну довжину вікна. Це може бути, і ви можете вважати довжину вікна як визначення слова разом у помилках фрази, що з’являються разом .)
У чому проблема цього методу для вашого конкретного сценарію? Ну, ваша змінна ціле число, ймовірно, менше 3. Ви б не встановили поріг у 1, оскільки це означає лише "кожна помилка - попередження", що не вимагає алгоритму. Тож ваш вибір порогового значення буде 2 та 3. Це не дає вашим системним адміністраторам великої кількості дрібнозернистого контролю.
Захід 2
Замість того, щоб рахувати помилки у часовому вікні, слідкуйте за кількістю хвилин між поточною та останньою помилками. Коли це значення стає занадто малим, це означає, що ваші помилки стають занадто частими, і вам потрібно підвищити попередження.
Ваші sysadmins, ймовірно, встановлять ліміт у 10 (тобто якщо помилки трапляються менше 10 хвилин, це проблема) або 20 хвилин. Можливо, 30 хвилин для менш критичної місії системи.
Цей захід забезпечує більшу гнучкість. На відміну від міри 1, для якої був невеликий набір значень, з якими ви могли працювати, тепер у вас є міра, яка забезпечує хороші 20-30 значень. Таким чином, ваші сисадміни матимуть більше можливостей для тонкої настройки.
Дружні поради
Є ще один спосіб підійти до цієї проблеми. Замість того, щоб дивитись на частоти помилок, можливо передбачити помилки ще до їх виникнення.
Ви згадали, що така поведінка відбувалася на одному сервері, який, як відомо, має проблеми з продуктивністю. Ви можете відстежувати певні ключові показники продуктивності на цій машині і їх повідомляти, коли відбудеться помилка. Зокрема, ви подивитесь на використання процесора, використання пам'яті та KPI, що стосуються вводу-виводу диска. Якщо використання процесора перевищує 80%, система сповільниться.
(Я знаю, ви сказали, що не хочете встановлювати жодне програмне забезпечення, і це правда, що ви могли це зробити за допомогою PerfMon. Але там є безкоштовні інструменти, які зроблять це для вас, як Nagios і Zenoss .)
А для людей, які приїхали сюди, сподіваючись знайти щось про виявлення шипів у часовій серії:
Виявлення шипа в часовій серії
Найпростіше, з чого слід почати, - це обчислити ковзну середню вхідних значень. Якщо ваша серія , ви обчислите ковзну середню після кожного спостереження як:x1,x2,...
Mk=(1−α)Mk−1+αxk
де визначає, яка вага дає останнє значення .αxk
Наприклад, якщо ваше нове значення зайшло занадто далеко від ковзного середнього
xk−MkMk>20%
то ви піднімаєте попередження.
Рухомі середні показники приємні під час роботи з даними в режимі реального часу. Але припустимо, у вас вже є маса даних у таблиці, і ви просто хочете запустити проти неї SQL-запити, щоб знайти шипи.
Я б запропонував:
- Обчисліть середнє значення часового ряду
- Обчисліть стандартне відхилення σ
- Виділіть ті значення, які на перевищують середнє (можливо, вам знадобиться відрегулювати цей коефіцієнт "2")2σ
Більше цікавих матеріалів про часові ряди
Багато реальних часових рядів демонструють циклічну поведінку. Існує модель під назвою ARIMA, яка допомагає витягти ці цикли зі свого часового ряду.
Рухомі середні показники, що враховують циклічну поведінку: Холт і Зінтерс