Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Sự phát triển công nghiệp của các hệ thống phần mềm đòi hỏi phải hết sức chú ý đến khả năng chịu lỗi của sản phẩm cuối cùng, cũng như khả năng phản ứng nhanh với các lỗi và hỏng hóc nếu chúng xảy ra. Tất nhiên, việc giám sát giúp ứng phó với những sai sót, sai sót hiệu quả và nhanh chóng hơn nhưng chưa đủ. Thứ nhất, rất khó để theo dõi một số lượng lớn máy chủ - cần một số lượng lớn người. Thứ hai, bạn cần hiểu rõ về cách ứng dụng hoạt động để dự đoán trạng thái của nó. Vì vậy, chúng tôi cần rất nhiều người hiểu rõ về hệ thống mà chúng tôi đang phát triển, hiệu suất và tính năng của chúng. Giả sử rằng ngay cả khi bạn tìm được đủ người sẵn sàng làm việc này thì vẫn cần rất nhiều thời gian để đào tạo họ.

Phải làm gì? Đây là lúc trí tuệ nhân tạo hỗ trợ chúng ta. Bài viết sẽ nói về bảo trì dự đoán (bảo trì dự đoán). Cách tiếp cận này đang tích cực trở nên phổ biến. Một số lượng lớn các bài báo đã được viết, kể cả về Habré. Các công ty lớn tận dụng tối đa phương pháp này để duy trì hiệu suất máy chủ của họ. Sau khi nghiên cứu rất nhiều bài báo, chúng tôi quyết định thử phương pháp này. Điều gì đã xảy ra với nó?

Giới thiệu

Hệ thống phần mềm được phát triển sớm hay muộn cũng đi vào hoạt động. Điều quan trọng đối với người dùng là hệ thống hoạt động không có lỗi. Nếu trường hợp khẩn cấp xảy ra, nó phải được giải quyết với độ trễ tối thiểu.

Để đơn giản hóa việc hỗ trợ kỹ thuật cho hệ thống phần mềm, đặc biệt nếu có nhiều máy chủ, các chương trình giám sát thường được sử dụng để lấy số liệu từ hệ thống phần mềm đang chạy, giúp chẩn đoán tình trạng của nó và giúp xác định chính xác nguyên nhân gây ra lỗi. Quá trình này được gọi là giám sát hệ thống phần mềm.

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 1. Giao diện giám sát Grafana

Số liệu là các chỉ báo khác nhau của hệ thống phần mềm, môi trường thực thi của nó hoặc máy tính vật lý mà hệ thống đang chạy trong đó có dấu thời gian về thời điểm nhận được số liệu. Trong phân tích tĩnh, những số liệu này được gọi là chuỗi thời gian. Để theo dõi trạng thái của hệ thống phần mềm, các số liệu được hiển thị dưới dạng biểu đồ: thời gian nằm trên trục X và các giá trị nằm dọc theo trục Y (Hình 1). Hàng nghìn số liệu có thể được lấy từ một hệ thống phần mềm đang chạy (từ mỗi nút). Chúng tạo thành một không gian đo lường (chuỗi thời gian đa chiều).

Do một số lượng lớn số liệu được thu thập cho các hệ thống phần mềm phức tạp nên việc giám sát thủ công trở thành một nhiệm vụ khó khăn. Để giảm lượng dữ liệu được quản trị viên phân tích, các công cụ giám sát chứa các công cụ giúp tự động xác định các sự cố có thể xảy ra. Ví dụ: bạn có thể định cấu hình trình kích hoạt để kích hoạt khi dung lượng ổ đĩa trống giảm xuống dưới ngưỡng được chỉ định. Bạn cũng có thể tự động chẩn đoán tình trạng tắt máy chủ hoặc tốc độ dịch vụ bị chậm nghiêm trọng. Trong thực tế, các công cụ giám sát làm rất tốt việc phát hiện các lỗi đã xảy ra hoặc xác định các triệu chứng đơn giản của các lỗi trong tương lai, nhưng nói chung, việc dự đoán một lỗi có thể xảy ra vẫn là một vấn đề khó giải quyết đối với chúng. Dự đoán thông qua phân tích số liệu thủ công đòi hỏi sự tham gia của các chuyên gia có trình độ. Đó là năng suất thấp. Hầu hết các thất bại tiềm ẩn có thể không được chú ý.

