Làm thế nào để xác định các ngoại lệ trong dữ liệu hiệu suất thời gian hoạt động của máy chủ?


8

Tôi có một tập lệnh python tạo danh sách danh sách dữ liệu thời gian hoạt động và hiệu suất của máy chủ, trong đó mỗi danh sách phụ (hoặc 'hàng') chứa các số liệu thống kê của một cụm cụ thể. Ví dụ, được định dạng độc đáo, nó trông giống như thế này:

-------  -------------  ------------  ----------  -------------------
Cluster  %Availability  Requests/Sec  Errors/Sec  %Memory_Utilization
-------  -------------  ------------  ----------  -------------------
ams-a    98.099          1012         678          91
bos-a    98.099          1111         12           91
bos-b    55.123          1513         576          22
lax-a    99.110          988          10           89
pdx-a    98.123          1121         11           90
ord-b    75.005          1301         123          100
sjc-a    99.020          1000         10           88
...(so on)...

Vì vậy, ở dạng danh sách, nó có thể trông giống như:

[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]

Câu hỏi của tôi:

  • Cách tốt nhất để xác định các ngoại lệ trong mỗi cột là gì? Hay những ngoại lệ không nhất thiết là cách tốt nhất để tấn công vấn đề tìm kiếm 'tính xấu'?

Trong dữ liệu trên, tôi chắc chắn muốn biết về bos-b và ord-b, cũng như am-a vì tỷ lệ lỗi của nó rất cao, nhưng những cái khác có thể bị loại bỏ. Tùy thuộc vào cột, vì cao hơn không nhất thiết là xấu hơn, cũng không thấp hơn, tôi đang cố gắng tìm ra cách hiệu quả nhất để làm điều này. Có vẻ như numpy được đề cập rất nhiều cho loại công cụ này, nhưng không chắc bắt đầu từ đâu với nó (đáng buồn thay, tôi nhiều sysadmin hơn thống kê ...). Khi tôi hỏi tại Stack Overflow, một người nào đó đã đề cập đến việc sử dụng chức năng phát quang của numpy và loại bỏ bất cứ thứ gì trên phần trăm thứ 99 - điều đó có vẻ là một ý tưởng tốt?

(Đăng chéo từ stackoverflow, tại đây: /programming/4606288 )

Câu trả lời:


13

Dựa trên cách bạn diễn đạt câu hỏi

những ngoại lệ không nhất thiết là cách tốt nhất để tấn công vấn đề tìm kiếm "tính xấu"?

Không rõ ràng rằng bạn đang tìm kiếm ngoại lệ. Ví dụ, có vẻ như bạn quan tâm đến các máy hoạt động trên / dưới một số ngưỡng.

Ví dụ, nếu tất cả các máy chủ của bạn đang ở 98 0,1% tính sẵn sàng, một máy chủ ở 100% sẵn có sẽ là một outlier, như sẽ là một máy chủ tại 97.6% tính sẵn sàng. Nhưng những điều này có thể nằm trong giới hạn mong muốn của bạn.±

Mặt khác, có thể có lý do chính đáng để apriori muốn được thông báo về bất kỳ máy chủ nào với mức độ sẵn có dưới 95%, cho dù có hay không có một hoặc nhiều máy chủ dưới ngưỡng này.

Vì lý do này, việc tìm kiếm các ngoại lệ có thể không cung cấp thông tin mà bạn quan tâm. Các ngưỡng có thể được xác định theo thống kê dựa trên dữ liệu lịch sử, ví dụ: bằng cách mô hình tỷ lệ lỗi dưới dạng poisson hoặc phần trăm khả dụng dưới dạng các biến beta. Trong một cài đặt được áp dụng, các ngưỡng này có thể được xác định dựa trên các yêu cầu về hiệu suất.


2
+1 để giải quyết câu hỏi rõ ràng (chứ không phải là câu hỏi đã nêu), nhiều hơn điểm.
whuber

4

