एल्गोरिदम को रिकॉर्ड की गई त्रुटियों में स्पाइक की पहचान करने का सरल तरीका


29

हमें एक प्रारंभिक चेतावनी प्रणाली की आवश्यकता है। मैं एक सर्वर के साथ काम कर रहा हूं जिसे लोड के तहत प्रदर्शन के मुद्दों के लिए जाना जाता है। एक डेटाबेस में टाइमस्टैम्प के साथ त्रुटियां दर्ज की जाती हैं। कुछ मैनुअल हस्तक्षेप कदम हैं जो सर्वर लोड को कम करने के लिए उठाए जा सकते हैं, लेकिन केवल अगर कोई इस मुद्दे से अवगत है ...

यह देखते हुए कि त्रुटियां हुईं, मैं त्रुटियों में स्पाइक की शुरुआत (वास्तविक समय में) की पहचान कैसे कर सकता हूं? हम समय-समय पर या प्रत्येक त्रुटि घटना पर गणना कर सकते हैं।

हम सामयिक त्रुटियों के बारे में असंबद्ध हैं, लेकिन एक विशिष्ट सीमा नहीं है। मैं किसी को भी किसी भी समय हमें सूचित कर सकता हूं, कह सकता हूं, पांच मिनट में तीन त्रुटियां, लेकिन मुझे यकीन है कि एक बेहतर तरीका है ...

मैं sysadmins से प्रतिक्रिया के आधार पर एल्गोरिथ्म की संवेदनशीलता को समायोजित करने में सक्षम होना चाहता हूं। अभी के लिए, वे इसे काफी संवेदनशील होना पसंद करेंगे, भले ही हम जानते हैं कि हम कुछ गलत सकारात्मक की उम्मीद कर सकते हैं।

मैं एक सांख्यिकीविद् नहीं हूं, जो मुझे यकीन है कि स्पष्ट है, और हमारे मौजूदा टूल: SQL सर्वर और पुराने-स्कूल ASP JScript के साथ अपेक्षाकृत सरल होने के लिए इसे लागू करना आवश्यक है। मैं कोड में उत्तर की तलाश नहीं कर रहा हूं, लेकिन अगर इसे अतिरिक्त सॉफ़्टवेयर की आवश्यकता है, तो यह शायद हमारे लिए काम नहीं करेगा (हालांकि मैं अपनी टिप्पणी के लिए अव्यवहारिक लेकिन आदर्श समाधान का एक टिप्पणी के रूप में स्वागत करता हूं)।


1
ऐसा लगता है कि लोगों के लिए उपयोगी है, इसलिए मैं इस शीर्षक को छोड़ दूंगा, लेकिन मुझे लगता है कि "स्पाइक" भ्रामक है। वास्तव में हम जो देख रहे थे वह एक विभक्ति बिंदु या सापेक्ष वृद्धि है।
dbenton

जवाबों:


44

इस सवाल को पूछे जाने में आपको 5 महीने हो चुके हैं, और उम्मीद है कि आपको कुछ पता चल जाएगा। मैं यहां कुछ अलग सुझाव देने जा रहा हूं, आशा करता हूं कि आप अन्य परिदृश्यों में उनके लिए कुछ उपयोग करेंगे।

आपके उपयोग-मामले के लिए मुझे नहीं लगता कि आपको स्पाइक-डिटेक्टिंग एल्गोरिदम देखने की जरूरत है।

तो यहाँ है: चलो एक समय रेखा पर होने वाली त्रुटियों की एक तस्वीर के साथ शुरू करते हैं:

त्रुटि ग्राफ

आप जो चाहते हैं वह एक संख्यात्मक संकेतक है, त्रुटियों की कितनी तेजी से "माप" आ रही है। और यह उपाय थ्रेसहोल्ड करने के लिए उत्तरदायी होना चाहिए - आपके सिस्मैडिन्स उन सीमाओं को निर्धारित करने में सक्षम होना चाहिए, जो संवेदनशीलता के साथ चेतावनी में बदल जाते हैं।

उपाय 1

आपने "स्पाइक्स" का उल्लेख किया है, स्पाइक प्राप्त करने का सबसे आसान तरीका हर 20 मिनट के अंतराल पर हिस्टोग्राम बनाना है :

त्रुटि हिस्टोग्राम

आपके sysadmins सलाखों की ऊंचाइयों पर आधारित संवेदनशीलता को सेट करेंगे अर्थात 20 मिनट के अंतराल में सबसे अधिक त्रुटियां सहनीय होंगी।