Gần đây, cái gọi là bảo trì dự đoán hệ thống phần mềm ngày càng trở nên phổ biến trong các công ty phát triển phần mềm CNTT lớn. Bản chất của phương pháp này là tìm ra các vấn đề dẫn đến suy thoái hệ thống ở giai đoạn đầu, trước khi nó thất bại bằng cách sử dụng trí tuệ nhân tạo. Cách tiếp cận này không loại trừ hoàn toàn việc giám sát thủ công hệ thống. Nó hỗ trợ cho toàn bộ quá trình giám sát.

Công cụ chính để thực hiện bảo trì dự đoán là nhiệm vụ tìm kiếm các điểm bất thường trong chuỗi thời gian, vì khi có sự bất thường xảy ra trong dữ liệu có khả năng cao là sau một thời gian sẽ có một thất bại hoặc thất bại. Sự bất thường là một sai lệch nhất định về hiệu suất của hệ thống phần mềm, chẳng hạn như xác định sự suy giảm tốc độ thực hiện của một loại yêu cầu hoặc sự sụt giảm số lượng yêu cầu được phục vụ trung bình ở mức độ không đổi của các phiên máy khách.

Nhiệm vụ tìm kiếm sự bất thường của hệ thống phần mềm có những đặc thù riêng. Về lý thuyết, đối với mỗi hệ thống phần mềm, cần phải phát triển hoặc cải tiến các phương pháp hiện có, vì việc tìm kiếm các điểm bất thường phụ thuộc rất nhiều vào dữ liệu mà nó được thực hiện và dữ liệu của hệ thống phần mềm rất khác nhau tùy thuộc vào các công cụ để triển khai hệ thống. , tùy thuộc vào máy tính nó đang chạy.

Phương pháp tìm kiếm sự bất thường khi dự đoán lỗi của hệ thống phần mềm

Trước hết phải nói rằng ý tưởng dự đoán thất bại được lấy cảm hứng từ bài viết "Học máy trong giám sát CNTT". Để kiểm tra tính hiệu quả của phương pháp tìm kiếm tự động các điểm bất thường, hệ thống phần mềm Hợp nhất Web đã được chọn, đây là một trong những dự án của công ty NPO Krista. Trước đây, việc giám sát thủ công được thực hiện dựa trên các số liệu nhận được. Do hệ thống khá phức tạp nên một số lượng lớn số liệu được lấy cho nó: chỉ báo JVM (tải bộ thu gom rác), chỉ báo của HĐH mà mã được thực thi (bộ nhớ ảo, % tải CPU của hệ điều hành), chỉ báo mạng (tải mạng ), bản thân máy chủ (tải CPU, bộ nhớ), số liệu Wildfly và số liệu riêng của ứng dụng cho tất cả các hệ thống con quan trọng.

Tất cả các số liệu được lấy từ hệ thống bằng than chì. Ban đầu, cơ sở dữ liệu thì thầm được sử dụng như một giải pháp tiêu chuẩn cho grafana, nhưng khi lượng khách hàng ngày càng tăng, than chì không thể đáp ứng được nữa, do đã cạn kiệt dung lượng của hệ thống con đĩa DC. Sau đó, người ta quyết định tìm một giải pháp hiệu quả hơn. Sự lựa chọn đã được thực hiện có lợi than chì + clickhouse, điều này giúp giảm tải trên hệ thống con đĩa theo một mức độ lớn và giảm dung lượng đĩa bị chiếm dụng từ năm đến sáu lần. Dưới đây là sơ đồ cơ chế thu thập số liệu sử dụng than chì+clickhouse (Hình 2).

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 2. Sơ đồ thu thập số liệu