Một cách đơn giản để tìm các máy chủ dị thường là giả sử chúng được phân phối giống hệt nhau, ước tính các tham số dân số và sắp xếp chúng theo khả năng của chúng, tăng dần. Khả năng của cột sẽ được kết hợp với sản phẩm của họ hoặc mức tối thiểu của họ (hoặc một số chỉ tiêu T khác). Điều này hoạt động khá tốt miễn là ngoại lệ là hiếm. Đối với bản thân phát hiện ngoại lệ, các tham số dân số ổn định thường được ước tính lặp đi lặp lại bằng cách loại bỏ bất kỳ ngoại lệ nào được phát hiện, nhưng điều đó không quan trọng miễn là bạn đang kiểm tra danh sách theo cách thủ công và do đó tránh được ngưỡng.

Đối với khả năng, bạn có thể thử Beta cho tỷ lệ và Poisson cho tỷ lệ.

Như David đã chỉ ra, phát hiện ngoại lệ không hoàn toàn giống như phân tích độ tin cậy, sẽ đánh dấu tất cả các máy chủ vượt quá ngưỡng. Hơn nữa, một số người sẽ tiếp cận các chức năng mất máng vấn đề - xác định nỗi đau mà bạn cảm thấy khi một số máy chủ có sẵn 50% hoặc 500 tỷ lệ lỗi, và sau đó xếp hạng chúng theo nỗi đau đó.


2

Xác định một điểm dữ liệu nhất định là một ngoại lệ ngụ ý rằng có một số quy trình hoặc mô hình tạo dữ liệu mà dữ liệu dự kiến ​​sẽ đến từ đó. Có vẻ như bạn không chắc chắn những mô hình đó là gì cho các số liệu và cụm cụ thể mà bạn quan tâm. Vì vậy, đây là những gì tôi sẽ xem xét khám phá: biểu đồ kiểm soát quá trình thống kê .

Ý tưởng ở đây sẽ là thu thập
-% Sẵn có
- Yêu cầu / Giây
- Lỗi /
Giây -% Memory_Utilization

số liệu cho mỗi cụm của bạn. Đối với mỗi số liệu, hãy tạo một tập hợp con của dữ liệu chỉ bao gồm các giá trị "hợp lý" hoặc trong tầm kiểm soát. Xây dựng các biểu đồ cho từng số liệu dựa trên dữ liệu kiểm soát này. Sau đó, bạn có thể bắt đầu cung cấp dữ liệu trực tiếp cho mã biểu đồ của mình và đánh giá trực quan xem các số liệu có trong tầm kiểm soát hay không.

Tất nhiên, trực quan làm điều này cho nhiều số liệu trên nhiều cụm có thể không khả thi, nhưng đây có thể là một cách tốt để bắt đầu tìm hiểu về động lực học mà bạn phải đối mặt. Sau đó, bạn có thể tạo một dịch vụ thông báo cho các cụm có số liệu vượt khỏi tầm kiểm soát. Dọc theo những dòng này, tôi đã chơi với việc sử dụng các mạng thần kinh để tự động phân loại các mẫu biểu đồ kiểm soát là OK so với một số hương vị cụ thể của sự mất kiểm soát (ví dụ:% khả năng có xu hướng giảm hoặc hành vi theo chu kỳ trong các lỗi / giây). Việc làm này mang lại cho bạn những lợi thế của biểu đồ kiểm soát quy trình thống kê (được sử dụng lâu trong cài đặt sản xuất) nhưng giảm bớt gánh nặng phải dành nhiều thời gian thực sự nhìn vào biểu đồ, vì bạn có thể đào tạo một mạng lưới thần kinh để phân loại các mẫu dựa trên diễn giải của chuyên gia.

Đối với mã, có gói spc trên pypi nhưng tôi không có bất kỳ kinh nghiệm nào khi sử dụng mã này. Ví dụ đồ chơi của tôi về việc sử dụng mạng lưới thần kinh (Bayes ngây thơ quá) có thể được tìm thấy ở đây .


Cảm ơn cho một con trỏ đến một số mã mẫu, tôi sẽ kiểm tra nó!
septagram
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.