(इस बिंदु पर आप सोच रहे होंगे कि 20 मिनट की खिड़की की लंबाई को समायोजित नहीं किया जा सकता है। यह कर सकते हैं, और आप खिड़की की लंबाई को एक साथ प्रदर्शित होने वाली वाक्यांश त्रुटियों में शब्द को परिभाषित करने के रूप में सोच सकते हैं ।)

आपके विशेष परिदृश्य के लिए इस पद्धति में क्या समस्या है? ठीक है, आपका चर एक पूर्णांक है, शायद 3. से कम है। आप अपनी सीमा 1 पर सेट नहीं करेंगे, क्योंकि इसका मतलब है कि "हर त्रुटि एक चेतावनी है" जिसे एल्गोरिथ्म की आवश्यकता नहीं है। इसलिए दहलीज के लिए आपकी पसंद 2 और 3 होने वाली है। यह आपके सिस्मडिन्स को पूरी तरह से दानेदार नियंत्रण नहीं देता है।

उपाय २

समय विंडो में त्रुटियों की गणना करने के बजाय, वर्तमान और अंतिम त्रुटियों के बीच मिनटों की संख्या पर नज़र रखें। जब यह मान बहुत छोटा हो जाता है, तो इसका मतलब है कि आपकी त्रुटियां बहुत अधिक हो रही हैं और आपको चेतावनी देने की आवश्यकता है।

समय का अंतर

आपके sysadmins संभवत: 10 पर सीमा निर्धारित करेंगे (अर्थात यदि त्रुटियाँ 10 मिनट से कम हो रही हैं, तो यह एक समस्या है) या 20 मिनट। शायद कम मिशन-महत्वपूर्ण प्रणाली के लिए 30 मिनट।

यह उपाय अधिक लचीलापन प्रदान करता है। उपाय 1 के विपरीत, जिसके लिए आपके द्वारा काम कर सकने वाले मूल्यों का एक छोटा समूह था, अब आपके पास एक उपाय है जो 20-30 मान प्रदान करता है। इसलिए आपके सिस्मडिन्स में फाइन-ट्यूनिंग के लिए अधिक गुंजाइश होगी।

अनुकूल सलाह

इस समस्या से निपटने का एक और तरीका है। त्रुटि आवृत्तियों को देखने के बजाय, त्रुटियों के होने से पहले उनकी भविष्यवाणी करना संभव हो सकता है।

आपने उल्लेख किया कि यह व्यवहार किसी एकल सर्वर पर हो रहा था, जिसे प्रदर्शन समस्याओं के लिए जाना जाता है। आप उस मशीन पर कुछ प्रमुख प्रदर्शन संकेतक की निगरानी कर सकते हैं , और जब कोई त्रुटि होने वाली हो तो उन्हें बता सकते हैं। विशेष रूप से, आप CPU उपयोग, मेमोरी उपयोग और KPI को डिस्क I / O से संबंधित देखेंगे। यदि आपका CPU उपयोग 80% से अधिक है, तो सिस्टम की गति धीमी हो जाएगी।

(मैं तुम्हें कहा था कि आप किसी भी सॉफ्टवेयर स्थापित करने के लिए नहीं करना चाहता था पता है, और यह आप परफ़ॉर्मेंस का उपयोग कर ऐसा कर सकता है यह सच है। लेकिन वहाँ मुफ़्त उपकरण है जो की तरह आप के लिए यह करना होगा, कर रहे हैं Nagios और Zenoss ।)

और यहां आने वाले लोगों के लिए एक समय-श्रृंखला में स्पाइक पहचान के बारे में कुछ खोजने की उम्मीद है:

टाइम-सीरीज़ में स्पाइक डिटेक्शन

एक्स1,एक्स2,

एमकश्मीर=(1-α)एमकश्मीर-1+αएक्सकश्मीर

αएक्सकश्मीर

यदि आपका नया मान चलती औसत से बहुत दूर चला गया है, उदाहरण के लिए

एक्सकश्मीर-एमकश्मीरएमकश्मीर>20%

तब आप चेतावनी देते हैं।

वास्तविक समय के डेटा के साथ काम करने पर मूविंग एवरेज अच्छे होते हैं। लेकिन मान लीजिए कि आपके पास पहले से ही एक तालिका में डेटा का एक गुच्छा है, और आप स्पाइक्स को खोजने के लिए इसके खिलाफ SQL क्वेरी चलाना चाहते हैं।

मै सुझाव दूंगा:

  1. अपनी समय-श्रृंखला के माध्य मान की गणना करें
  2. σ
  3. 2σ