Sơ đồ được lấy từ tài liệu nội bộ. Nó cho thấy sự giao tiếp giữa grafana (UI giám sát mà chúng tôi sử dụng) và than chì. Việc xóa số liệu khỏi ứng dụng được thực hiện bằng phần mềm riêng biệt - jmxtrans. Anh ấy đặt chúng vào than chì.
Hệ thống Hợp nhất Web có một số tính năng tạo ra vấn đề khi dự đoán lỗi:

  1. Xu hướng thường thay đổi. Có nhiều phiên bản khác nhau cho hệ thống phần mềm này. Mỗi người trong số họ đều mang đến những thay đổi cho phần mềm của hệ thống. Theo đó, theo cách này, các nhà phát triển tác động trực tiếp đến các số liệu của một hệ thống nhất định và có thể gây ra sự thay đổi xu hướng;
  2. tính năng triển khai cũng như mục đích mà khách hàng sử dụng hệ thống này thường gây ra sự bất thường mà không bị suy giảm trước đó;
  3. tỷ lệ bất thường so với toàn bộ tập dữ liệu là nhỏ (< 5%);
  4. Có thể có những thiếu sót trong việc nhận các chỉ số từ hệ thống. Trong một số khoảng thời gian ngắn, hệ thống giám sát không thu được số liệu. Ví dụ: nếu máy chủ bị quá tải. Điều này rất quan trọng cho việc đào tạo một mạng lưới thần kinh. Cần phải lấp đầy những khoảng trống một cách tổng hợp;
  5. Các trường hợp có điểm bất thường thường chỉ liên quan đến một ngày/tháng/thời gian cụ thể (tính thời vụ). Hệ thống này có các quy định rõ ràng cho người dùng sử dụng. Theo đó, các số liệu chỉ có liên quan trong một thời gian cụ thể. Hệ thống không thể sử dụng liên tục mà chỉ dùng trong vài tháng: có chọn lọc tùy theo năm. Các tình huống phát sinh khi hành vi tương tự của các số liệu trong một trường hợp có thể dẫn đến lỗi hệ thống phần mềm, nhưng lại không dẫn đến lỗi trong trường hợp khác.
    Đầu tiên, chúng tôi đã phân tích các phương pháp phát hiện sự bất thường trong dữ liệu giám sát của hệ thống phần mềm. Trong các bài viết về chủ đề này, khi tỷ lệ phần trăm dị thường nhỏ so với phần còn lại của tập dữ liệu, thì mạng thần kinh thường được đề xuất sử dụng nhiều nhất.

Logic cơ bản để tìm kiếm các điểm bất thường bằng dữ liệu mạng thần kinh được hiển thị trong Hình 3:

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 3. Tìm kiếm điểm bất thường bằng mạng nơ-ron

Dựa trên kết quả dự báo hoặc khôi phục cửa sổ của luồng số liệu hiện tại, độ lệch so với kết quả nhận được từ hệ thống phần mềm đang chạy sẽ được tính toán. Nếu có sự khác biệt lớn giữa các số liệu thu được từ hệ thống phần mềm và mạng nơ-ron, chúng ta có thể kết luận rằng phân đoạn dữ liệu hiện tại là bất thường. Một loạt các vấn đề sau đây phát sinh khi sử dụng mạng nơ-ron:

  1. để hoạt động chính xác ở chế độ phát trực tuyến, dữ liệu huấn luyện mô hình mạng nơ-ron chỉ được bao gồm dữ liệu “bình thường”;
  2. cần phải có một mô hình cập nhật để phát hiện chính xác. Việc thay đổi xu hướng và tính thời vụ trong các số liệu có thể gây ra một số lượng lớn kết quả dương tính giả trong mô hình. Để cập nhật nó, cần xác định rõ thời điểm mô hình lỗi thời. Nếu bạn cập nhật mô hình muộn hơn hoặc sớm hơn thì rất có thể sẽ xảy ra một số lượng lớn kết quả dương tính giả.
    Chúng ta cũng không được quên việc tìm kiếm và ngăn chặn tình trạng dương tính giả thường xuyên xảy ra. Người ta cho rằng chúng sẽ thường xảy ra nhất trong các tình huống khẩn cấp. Tuy nhiên, chúng cũng có thể là hậu quả của lỗi mạng nơ-ron do không được đào tạo đầy đủ. Cần giảm thiểu số lượng kết quả dương tính giả của mô hình. Nếu không, những dự đoán sai sẽ lãng phí rất nhiều thời gian của quản trị viên để kiểm tra hệ thống. Sớm hay muộn quản trị viên sẽ ngừng phản hồi với hệ thống giám sát “hoang tưởng”.

