วิธีง่าย ๆ ในการระบุการขัดขวางในข้อผิดพลาดที่บันทึกไว้


29

เราต้องการระบบเตือนภัยล่วงหน้า ฉันจัดการกับเซิร์ฟเวอร์ที่ทราบว่ามีปัญหาด้านประสิทธิภาพขณะโหลด ข้อผิดพลาดจะถูกบันทึกในฐานข้อมูลพร้อมกับการประทับเวลา มีขั้นตอนการแทรกแซงด้วยตนเองที่สามารถดำเนินการเพื่อลดภาระของเซิร์ฟเวอร์ แต่เฉพาะเมื่อมีคนตระหนักถึงปัญหา ...

ด้วยช่วงเวลาที่เกิดข้อผิดพลาดฉันจะระบุจุดเริ่มต้นของการขัดขวางในข้อผิดพลาดได้อย่างไร (ตามเวลาจริง) เราสามารถคำนวณเป็นระยะหรือในแต่ละข้อผิดพลาดเกิดขึ้น

เราไม่สนใจเกี่ยวกับข้อผิดพลาดเป็นครั้งคราว แต่ไม่มีเกณฑ์ที่เฉพาะเจาะจง ฉันสามารถแจ้งใครบางคนได้ตลอดเวลาที่เราได้รับพูดข้อผิดพลาดสามข้อในห้านาที แต่ฉันแน่ใจว่ามีวิธีที่ดีกว่า ...

ฉันต้องการที่จะสามารถปรับความไวของอัลกอริทึมตามข้อเสนอแนะจาก sysadmins สำหรับตอนนี้พวกเขาต้องการให้มีความละเอียดอ่อนพอสมควรแม้ว่าเราจะรู้ว่าเราสามารถคาดหวังผลบวกที่ผิดพลาดได้

ฉันไม่ใช่นักสถิติซึ่งฉันแน่ใจว่าชัดเจนและการใช้สิ่งนี้จำเป็นต้องค่อนข้างง่ายด้วยเครื่องมือที่มีอยู่ของเรา: SQL Server และ ASP JScript ของโรงเรียนเก่า ฉันไม่ได้มองหาคำตอบในรหัส แต่ถ้ามันต้องใช้ซอฟต์แวร์เพิ่มเติมมันอาจจะไม่ทำงานสำหรับเรา (แม้ว่าฉันยินดีต้อนรับทางออกที่ไม่เหมาะ แต่เป็นความคิดเห็นสำหรับความอยากรู้อยากเห็นของฉันเอง)


1
สิ่งนี้ดูเหมือนจะเป็นประโยชน์กับผู้คนดังนั้นฉันจะปล่อยให้ชื่อเป็น - เป็น แต่ฉันคิดว่า "ขัดขวาง" ทำให้เข้าใจผิด สิ่งที่เรากำลังมองหาคือจุดเปลี่ยนหรือการเพิ่มความสัมพันธ์
dbenton

คำตอบ:


44

เป็นเวลา 5 เดือนแล้วที่คุณถามคำถามนี้และหวังว่าคุณจะได้ทราบบางสิ่ง ฉันจะทำข้อเสนอแนะที่แตกต่างกันเล็กน้อยที่นี่หวังว่าคุณจะเห็นประโยชน์บางอย่างสำหรับพวกเขาในสถานการณ์อื่น ๆ

สำหรับการใช้งานของคุณฉันไม่คิดว่าคุณจะต้องดูอัลกอริธึมการตรวจจับแบบขัดขวาง

ดังนั้นนี่ไป: ลองเริ่มด้วยรูปภาพของข้อผิดพลาดที่เกิดขึ้นบนไทม์ไลน์:

กราฟข้อผิดพลาด

สิ่งที่คุณต้องการคือตัวบ่งชี้ตัวเลข "การวัด" ว่าข้อผิดพลาดเกิดขึ้นเร็วแค่ไหน และมาตรการนี้ควรคลาดเคลื่อนไปจากการนวดข้าว - ผู้ดูแลระบบของคุณควรสามารถกำหนดขีด จำกัด ที่ควบคุมว่าข้อผิดพลาดความไวใดเปลี่ยนเป็นคำเตือน

วัด 1

คุณพูดถึง "spikes" วิธีที่ง่ายที่สุดในการรับเข็มคือวาดฮิสโตแกรมในทุก ๆ 20 นาที:

ข้อผิดพลาดฮิสโทแกรม

sysadmins ของคุณจะตั้งค่าความไวตามความสูงของบาร์นั่นคือข้อผิดพลาดที่ยอมรับได้มากที่สุดในช่วงเวลา 20 นาที