समय श्रृंखला के बारे में अधिक मजेदार चीजें

  1. कई वास्तविक-विश्व समय-श्रृंखला चक्रीय व्यवहार प्रदर्शित करते हैं। एआरआईएमए नामक एक मॉडल है जो आपको अपने समय-श्रृंखला से इन चक्रों को निकालने में मदद करता है।

  2. मूविंग एवरेज जो चक्रीय व्यवहार को ध्यान में रखते हैं: होल्ट एंड विंटर्स


पूरी तरह से और शैक्षिक जवाब के लिए धन्यवाद। हमने प्रत्येक त्रुटि को डेटाबेस में दर्ज करने और अंतिम X (हम 5 पर बसे) में त्रुटियों की संख्या को वापस करने के लिए एक संग्रहीत प्रक्रिया लिखना समाप्त कर दिया। यदि वह संख्या हमारी सीमा से अधिक थी, तो Y, एक चेतावनी ईमेल भेजा गया था। हमने प्रयोग द्वारा दहलीज को तब तक समायोजित किया जब तक हम इससे खुश नहीं हुए। यदि मैं इसे खत्म कर रहा था, तो मैं अधिक ग्रैन्युलैरिटी के लिए त्रुटियों के बीच समय गिनने के आपके सुझाव को शामिल करूंगा।
dbenton

8
प्रसिद्धि का हॉल, तालियाँ । इसे पूरा करने के लिए इस समुदाय में शामिल हो गए।
वेसनियर

3

सांख्यिकीय प्रक्रिया नियंत्रण के लिए +1, स्टेप डिटेक्शन पर यहाँ कुछ उपयोगी जानकारी है ।

एसपीसी के लिए पश्चिमी इलेक्ट्रिक नियमों या नेल्सन नियमों के कार्यान्वयन को लिखना बहुत कठिन नहीं है ।

बस SQL ​​सर्वर में एक यूएसपी बनाते हैं जो डेटा सेट के माध्यम से पुनरावृत्ति करेगा और अपने पड़ोसी बिंदुओं का उपयोग करके नियमों के खिलाफ प्रत्येक बिंदु को पिंग करेगा। शायद घंटे के हिसाब से त्रुटियों की संख्या (आपकी आवश्यकताओं के आधार पर)।


इस तरह का एक सवाल मैं थोड़ी देर पहले स्टैक ओवरफ्लो पर पोस्ट किया था (अगर यह मदद करता है तो बस एक त्वरित उत्तर दिया है): SQL Server 2008 R2 में सांख्यिकीय प्रक्रिया नियंत्रण चार्ट


2

ऑनलाइन डिटेक्शन एल्गोरिदम के लिए एक खोज एक शुरुआत होगी।

स्टैकओवरफ़्लो पर स्थित अधिक जानकारी: मापा सिग्नल का पीक डैम

एक चरम शिखर का पता लगाने की दिनचर्या का एक पायथन कार्यान्वयन जीथब पर पाया जाना है


मैंने ऑनलाइन डिटेक्शन एल्गोरिदम की खोज की , और ज्यादातर अकादमिक लेख मिले जो मेरे सिर के ऊपर हैं। वे उत्तर पकड़ सकते हैं, लेकिन मेरी व्यक्तिगत "सरल" परीक्षा पास नहीं करते। अगर मैं गलत हूं तो मुझे सुधारें, लेकिन मुझे नहीं लगता कि मैं चोटी का पता लगाने वाले एल्गोरिथ्म की तलाश कर रहा हूं। एक बार त्रुटियों के चरम पर पहुंचने के बाद, ऐसा लगता है कि परिभाषा के अनुसार मैंने इस मुद्दे को सबसे खराब घोषित करने का अपना मौका गंवा दिया है। माफ़ अगर "स्पाइक" का मेरा उपयोग भ्रामक था। मुझे लगता है कि मुझे त्रुटियों में निरंतर वृद्धि की भविष्यवाणी करने या एक बड़े कदम की पहचान करने की आवश्यकता है।
dbenton

1

आप सांख्यिकीय प्रक्रिया नियंत्रण को देखना चाह सकते हैं। या समय श्रृंखला निगरानी। इस दिशा में बहुत सारे कार्य हैं, और इष्टतम उत्तर संभवतः इस बात पर बहुत कुछ निर्भर करता है कि आप वास्तव में क्या कर रहे हैं (क्या आपको विसंगतियों आदि का पता लगाने से पहले लोड में वार्षिक या साप्ताहिक मौसमी को फ़िल्टर करने की आवश्यकता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.