Mạng lưới thần kinh tái phát

Để phát hiện sự bất thường trong chuỗi thời gian, bạn có thể sử dụng mạng lưới thần kinh tái phát với bộ nhớ LSTM. Vấn đề duy nhất là nó chỉ có thể được sử dụng cho chuỗi thời gian dự báo. Trong trường hợp của chúng tôi, không phải tất cả các số liệu đều có thể dự đoán được. Nỗ lực áp dụng RNN LSTM cho chuỗi thời gian được hiển thị trong Hình 4.

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 4. Ví dụ về mạng thần kinh hồi quy với các ô nhớ LSTM

Như có thể thấy trong Hình 4, RNN LSTM đã có thể giải quyết được việc tìm kiếm các điểm bất thường trong khoảng thời gian này. Khi kết quả có sai số dự đoán cao (lỗi trung bình), thì thực tế đã xảy ra sự bất thường trong các chỉ báo. Việc sử dụng một RNN LSTM duy nhất rõ ràng là không đủ vì nó chỉ có thể áp dụng cho một số lượng nhỏ số liệu. Có thể được sử dụng như một phương pháp phụ trợ để tìm kiếm sự bất thường.

Bộ mã hóa tự động để dự đoán lỗi

Bộ mã hóa tự động – về cơ bản là một mạng lưới thần kinh nhân tạo. Lớp đầu vào là bộ mã hóa, lớp đầu ra là bộ giải mã. Nhược điểm của tất cả các mạng thần kinh thuộc loại này là chúng không định vị tốt các điểm bất thường. Kiến trúc bộ mã hóa tự động đồng bộ đã được chọn.

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 5. Ví dụ về hoạt động của bộ mã hóa tự động

Bộ mã hóa tự động được đào tạo về dữ liệu thông thường và sau đó tìm thấy điều gì đó bất thường trong dữ liệu được cung cấp cho mô hình. Đúng thứ bạn cần cho nhiệm vụ này. Tất cả những gì còn lại là chọn bộ mã hóa tự động nào phù hợp cho nhiệm vụ này. Hình thức đơn giản nhất về mặt kiến ​​trúc của bộ mã hóa tự động là mạng nơron chuyển tiếp, không quay trở lại, rất giống với cảm biến đa lớp (perceptron đa lớp, MLP), với lớp đầu vào, lớp đầu ra và một hoặc nhiều lớp ẩn kết nối chúng.
Tuy nhiên, điểm khác biệt giữa bộ mã hóa tự động và MLP là trong bộ mã hóa tự động, lớp đầu ra có cùng số nút như lớp đầu vào và thay vì được huấn luyện để dự đoán giá trị đích Y do đầu vào X đưa ra, bộ mã hóa tự động được huấn luyện để xây dựng lại X của chính nó. Do đó, Bộ mã hóa tự động là mô hình học tập không giám sát.

Nhiệm vụ của bộ mã hóa tự động là tìm các chỉ số thời gian r0 ... rn tương ứng với các phần tử dị thường trong vectơ đầu vào X. Hiệu ứng này đạt được bằng cách tìm kiếm lỗi bình phương.

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 6. Bộ mã hóa tự động đồng bộ

