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: 每一份測試資料預測的結果
範例下載:


留言
張貼留言