(ณ จุดนี้คุณอาจสงสัยว่าไม่สามารถปรับความยาวหน้าต่าง 20 นาทีได้และคุณสามารถคิดถึงความยาวของหน้าต่างเป็นการกำหนดคำด้วยกันในข้อผิดพลาดวลีที่ปรากฏขึ้นพร้อมกัน )

ปัญหาของวิธีนี้สำหรับสถานการณ์เฉพาะของคุณคืออะไร ดีตัวแปรของคุณเป็นจำนวนเต็มอาจน้อยกว่า 3 คุณจะไม่ตั้งเกณฑ์ของคุณเป็น 1 เพราะนั่นหมายถึง "ข้อผิดพลาดทุกคำเตือน" ซึ่งไม่ต้องใช้อัลกอริทึม ดังนั้นตัวเลือกของคุณสำหรับขีด จำกัด จะเท่ากับ 2 และ 3 นี่ไม่ได้ทำให้ระบบดูแลระบบของคุณมีการควบคุมที่ละเอียด

วัด 2

แทนที่จะนับข้อผิดพลาดในหน้าต่างเวลาให้ติดตามจำนวนนาทีระหว่างข้อผิดพลาดปัจจุบันและข้อผิดพลาดล่าสุด เมื่อค่านี้น้อยเกินไปหมายความว่าข้อผิดพลาดของคุณเริ่มบ่อยเกินไปและคุณต้องแจ้งเตือน

ความแตกต่างของเวลา

ผู้ดูแลระบบของคุณอาจตั้งค่าขีด จำกัด ไว้ที่ 10 (เช่นหากข้อผิดพลาดเกิดขึ้นน้อยกว่า 10 นาทีมันเป็นปัญหา) หรือ 20 นาที อาจใช้เวลา 30 นาทีสำหรับระบบที่มีภารกิจสำคัญน้อยกว่า

มาตรการนี้ให้ความยืดหยุ่นมากขึ้น ซึ่งแตกต่างจากการวัด 1 ซึ่งมีชุดค่าขนาดเล็กที่คุณสามารถใช้งานได้ในขณะนี้คุณมีการวัดที่ให้ค่า 20-30 ที่ดี sysadmins ของคุณจะมีขอบเขตมากขึ้นสำหรับการปรับจูน

คำแนะนำที่เป็นมิตร

มีวิธีอื่นในการแก้ไขปัญหานี้ แทนที่จะดูที่ความถี่ของข้อผิดพลาดอาจเป็นไปได้ที่จะทำนายข้อผิดพลาดก่อนที่จะเกิดขึ้น

คุณกล่าวว่าพฤติกรรมนี้เกิดขึ้นในเซิร์ฟเวอร์เดียวซึ่งทราบว่ามีปัญหาด้านประสิทธิภาพ คุณสามารถตรวจสอบตัวบ่งชี้ประสิทธิภาพหลักบางอย่างบนเครื่องนั้นและให้พวกเขาบอกคุณเมื่อเกิดข้อผิดพลาด คุณจะพิจารณาการใช้งาน CPU การใช้หน่วยความจำและ KPI ที่เกี่ยวข้องกับ Disk I / O หากการใช้งาน CPU ของคุณเกิน 80% ระบบจะช้าลง

(ฉันรู้ว่าคุณบอกว่าคุณไม่ต้องการติดตั้งซอฟต์แวร์ใด ๆ และเป็นความจริงที่คุณสามารถทำได้โดยใช้ PerfMon แต่มีเครื่องมือฟรีอยู่ที่นั่นซึ่งจะทำสิ่งนี้ให้คุณเช่นNagiosและZenoss )

และสำหรับคนที่มาที่นี่โดยหวังว่าจะได้พบกับการตรวจจับแบบสไปค์ในซีรีย์เวลา:

การตรวจจับแบบขัดขวางใน Time-Series

x1,x2,...

Mk=(1-α)Mk-1+αxk

αxk

หากค่าใหม่ของคุณเคลื่อนห่างจากค่าเฉลี่ยเคลื่อนที่มากเกินไป

xk-MkMk>20%

จากนั้นคุณแจ้งเตือน

ค่าเฉลี่ยเคลื่อนที่เป็นสิ่งที่ดีเมื่อทำงานกับข้อมูลเรียลไทม์ แต่สมมติว่าคุณมีกลุ่มข้อมูลอยู่ในตารางอยู่แล้วและคุณต้องการเรียกใช้คิวรี่ SQL เพื่อค้นหาสไปค์

ฉันจะแนะนำ:

  1. คำนวณค่าเฉลี่ยของอนุกรมเวลาของคุณ
  2. σ
  3. 2σ