Đối với bộ mã hóa tự động đã được chọn kiến trúc đồng bộ. Ưu điểm của nó: khả năng sử dụng chế độ xử lý phát trực tuyến và số lượng tham số mạng thần kinh tương đối nhỏ hơn so với các kiến ​​trúc khác.

Cơ chế giảm thiểu dương tính giả

Do thực tế có nhiều tình huống bất thường khác nhau phát sinh, cũng như có thể xảy ra tình trạng mạng lưới thần kinh không được đào tạo đầy đủ, nên đối với mô hình phát hiện bất thường đang được phát triển, người ta quyết định rằng cần phải phát triển một cơ chế để giảm thiểu kết quả dương tính giả. Cơ chế này dựa trên cơ sở mẫu được quản trị viên phân loại.

Thuật toán chuyển đổi dòng thời gian động (Thuật toán DTW, từ thuật toán cong vênh thời gian động trong tiếng Anh) cho phép bạn tìm ra sự tương ứng tối ưu giữa các chuỗi thời gian. Lần đầu tiên được sử dụng trong nhận dạng giọng nói: được sử dụng để xác định cách hai tín hiệu giọng nói thể hiện cùng một cụm từ được nói ban đầu. Sau đó, ứng dụng của nó đã được tìm thấy trong các lĩnh vực khác.

Nguyên tắc chính để giảm thiểu kết quả dương tính giả là thu thập cơ sở dữ liệu về các tiêu chuẩn với sự trợ giúp của người điều hành phân loại các trường hợp đáng ngờ được phát hiện bằng mạng thần kinh. Tiếp theo, tiêu chuẩn đã phân loại được so sánh với trường hợp mà hệ thống phát hiện và đưa ra kết luận về trường hợp đó là sai hay dẫn đến lỗi. Thuật toán DTW được sử dụng chính xác để so sánh hai chuỗi thời gian. Công cụ giảm thiểu chính vẫn là phân loại. Dự kiến, sau khi thu thập một số lượng lớn các trường hợp tham chiếu, hệ thống sẽ bắt đầu hỏi người vận hành ít hơn do sự giống nhau của hầu hết các trường hợp và xuất hiện các trường hợp tương tự.

Kết quả là, dựa trên các phương pháp mạng thần kinh được mô tả ở trên, một chương trình thử nghiệm đã được xây dựng để dự đoán lỗi của hệ thống “Hợp nhất Web”. Mục tiêu của chương trình này là sử dụng kho lưu trữ dữ liệu giám sát hiện có và thông tin về các lỗi trước đó để đánh giá hiệu quả của phương pháp này đối với hệ thống phần mềm của chúng tôi. Sơ đồ của chương trình được trình bày dưới đây trong Hình 7.

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 7. Sơ đồ dự đoán lỗi dựa trên phân tích không gian số liệu

Trong sơ đồ, có thể phân biệt hai khối chính: tìm kiếm khoảng thời gian bất thường trong luồng dữ liệu giám sát (số liệu) và cơ chế giảm thiểu kết quả dương tính giả. Lưu ý: Đối với mục đích thử nghiệm, dữ liệu được lấy thông qua kết nối JDBC từ cơ sở dữ liệu mà than chì sẽ lưu dữ liệu vào đó.
Sau đây là giao diện của hệ thống giám sát thu được trong quá trình phát triển (Hình 8).

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 8. Giao diện của hệ thống giám sát thử nghiệm

Giao diện hiển thị tỷ lệ phần trăm bất thường dựa trên số liệu nhận được. Trong trường hợp của chúng tôi, biên nhận được mô phỏng. Chúng tôi đã có tất cả dữ liệu trong vài tuần và đang tải dữ liệu dần dần để kiểm tra trường hợp có sự bất thường dẫn đến lỗi. Thanh trạng thái phía dưới hiển thị tỷ lệ phần trăm tổng thể của dữ liệu bất thường tại một thời điểm nhất định, được xác định bằng bộ mã hóa tự động. Ngoài ra, một tỷ lệ phần trăm riêng biệt được hiển thị cho số liệu dự đoán, được tính toán bởi RNN LSTM.

