Đã 5 tháng kể từ khi bạn hỏi câu hỏi này, và hy vọng bạn đã tìm ra điều gì đó. Tôi sẽ đưa ra một vài gợi ý khác nhau ở đây, hy vọng rằng bạn sẽ tìm thấy một số sử dụng cho chúng trong các tình huống khác.
Đối với trường hợp sử dụng của bạn, tôi không nghĩ rằng bạn cần xem xét các thuật toán phát hiện đột biến.
Vì vậy, đây là: Hãy bắt đầu với một hình ảnh về các lỗi xảy ra trên dòng thời gian:
Những gì bạn muốn là một chỉ số bằng số, một "thước đo" về tốc độ của các lỗi đang đến. Và biện pháp này có thể được chấp nhận để đập - các hệ thống của bạn sẽ có thể đặt giới hạn kiểm soát với những lỗi nhạy cảm nào chuyển thành cảnh báo.
Biện pháp 1
Bạn đã đề cập đến "gai", cách dễ nhất để tăng đột biến là vẽ biểu đồ trong mỗi khoảng thời gian 20 phút:
Sysadins của bạn sẽ đặt độ nhạy dựa trên độ cao của các thanh, nghĩa là hầu hết các lỗi có thể chấp nhận được trong khoảng thời gian 20 phút.
(Tại thời điểm này, bạn có thể tự hỏi nếu không thể điều chỉnh độ dài cửa sổ 20 phút. Nó có thể và bạn có thể nghĩ về độ dài cửa sổ khi xác định từ cùng nhau trong các lỗi cụm từ xuất hiện cùng nhau .)
Vấn đề với phương pháp này cho kịch bản cụ thể của bạn là gì? Chà, biến của bạn là một số nguyên, có thể nhỏ hơn 3. Bạn sẽ không đặt ngưỡng của mình thành 1, vì điều đó chỉ có nghĩa là "mọi lỗi là một cảnh báo" không yêu cầu thuật toán. Vì vậy, các lựa chọn của bạn cho ngưỡng sẽ là 2 và 3. Điều này không mang lại cho hệ thống của bạn nhiều quyền kiểm soát chi tiết.
Biện pháp 2
Thay vì đếm lỗi trong cửa sổ thời gian, hãy theo dõi số phút giữa lỗi hiện tại và lỗi cuối cùng. Khi giá trị này quá nhỏ, điều đó có nghĩa là lỗi của bạn đang trở nên quá thường xuyên và bạn cần đưa ra cảnh báo.
Sysadins của bạn có thể sẽ đặt giới hạn ở mức 10 (nghĩa là nếu các lỗi xảy ra cách nhau dưới 10 phút thì đó là một vấn đề) hoặc 20 phút. Có thể 30 phút cho một hệ thống ít nhiệm vụ quan trọng.
Biện pháp này cung cấp sự linh hoạt hơn. Không giống như Biện pháp 1, có một tập hợp nhỏ các giá trị bạn có thể làm việc cùng, giờ đây bạn có một thước đo cung cấp 20-30 giá trị tốt. Sysadins của bạn do đó sẽ có nhiều phạm vi để tinh chỉnh.
Lời khuyên thân thiện
Có một cách khác để tiếp cận vấn đề này. Thay vì nhìn vào các tần số lỗi, có thể dự đoán các lỗi trước khi chúng xảy ra.
Bạn đã đề cập rằng hành vi này đã xảy ra trên một máy chủ duy nhất, được biết là có vấn đề về hiệu suất. Bạn có thể theo dõi một số chỉ số hiệu suất chính trên máy đó và để chúng thông báo cho bạn biết khi nào sẽ xảy ra lỗi. Cụ thể, bạn sẽ xem xét mức độ sử dụng CPU, Sử dụng bộ nhớ và KPI liên quan đến Đĩa I / O. Nếu mức sử dụng CPU của bạn vượt 80%, hệ thống sẽ chậm lại.
(Tôi biết bạn nói rằng bạn không muốn cài đặt bất kỳ phần mềm nào và đúng là bạn có thể làm điều này bằng PerfMon. Nhưng có những công cụ miễn phí ngoài đó sẽ làm điều này cho bạn, như Nagios và Zenoss .)
Và đối với những người đến đây với hy vọng tìm thấy điều gì đó về phát hiện đột biến trong một chuỗi thời gian:
Phát hiện đột biến trong một chuỗi thời gian
Điều đơn giản nhất bạn nên bắt đầu bằng cách tính trung bình di động của các giá trị đầu vào của bạn. Nếu chuỗi của bạn là , thì bạn sẽ tính trung bình di chuyển sau mỗi lần quan sát là:x1, x2, . . .
Mk= ( 1 - α ) Mk - 1+ Α xk
trong đó sẽ xác định trọng lượng cho giá trị mới nhất của .x kαxk
Nếu giá trị mới của bạn đã di chuyển quá xa so với trung bình di chuyển, chẳng hạn
xk- MkMk> 20 %
sau đó bạn đưa ra một cảnh báo.
Di chuyển trung bình là tốt đẹp khi làm việc với dữ liệu thời gian thực. Nhưng giả sử bạn đã có một loạt dữ liệu trong một bảng và bạn chỉ muốn chạy các truy vấn SQL dựa trên nó để tìm các gai.
Tôi muốn đề nghị:
- Tính giá trị trung bình của chuỗi thời gian của bạn
- Tính độ lệch chuẩn σ
- Cô lập các giá trị lớn hơn trên giá trị trung bình (bạn có thể cần điều chỉnh hệ số đó là "2")2 σ
Nhiều thứ thú vị hơn về chuỗi thời gian
Nhiều chuỗi thời gian trong thế giới thực thể hiện hành vi tuần hoàn. Có một mô hình được gọi là ARIMA giúp bạn trích xuất các chu kỳ này từ chuỗi thời gian của bạn.
Di chuyển trung bình có tính đến hành vi theo chu kỳ: Holt và Winters