AI時代的網站與手機App建置與開發Part23 - ML.NET與伺服器異常偵測

 ·       摘要

支援企業營運的資訊系統扮演的是非常關鍵的功能, 一旦因為資訊系統故障, 或是運作效能不如預期, 或是遭遇惡意攻擊而無法提供正常的服務, 造成客戶的業務無法正常執行, 不僅企業營收可能受到影響, 甚至引發負評, 造成企業聲譽受損, 影響就很難量化了.

在本篇文章中, 我們將使用Microsoft ML.NET支援的RandomizedPca演算法分析伺服器的效能數據, 冀能預先偵測到伺服器運作的異能, 提早因應, 讓企業資訊系統常保正常營運.

: 偵測伺服器運作的示意圖

·       準備訓練資料

首先請啟動瀏覽器, 瀏覽至Dataset System Resources CPU RAM Disk Network, 下載伺服器運作的效能數據範例資料(下載網址: https://www.kaggle.com/datasets/omnamahshivai/dataset-system-resources-cpu-ram-disk-network).

1所示即為下載得到的資料:

1: 伺服器運作的效能數據範例資料

這份伺服器運作的效能數據範例資料的欄位詳細說明如下表:

資料集描述:

欄位名稱

欄位說明

index

資料的編號

cpu

伺服器的處理器效能數據

ram

伺服器的記憶體效能數據

disk

伺服器的磁碟機效能數據

network

伺服器的網路效能數據

·       使用ML.NET偵測伺服器的運作異常

首先請下載上述的伺服器運作的效能數據範例資料並加入到使用Visual Studio建立的專案, 並於[屬性]視窗將加入到專案, 內含伺服器運作的效能數據範例資料的檔案的[複製到輸出目錄]屬性的內容值設定為:有更新時才複製.

·       定義描述伺服器運作的效能數據範例資料的ServerMetrics類別

    public class ServerMetrics

    {

        [LoadColumn(1)]

        public float cpu;

        [LoadColumn(2)]

        public float ram;

        [LoadColumn(3)]

        public float disk;

        [LoadColumn(4)]

        public float network;

    }

·       實作描述預測伺服器運作是否異常的AnomalyPrediction類別

public class AnomalyPrediction

{

        public bool PredictedLabel;

        public float Score;

}

·       實作偵測伺服器運作異常

    private void btnDetectServerAnomaly_Click(object sender, EventArgs e)

   {

        MLContext context = new MLContext();

        // 加載數據

        var data = context.Data.LoadFromTextFile<ServerMetrics>                                ("ServerMetrics.csv"separatorChar: ',', hasHeader: true);

        // 定義欲分析的特徵, 調整特徵的內容值, 並指定預測伺服器運作是否異常的

 // RandomizedPca演算法

        var pipeline = context.Transforms.Concatenate("Features",

nameof(ServerMetrics.cpu), nameof(ServerMetrics.ram), nameof(ServerMetrics.disk), nameof(ServerMetrics.network))

           .Append(context.Transforms.NormalizeMinMax("Features"))

           .Append(context.AnomalyDetection.Trainers.RandomizedPca(

featureColumnName: "Features", rank: 2));

        // 執行訓練

        var model = pipeline.Fit(data);

        // 準備測試資料

        var transformedData = model.Transform(data);   

        // 使用測試資料評估訓練妥的機器學習模型

        var predictions = context.Data.CreateEnumerable<AnomalyPrediction>(

transformedData, reuseRowObject: false);

        // 顯示預測結果

        foreach (var prediction in predictions)

        {

            Trace.WriteLine($"Predicted Label: {prediction.PredictedLabel},

Score: {prediction.Score}");

        }

    }

執行上述的程式碼會顯示對每一份測試資料預測的結果, 如圖2所示:

2: 每一份測試資料預測的結果

範例下載:

https://github.com/CraigIII/ServerAnomalyDetection.git

留言

這個網誌中的熱門文章

AI時代的網站與手機App建置與開發Part27 - ML.NET與物件偵測

AI時代的網站與手機App建置與開發Part24 - ML.NET與圖片異常偵測

AI時代的網站與手機App建置與開發Part28 - 使用YOLO模型進行物件偵測