Một ví dụ về phát hiện bất thường dựa trên hiệu suất CPU bằng mạng thần kinh RNN LSTM (Hình 9).

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 9. Khám phá RNN LSTM

Một trường hợp khá đơn giản, về cơ bản là một ngoại lệ thông thường nhưng dẫn đến lỗi hệ thống, đã được tính toán thành công bằng RNN LSTM. Chỉ số bất thường trong khoảng thời gian này là 85–95%; mọi thứ trên 80% (ngưỡng được xác định bằng thực nghiệm) được coi là bất thường.
Một ví dụ về phát hiện bất thường khi hệ thống không thể khởi động sau khi cập nhật. Tình huống này được bộ mã hóa tự động phát hiện (Hình 10).

Chúng tôi tìm kiếm những điểm bất thường và dự đoán lỗi bằng cách sử dụng mạng lưới thần kinh

Hình 10. Ví dụ về phát hiện bộ mã hóa tự động

Như bạn có thể thấy trong hình, PermGen bị kẹt ở một cấp độ. Bộ mã hóa tự động nhận thấy điều này thật kỳ lạ vì nó chưa bao giờ thấy điều gì giống như vậy trước đây. Ở đây sự bất thường vẫn còn 100% cho đến khi hệ thống trở lại trạng thái hoạt động. Một sự bất thường được hiển thị cho tất cả các số liệu. Như đã đề cập trước đó, bộ mã hóa tự động không thể bản địa hóa các điểm bất thường. Người vận hành được yêu cầu thực hiện chức năng này trong những tình huống này.

Kết luận

PC "Hợp nhất Web" đã được phát triển trong vài năm. Hệ thống ở trạng thái khá ổn định, số lượng sự cố được ghi nhận còn ít. Tuy nhiên, có thể phát hiện những bất thường dẫn đến hỏng hóc từ 5 - 10 phút trước khi xảy ra hỏng hóc. Trong một số trường hợp, việc thông báo trước về lỗi sẽ giúp tiết kiệm thời gian đã định được phân bổ để thực hiện công việc “sửa chữa”.

Dựa trên các thí nghiệm đã được thực hiện, vẫn còn quá sớm để đưa ra kết luận cuối cùng. Cho đến nay, kết quả vẫn còn mâu thuẫn. Một mặt, rõ ràng là các thuật toán dựa trên mạng lưới thần kinh có khả năng tìm ra những điểm bất thường “hữu ích”. Mặt khác, vẫn còn một tỷ lệ lớn các kết quả dương tính giả và không phải tất cả các điểm bất thường được phát hiện bởi một chuyên gia có trình độ trong mạng thần kinh đều có thể được phát hiện. Những nhược điểm bao gồm thực tế là hiện nay mạng lưới thần kinh cần được đào tạo bởi giáo viên để hoạt động bình thường.

Để phát triển hơn nữa hệ thống dự đoán lỗi và đưa nó đến trạng thái thỏa đáng, có thể đưa ra một số cách. Đây là phân tích chi tiết hơn về các trường hợp có bất thường dẫn đến lỗi, do việc bổ sung vào danh sách các số liệu quan trọng ảnh hưởng lớn đến trạng thái của hệ thống và loại bỏ những số liệu không cần thiết không ảnh hưởng đến nó. Ngoài ra, nếu chúng ta đi theo hướng này, chúng ta có thể cố gắng chuyên môn hóa các thuật toán dành riêng cho các trường hợp của chúng ta có những điểm bất thường dẫn đến thất bại. Có một cách khác. Đây là một cải tiến trong kiến ​​trúc mạng lưới thần kinh và do đó tăng độ chính xác phát hiện đồng thời giảm thời gian đào tạo.

Tôi bày tỏ lòng biết ơn đến các đồng nghiệp đã giúp tôi viết và duy trì tính liên quan của bài viết này: Victor Verbitsky và Sergei Finogenov.

Nguồn: www.habr.com

Thêm một lời nhận xét