สิ่งที่สนุกสนานมากขึ้นเกี่ยวกับอนุกรมเวลา

  1. โลกแห่งความเป็นจริงเวลา - อนุกรมแสดงพฤติกรรมวงจร มีรูปแบบที่เรียกว่าARIMAซึ่งช่วยให้คุณสามารถแยกวงจรเหล่านี้ออกจากอนุกรมเวลาของคุณได้

  2. การย้ายค่าเฉลี่ยซึ่งคำนึงถึงพฤติกรรมที่เป็นวงรอบ: โฮลท์และวินเทอร์


ขอบคุณสำหรับคำตอบอย่างละเอียดและการศึกษา เราลงเอยด้วยการเขียนขั้นตอนการจัดเก็บเพื่อบันทึกข้อผิดพลาดแต่ละครั้งไปยังฐานข้อมูลและคืนจำนวนข้อผิดพลาดในช่วง X สุดท้าย (เราตัดสินใน 5) นาที หากตัวเลขนั้นสูงกว่าเกณฑ์ของเรา Y จะส่งอีเมลคำเตือน เราปรับเกณฑ์โดยการทดลองจนกว่าเราจะพอใจ หากฉันทำไปแล้วฉันจะรวมข้อเสนอแนะของคุณในการนับเวลาระหว่างข้อผิดพลาดเพื่อให้มีความละเอียดมากขึ้น
dbenton

8
ฮอลล์ของคำตอบชื่อเสียงเสียงปรบมือ เข้าร่วมชุมชนนี้เพื่อลงทะเบียนเท่านั้น
wesanyer

3

+1 สำหรับการควบคุมกระบวนการทางสถิติมีข้อมูลที่เป็นประโยชน์บางอย่างที่นี่ในขั้นตอนการตรวจสอบ

สำหรับ SPC ก็ไม่ยากเกินไปที่จะเขียนการดำเนินการของทั้งเวสเทิร์ไฟฟ้ากฎหรือกฎเนลสัน

เพียงแค่สร้าง USP ในเซิร์ฟเวอร์ SQL ที่จะทำซ้ำผ่านชุดข้อมูลและ ping แต่ละจุดกับกฎโดยใช้จุดที่อยู่ใกล้เคียง อาจสรุปจำนวนข้อผิดพลาดเป็นรายชั่วโมง (ขึ้นอยู่กับความต้องการของคุณ)


ประเภทนี้เกี่ยวข้องกับคำถามที่ฉันโพสต์ไว้ใน Stack Overflow a while back (เพิ่งเขียนคำตอบอย่างรวดเร็วหากช่วยได้): แผนภูมิการควบคุมกระบวนการทางสถิติใน SQL Server 2008 R2


2

การค้นหาอัลกอริทึมการตรวจจับออนไลน์จะเป็นการเริ่มต้น

ข้อมูลเพิ่มเติมอยู่ที่ stackoverflow: Peak Dection ของสัญญาณที่วัดได้

การใช้งานไพ ธ อนของรูทีนการตรวจจับแบบไร้เดียงสาจะพบได้ที่gitHub


ฉันค้นหาอัลกอริทึมการตรวจจับออนไลน์และส่วนใหญ่พบบทความทางวิชาการที่อยู่เหนือหัวของฉัน พวกเขาอาจเก็บคำตอบไว้ แต่ไม่ผ่านการทดสอบ "เรียบง่าย" ส่วนตัวของฉัน แก้ไขฉันถ้าฉันผิด แต่ฉันไม่คิดว่าฉันกำลังมองหาอัลกอริธึมการตรวจจับสูงสุด เมื่อเกิดข้อผิดพลาดขึ้นมาดูเหมือนว่าตามคำจำกัดความแล้วฉันพลาดโอกาสที่จะแก้ไขปัญหาที่เลวร้ายที่สุด ขออภัยหากการใช้ "ขัดขวาง" ของฉันสับสน ฉันเดาว่าฉันต้องคาดการณ์ข้อผิดพลาดที่เพิ่มขึ้นอย่างต่อเนื่องหรือระบุขั้นตอนใหญ่ขึ้น
dbenton

1

คุณอาจต้องการดูการควบคุมกระบวนการทางสถิติ หรือการตรวจสอบอนุกรมเวลา มีงานมากมายในทิศทางนี้และคำตอบที่ดีที่สุดอาจขึ้นอยู่กับสิ่งที่คุณกำลังทำอยู่มาก (คุณจำเป็นต้องกรองฤดูกาลประจำปีหรือรายสัปดาห์ในการโหลดก่อนที่จะตรวจจับสิ่งผิดปกติหรือไม่)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.