Rövid útmutató: A többváltozós anomáliadetektor ügyfélkódtár használata
Fontos
2023. szeptember 20-tól nem hozhat létre új anomáliadetektor erőforrásokat. A anomáliadetektor szolgáltatás 2026. október 1-jén megszűnik.
Ismerkedés a C# anomáliadetektor többváltozós ügyfélkódtárával. A csomag telepítéséhez és a szolgáltatás által biztosított algoritmusok használatának megkezdéséhez kövesse az alábbi lépéseket. Az új többváltozós anomáliadetektor API-k lehetővé teszik a fejlesztők számára, hogy egyszerűen integrálják a fejlett AI-t a metrikák csoportjaiból származó anomáliák észleléséhez anélkül, hogy gépi tanulási ismeretekre vagy címkézett adatokra van szükségük. A különböző jelek közötti függőségeket és korrelációkat a rendszer automatikusan kulcstényezőknek számítja. Ez segít proaktívan megvédeni összetett rendszereit a hibáktól.
A C# anomáliadetektor többváltozós ügyfélkódtár használatával:
- Rendszerszintű rendellenességek észlelése idősorok egy csoportjából.
- Ha az egyes idősorok nem sokat mondanak, és minden jelet meg kell vizsgálnia a probléma észleléséhez.
- Költséges fizikai eszközök predikatív karbantartása több tíz-száz különböző típusú érzékelővel, amelyek a rendszerállapot különböző aspektusait mérik.
Kódtár referenciadokumentációja Kódtár forráskódcsomagja | (NuGet) |
Előfeltételek
- Azure-előfizetés – Ingyenes létrehozás
- A .NET Core aktuális verziója
- Miután megkapta az Azure-előfizetését, hozzon létre egy anomáliadetektor erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Várja meg, amíg üzembe helyezi, és válassza az Erőforrás megnyitása gombot.
- Az alkalmazás anomáliadetektor API-hoz való csatlakoztatásához szüksége lesz a létrehozott erőforrás kulcsára és végpontjára. Illessze be a kulcsot és a végpontot az alábbi kódba a rövid útmutató későbbi részében.
Az ingyenes tarifacsomag (
F0
) használatával kipróbálhatja a szolgáltatást, és később frissíthet egy fizetős szintre az éles környezetben.
- Az alkalmazás anomáliadetektor API-hoz való csatlakoztatásához szüksége lesz a létrehozott erőforrás kulcsára és végpontjára. Illessze be a kulcsot és a végpontot az alábbi kódba a rövid útmutató későbbi részében.
Az ingyenes tarifacsomag (
Beállítás
Tárfiók létrehozása
A többváltozós anomáliadetektor a mintafájlt az Azure Blob Storage-ban kell tárolni.
- Hozzon létre egy Azure Storage-fiókot.
- Lépjen a Hozzáférés-vezérlés (IAM) lapra, és válassza az ADD elemet a szerepkör-hozzárendelés hozzáadásához.
- A Storage Blob Data Reader keresési szerepköre, jelölje ki ezt a fióktípust, majd válassza a Tovább gombot.
- Válassza ki a felügyelt identitáshoz való hozzáférés hozzárendelését és a Tagok kijelölése lehetőséget, majd válassza ki a korábban létrehozott anomáliadetektor erőforrást, majd válassza a Véleményezés + hozzárendelés lehetőséget.
Ez a konfiguráció néha kissé zavaró lehet, ha problémái vannak, javasoljuk, hogy tekintse át a többváltozós Jupyter Notebook-mintát, amely részletesebben végigvezeti ezt a folyamatot.
Mintaadatok letöltése
Ez a rövid útmutató egy fájlt használ a mintaadatokhoz sample_data_5_3000.csv
. Ez a fájl letölthető a GitHub-mintaadatokból
A mintaadatokat a következő futtatásával is letöltheti:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Mintaadatok feltöltése Tárfiókba
- Lépjen a Tárfiókra, válassza a Tárolók lehetőséget, és hozzon létre egy új tárolót.
- Válassza a Feltöltés és feltöltés sample_data_5_3000.csv lehetőséget
- Válassza ki a feltöltött adatokat, és másolja ki a blob URL-címét, mivel néhány lépésben hozzá kell adnia azokat a kódmintához.
Kulcs és végpont lekérése
A anomáliadetektor szolgáltatással való sikeres híváshoz a következő értékekre van szükség:
Változó neve | Érték |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Ez az érték a Kulcsok és végpont szakaszban található meg, amikor megvizsgálja az erőforrást az Azure Portalon. Példavégpont: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
Az API-kulcs értéke a Kulcsok > végpont szakaszban található, amikor az erőforrást az Azure Portalról vizsgálja. A következők bármelyikét használhatja: KEY1 vagy KEY2 . |
Nyissa meg az erőforrást az Azure Portalon. A végpont és a kulcsok az Erőforrás-kezelés szakaszban találhatók. Másolja ki a végpontot és a hozzáférési kulcsot úgy, ahogyan az az API-hívások hitelesítéséhez szükséges. A következők bármelyikét használhatja: KEY1
vagy KEY2
. A két kulcs mindig lehetővé teszi a kulcsok biztonságos elforgatását és újragenerálását anélkül, hogy szolgáltatáskimaradást okoz.
Környezeti változók létrehozása
Állandó környezeti változók létrehozása és hozzárendelése a kulcshoz és a végponthoz.
Fontos
HA API-kulcsot használ, biztonságosan tárolja valahol máshol, például az Azure Key Vaultban. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan.
Az AI-szolgáltatások biztonságáról további információt az Azure AI-szolgáltatásokhoz érkező kérelmek hitelesítése című témakörben talál.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Egy új .NET Core-alkalmazás létrehozása
Egy konzolablakban (például parancsmag, PowerShell vagy Bash) a dotnet new
paranccsal hozzon létre egy új konzolalkalmazást a névvel anomaly-detector-quickstart-multivariate
. Ez a parancs létrehoz egy egyszerű "„Helló világ!” alkalmazás" projektet egyetlen C#-forrásfájllal: Program.cs.
dotnet new console -n anomaly-detector-quickstart-multivariate
Módosítsa a könyvtárat az újonnan létrehozott alkalmazásmappára. Az alkalmazást a következőkkel hozhatja létre:
dotnet build
A buildkimenet nem tartalmazhat figyelmeztetést vagy hibát.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Telepítse az ügyfélkódtárat
Az alkalmazáskönyvtárban telepítse a .NET-hez készült anomáliadetektor ügyfélkódtárat a következő paranccsal:
dotnet add package Azure.AI.AnomalyDetector --prerelease
Nyissa meg a program.cs fájlt a projektkönyvtárban, és cserélje le a következő kódra:
using Azure.AI.AnomalyDetector;
using Azure;
using static System.Environment;
internal class Program
{
private static void Main(string[] args)
{
string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT");
string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");
string datasource = "Path-to-sample-file-in-your-storage-account"; // example path:https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
Console.WriteLine(endpoint);
var endpointUri = new Uri(endpoint);
var credential = new AzureKeyCredential(apiKey);
//create client
AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);
// train
TimeSpan offset = new TimeSpan(0);
DateTimeOffset start_time = new DateTimeOffset(2021, 1, 2, 0, 0, 0, offset);
DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 5, 0, 0, offset);
string model_id = null;
try
{
model_id = TrainModel(client, datasource, start_time, end_time);
// detect
end_time = new DateTimeOffset(2021, 1, 2, 1, 0, 0, offset);
MultivariateDetectionResult result = BatchDetect(client, datasource, model_id, start_time, end_time);
if (result != null)
{
Console.WriteLine(string.Format("Result ID: {0}", result.ResultId.ToString()));
Console.WriteLine(string.Format("Result summary: {0}", result.Summary.ToString()));
Console.WriteLine(string.Format("Result length: {0}", result.Results.Count));
Console.WriteLine(string.Format("Anomalies found: {0}", result.Results.Where(r => r.Value.IsAnomaly).Count()));
}
// delete
DeleteModel(client, model_id);
}
catch (Exception e)
{
string msg = string.Format("Multivariate error. {0}", e.Message);
Console.WriteLine(msg);
throw;
}
int GetModelNumber(AnomalyDetectorClient client)
{
int model_number = 0;
foreach (var multivariateModel in client.GetMultivariateModels())
{
model_number++;
}
return model_number;
}
string TrainModel(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Training new model...");
Console.WriteLine(string.Format("{0} available models before training.", GetModelNumber(client)));
ModelInfo request = new ModelInfo(datasource, start_time, end_time);
request.SlidingWindow = 200;
Console.WriteLine("Training new model...(it may take a few minutes)");
AnomalyDetectionModel response = client.TrainMultivariateModel(request);
string trained_model_id = response.ModelId;
Console.WriteLine(string.Format("Training model id is {0}", trained_model_id));
// Wait until the model is ready. It usually takes several minutes
ModelStatus? model_status = null;
int tryout_count = 1;
response = client.GetMultivariateModel(trained_model_id);
while (tryout_count < max_tryout & model_status != ModelStatus.Ready & model_status != ModelStatus.Failed)
{
Thread.Sleep(1000);
response = client.GetMultivariateModel(trained_model_id);
model_status = response.ModelInfo.Status;
Console.WriteLine(string.Format("try {0}, model_id: {1}, status: {2}.", tryout_count, trained_model_id, model_status));
tryout_count += 1;
};
if (model_status == ModelStatus.Ready)
{
Console.WriteLine("Creating model succeeds.");
Console.WriteLine(string.Format("{0} available models after training.", GetModelNumber(client)));
return trained_model_id;
}
if (model_status == ModelStatus.Failed)
{
Console.WriteLine("Creating model failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {0}, Message: {1}", response.ModelInfo.Errors[0].Code.ToString(), response.ModelInfo.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
}
return null;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Train error. {0}", e.Message));
throw;
}
}
MultivariateDetectionResult BatchDetect(AnomalyDetectorClient client, string datasource, string model_id, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Start batch detect...");
MultivariateBatchDetectionOptions request = new MultivariateBatchDetectionOptions(datasource, 10, start_time, end_time);
Console.WriteLine("Start batch detection, this might take a few minutes...");
MultivariateDetectionResult response = client.DetectMultivariateBatchAnomaly(model_id, request);
string result_id = response.ResultId;
Console.WriteLine(string.Format("result id is: {0}", result_id));
// get detection result
MultivariateDetectionResult resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
MultivariateBatchDetectionStatus result_status = resultResponse.Summary.Status;
int tryout_count = 0;
while (tryout_count < max_tryout & result_status != MultivariateBatchDetectionStatus.Ready & result_status != MultivariateBatchDetectionStatus.Failed)
{
Thread.Sleep(1000);
resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
result_status = resultResponse.Summary.Status;
Console.WriteLine(string.Format("try: {0}, result id: {1} Detection status is {2}", tryout_count, result_id, result_status.ToString()));
Console.Out.Flush();
}
if (result_status == MultivariateBatchDetectionStatus.Failed)
{
Console.WriteLine("Detection failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {}. Message: {}", resultResponse.Summary.Errors[0].Code.ToString(), resultResponse.Summary.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
return null;
}
return resultResponse;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Detection error. {0}", e.Message));
throw;
}
}
void DeleteModel(AnomalyDetectorClient client, string model_id)
{
client.DeleteMultivariateModel(model_id);
int model_number = GetModelNumber(client);
Console.WriteLine(string.Format("{0} available models after deletion.", model_number));
}
}
}
Az alkalmazás futtatása
Futtassa az alkalmazást az dotnet run
alkalmazáskönyvtárból származó paranccsal.
dotnet run
Az erőforrások eltávolítása
Ha törölni és eltávolítani szeretne egy Azure AI-szolgáltatási előfizetést, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése az erőforráscsoporthoz társított egyéb erőforrásokat is törli.
Következő lépések
Ismerkedés a JavaScript anomáliadetektor többváltozós ügyfélkódtárával. A csomag telepítéséhez és a szolgáltatás által biztosított algoritmusok használatának megkezdéséhez kövesse az alábbi lépéseket. Az új többváltozós anomáliadetektor API-k lehetővé teszik a fejlesztők számára, hogy egyszerűen integrálják a fejlett AI-t a metrikák csoportjaiból származó anomáliák észleléséhez anélkül, hogy gépi tanulási ismeretekre vagy címkézett adatokra van szükségük. A különböző jelek közötti függőségeket és korrelációkat a rendszer automatikusan kulcstényezőknek számítja. Ez segít proaktívan megvédeni összetett rendszereit a hibáktól.
A JavaScripthez készült anomáliadetektor többváltozós ügyfélkódtár használatával:
- Rendszerszintű rendellenességek észlelése idősorok egy csoportjából.
- Ha az egyes idősorok nem sokat mondanak, és minden jelet meg kell vizsgálnia a probléma észleléséhez.
- Költséges fizikai eszközök predikatív karbantartása több tíz-száz különböző típusú érzékelővel, amelyek a rendszerállapot különböző aspektusait mérik.
Kódtár referenciadokumentációja Kódtár forráskódcsomagja | (npm) | Mintakód |
Előfeltételek
- Azure-előfizetés – Ingyenes létrehozás
- A Node.js aktuális verziója
- Miután megkapta az Azure-előfizetését, hozzon létre egy anomáliadetektor erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Várja meg, amíg üzembe helyezi, és válassza az Erőforrás megnyitása gombot.
- Az alkalmazás anomáliadetektor API-hoz való csatlakoztatásához szüksége lesz a létrehozott erőforrás kulcsára és végpontjára. A rövid útmutató későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba.
Az ingyenes tarifacsomag (
F0
) használatával kipróbálhatja a szolgáltatást, és később frissíthet egy fizetős szintre az éles környezetben.
- Az alkalmazás anomáliadetektor API-hoz való csatlakoztatásához szüksége lesz a létrehozott erőforrás kulcsára és végpontjára. A rövid útmutató későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba.
Az ingyenes tarifacsomag (
Beállítás
Új Node.js-alkalmazás létrehozása
Egy konzolablakban (pl. cmd, PowerShell vagy Bash) hozzon létre egy új mappát az alkalmazásnak, majd navigáljon oda.
mkdir myapp && cd myapp
Futtassa az npm init
parancsot egy Node-alkalmazás package.json
fájllal való létrehozásához.
npm init
Hozzon létre egy fájlt, index.js
és importálja a következő kódtárakat: '
'use strict'
const fs = require('fs');
const parse = require("csv-parse/lib/sync");
const { AnomalyDetectorClient } = require('@azure/ai-anomaly-detector');
const { AzureKeyCredential } = require('@azure/core-auth');
Változókat hozhat létre az erőforrás Azure-végpontján és kulcsán. Hozzon létre egy másik változót a példaadatfájlhoz.
Feljegyzés
Mindig használhatja a két kulcs egyikét. Ez lehetővé teszi a kulcsok biztonságos elforgatását. Ebben a rövid útmutatóban használja az első kulcsot.
const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
Fontos
Ne felejtse el eltávolítani a kulcsot a kódból, amikor elkészült, és soha ne tegye közzé nyilvánosan. Éles környezetben biztonságos módon tárolhatja és érheti el a hitelesítő adatait, például az Azure Key Vaultot. További információkért tekintse meg az Azure AI-szolgáltatások biztonsági cikkét.
A anomáliadetektor többváltozós API-k használatához először be kell tanítania a saját modelljeit. A betanítási adatok több idősorból álló készlet, amely megfelel az alábbi követelményeknek:
Minden idősornak olyan CSV-fájlnak kell lennie, amely fejlécsorként két (és csak két) oszlopot tartalmaz, az "időbélyeget" és az "érték"-t (mind kisbetűvel). Az "időbélyeg" értékeknek meg kell felelniük az ISO 8601-nek; az "érték" lehet egész szám vagy decimális tetszőleges számú tizedesjegygel. Példa:
időbélyeg | Érték |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3,6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Minden CSV-fájlt el kell nevezni egy másik változóról, amely a modell betanításához lesz használva. Például: "temperature.csv" és "humidity.csv". Az összes CSV-fájlt egy zip-fájlba kell tömöríteni almappák nélkül. A zip-fájlnak bármilyen neve lehet. A zip-fájlt fel kell tölteni az Azure Blob Storage-ba. Miután létrehozta a blob SAS (közös hozzáférésű jogosultságkódok) URL-címét a zip-fájlhoz, az betanításra használható. Ebből a dokumentumból megtudhatja, hogyan hozhat létre SAS URL-címeket az Azure Blob Storage-ból.
Telepítse az ügyfélkódtárat
Telepítse az és azure-ai-anomalydetector
az ms-rest-azure
NPM-csomagokat. A csv-parse kódtárat ebben a rövid útmutatóban is használjuk:
npm install @azure/ai-anomaly-detector csv-parse
Az alkalmazás fájlja package.json
frissül a függőségekkel.
Kódpéldák
Ezek a kódrészletek a következőket mutatják be a anomáliadetektor Node.js ügyfélkódtárával:
Az ügyfél hitelesítése
Objektum példányosítása AnomalyDetectorClient
a végponttal és a hitelesítő adatokkal.
const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));
Modell betanítása
Modell eredményének létrehozása
Először létre kell hoznunk egy modellkérelemet. Győződjön meg arról, hogy a kezdési és a befejezési idő az adatforráshoz igazodik.
const Modelrequest = {
source: data_source,
startTime: new Date(2021,0,1,0,0,0),
endTime: new Date(2021,0,2,12,0,0),
slidingWindow:200
};
Új modell betanítása
A modellkérelmet a anomáliadetektor ügyfélmetódusnak trainMultivariateModel
továbbítja.
console.log("Training a new model...")
const train_response = await client.trainMultivariateModel(Modelrequest)
const model_id = train_response.location?.split("/").pop() ?? ""
console.log("New model ID: " + model_id)
Annak ellenőrzéséhez, hogy a modell betanítása befejeződött-e, nyomon követheti a modell állapotát:
let model_response = await client.getMultivariateModel(model_id);
let model_status = model_response.modelInfo.status;
while (model_status != 'READY' && model_status != 'FAILED'){
await sleep(10000).then(() => {});
model_response = await client.getMultivariateModel(model_id);
model_status = model_response.modelInfo.status;
}
if (model_status == 'FAILED') {
console.log("Training failed.\nErrors:");
for (let error of model_response.modelInfo?.errors ?? []) {
console.log("Error code: " + error.code + ". Message: " + error.message);
}
}
console.log("TRAINING FINISHED.");
Anomáliák észlelése
detectAnomaly
A függvényekkel getDectectionResult
megállapíthatja, hogy vannak-e rendellenességek az adatforráson belül.
console.log("Start detecting...");
const detect_request = {
source: data_source,
startTime: new Date(2021,0,2,12,0,0),
endTime: new Date(2021,0,3,0,0,0)
};
const result_header = await client.detectAnomaly(model_id, detect_request);
const result_id = result_header.location?.split("/").pop() ?? "";
let result = await client.getDetectionResult(result_id);
let result_status = result.summary.status;
while (result_status != 'READY' && result_status != 'FAILED'){
await sleep(2000).then(() => {});
result = await client.getDetectionResult(result_id);
result_status = result.summary.status;
}
if (result_status == 'FAILED') {
console.log("Detection failed.\nErrors:");
for (let error of result.summary.errors ?? []) {
console.log("Error code: " + error.code + ". Message: " + error.message)
}
}
console.log("Result status: " + result_status);
console.log("Result Id: " + result.resultId);
Modell exportálása
Feljegyzés
Az exportálási parancs anomáliadetektor többváltozós modellek tárolóalapú környezetben való futtatásának engedélyezésére szolgál. Ez jelenleg nem támogatott a többváltozósság esetében, de a jövőben hozzá lesz adva a támogatás.
A betanított modell exportálásához használja a függvényt exportModel
.
const export_result = await client.exportModel(model_id)
const model_path = "model.zip"
const destination = fs.createWriteStream(model_path)
export_result.readableStreamBody?.pipe(destination)
console.log("New model has been exported to "+model_path+".")
Modell törlése
Az aktuális erőforrás számára elérhető meglévő modell törléséhez használja a függvényt deleteMultivariateModel
.
client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")
Az alkalmazás futtatása
Az alkalmazás futtatása előtt hasznos lehet ellenőrizni a kódot a teljes mintakódon
Futtassa az alkalmazást a node
paranccsal a gyorsútmutatós fájlon.
node index.js
Az erőforrások eltávolítása
Ha törölni és eltávolítani szeretne egy Azure AI-szolgáltatási előfizetést, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése az erőforráscsoporthoz társított egyéb erőforrásokat is törli.
Következő lépések
Kódtár referenciadokumentációja Kódtár forráskódcsomagja | (PyPi) |A mintakód megkeresése a GitHubon |
Ismerkedés a Python anomáliadetektor többváltozós ügyfélkódtárával. A csomag telepítéséhez kövesse az alábbi lépéseket, és kezdje el használni a szolgáltatás által biztosított algoritmusokat. Az új többváltozós anomáliadetektor API-k lehetővé teszik a fejlesztők számára, hogy egyszerűen integrálják a fejlett AI-t a metrikák csoportjaiból származó anomáliák észleléséhez anélkül, hogy gépi tanulási ismeretekre vagy címkézett adatokra van szükségük. A különböző jelek közötti függőségeket és korrelációkat a rendszer automatikusan kulcstényezőknek számítja. Ez segít proaktívan megvédeni összetett rendszereit a hibáktól.
A Python anomáliadetektor többváltozós ügyfélkódtárával:
- Rendszerszintű rendellenességek észlelése idősorok egy csoportjából.
- Ha az egyes idősorok nem sokat mondanak, és minden jelet meg kell vizsgálnia a probléma észleléséhez.
- Költséges fizikai eszközök predikatív karbantartása több tíz-száz különböző típusú érzékelővel, amelyek a rendszerállapot különböző aspektusait mérik.
Előfeltételek
- Azure-előfizetés – Ingyenes létrehozás
- Python 3.x
- Miután megkapta az Azure-előfizetését, hozzon létre egy anomáliadetektor erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Várja meg, amíg üzembe helyezi, és válassza az Erőforrás megnyitása gombot. Az ingyenes tarifacsomag (
F0
) használatával kipróbálhatja a szolgáltatást, és később frissíthet egy fizetős szintre az éles környezetben.
Beállítás
Telepítse az ügyfélkódtárat. Az ügyfélkódtárat a következőkkel telepítheti:
pip install --upgrade azure.ai.anomalydetector
Tárfiók létrehozása
A többváltozós anomáliadetektor a mintafájlt az Azure Blob Storage-ban kell tárolni.
- Hozzon létre egy Azure Storage-fiókot.
- Lépjen a Hozzáférés-vezérlés (IAM) lapra, és válassza az ADD elemet a szerepkör-hozzárendelés hozzáadásához.
- A Storage Blob Data Reader keresési szerepköre, jelölje ki ezt a fióktípust, majd válassza a Tovább gombot.
- Válassza ki a felügyelt identitáshoz való hozzáférés hozzárendelését és a Tagok kijelölése lehetőséget, majd válassza ki a korábban létrehozott anomáliadetektor erőforrást, majd válassza a Véleményezés + hozzárendelés lehetőséget.
Ez a konfiguráció néha kissé zavaró lehet, ha problémái vannak, javasoljuk, hogy tekintse át a többváltozós Jupyter Notebook-mintát, amely részletesebben végigvezeti ezt a folyamatot.
Mintaadatok letöltése
Ez a rövid útmutató egy fájlt használ a mintaadatokhoz sample_data_5_3000.csv
. Ez a fájl letölthető a GitHub-mintaadatokból
A mintaadatokat a következő futtatásával is letöltheti:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Mintaadatok feltöltése Tárfiókba
- Lépjen a Tárfiókra, válassza a Tárolók lehetőséget, és hozzon létre egy új tárolót.
- Válassza a Feltöltés és feltöltés sample_data_5_3000.csv lehetőséget
- Válassza ki a feltöltött adatokat, és másolja ki a blob URL-címét, mivel néhány lépésben hozzá kell adnia azokat a kódmintához.
Kulcs és végpont lekérése
A anomáliadetektor szolgáltatással való sikeres híváshoz a következő értékekre van szükség:
Változó neve | Érték |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Ez az érték a Kulcsok és végpont szakaszban található meg, amikor megvizsgálja az erőforrást az Azure Portalon. Példavégpont: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
Az API-kulcs értéke a Kulcsok > végpont szakaszban található, amikor az erőforrást az Azure Portalról vizsgálja. A következők bármelyikét használhatja: KEY1 vagy KEY2 . |
Nyissa meg az erőforrást az Azure Portalon. A végpont és a kulcsok az Erőforrás-kezelés szakaszban találhatók. Másolja ki a végpontot és a hozzáférési kulcsot úgy, ahogyan az az API-hívások hitelesítéséhez szükséges. A következők bármelyikét használhatja: KEY1
vagy KEY2
. A két kulcs mindig lehetővé teszi a kulcsok biztonságos elforgatását és újragenerálását anélkül, hogy szolgáltatáskimaradást okoz.
Környezeti változók létrehozása
Állandó környezeti változók létrehozása és hozzárendelése a kulcshoz és a végponthoz.
Fontos
HA API-kulcsot használ, biztonságosan tárolja valahol máshol, például az Azure Key Vaultban. Ne foglalja bele közvetlenül az API-kulcsot a kódba, és soha ne tegye közzé nyilvánosan.
Az AI-szolgáltatások biztonságáról további információt az Azure AI-szolgáltatásokhoz érkező kérelmek hitelesítése című témakörben talál.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Új Python-alkalmazás létrehozása
Hozzon létre egy új Python-fájlt sample_multivariate_detect.py néven. Ezután nyissa meg a kívánt szerkesztőben vagy IDE-ben.
Cserélje le a sample_multivariate_detect.py tartalmát a következő kódra. Módosítania kell a változók
blob_url
elérési útját.
import time
from datetime import datetime, timezone
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.anomalydetector.models import *
import os
SUBSCRIPTION_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
ANOMALY_DETECTOR_ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
ad_client = AnomalyDetectorClient(ANOMALY_DETECTOR_ENDPOINT, AzureKeyCredential(SUBSCRIPTION_KEY))
time_format = "%Y-%m-%dT%H:%M:%SZ"
blob_url = "Path-to-sample-file-in-your-storage-account" # example path: https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
train_body = ModelInfo(
data_source=blob_url,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
data_schema="OneTable",
display_name="sample",
sliding_window=200,
align_policy=AlignPolicy(
align_mode=AlignMode.OUTER,
fill_n_a_method=FillNAMethod.LINEAR,
padding_value=0,
),
)
batch_inference_body = MultivariateBatchDetectionOptions(
data_source=blob_url,
top_contributor_count=10,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
)
print("Training new model...(it may take a few minutes)")
model = ad_client.train_multivariate_model(train_body)
model_id = model.model_id
print("Training model id is {}".format(model_id))
## Wait until the model is ready. It usually takes several minutes
model_status = None
model = None
while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
model = ad_client.get_multivariate_model(model_id)
print(model)
model_status = model.model_info.status
print("Model is {}".format(model_status))
time.sleep(30)
if model_status == ModelStatus.READY:
print("Done.\n--------------------")
# Return the latest model id
# Detect anomaly in the same data source (but a different interval)
result = ad_client.detect_multivariate_batch_anomaly(model_id, batch_inference_body)
result_id = result.result_id
# Get results (may need a few seconds)
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")
while anomaly_results.summary.status != MultivariateBatchDetectionStatus.READY and anomaly_results.summary.status != MultivariateBatchDetectionStatus.FAILED:
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Detection is {}".format(anomaly_results.summary.status))
time.sleep(5)
print("Result ID:\t", anomaly_results.result_id)
print("Result status:\t", anomaly_results.summary.status)
print("Result length:\t", len(anomaly_results.results))
# See detailed inference result
for r in anomaly_results.results:
print(
"timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(
r.timestamp,
r.value.is_anomaly,
r.value.score,
r.value.severity,
len(r.value.interpretation) if r.value.is_anomaly else 0,
)
)
if r.value.interpretation:
for contributor in r.value.interpretation:
print(
"\tcontributor variable: {:<10}, contributor score: {:.4f}".format(
contributor.variable, contributor.contribution_score
)
)
Az alkalmazás futtatása
Futtassa az alkalmazást a python
paranccsal a gyorsútmutatós fájlon.
python sample_multivariate_detect.py
Hozam
10 available models before training.
Training new model...(it may take a few minutes)
Training model id is 3a695878-a88f-11ed-a16c-b290e72010e0
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:23Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'CREATED', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [], 'trainLosses': [], 'validationLosses': [], 'latenciesInSeconds': []}, 'variableStates': []}}}
Model is CREATED
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:55Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'READY', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], 'trainLosses': [1.0493712276220322, 0.5454281121492386, 0.42524269968271255, 0.38019897043704987, 0.3472398854792118, 0.34301353991031647, 0.3219067454338074, 0.3108387663960457, 0.30357857793569565, 0.29986055195331573], 'validationLosses': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'latenciesInSeconds': [0.3412797451019287, 0.25798678398132324, 0.2556419372558594, 0.3165152072906494, 0.2748451232910156, 0.26111531257629395, 0.2571413516998291, 0.257282018661499, 0.2549862861633301, 0.25806593894958496]}, 'variableStates': [{'variable': 'series_0', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_1', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_2', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_3', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_4', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}]}}}
Model is READY
Done.
--------------------
10 available models after training.
Get detection result...(it may take a few seconds)
Detection is CREATED
Detection is READY
Result ID: 70a6cdf8-a88f-11ed-a461-928899e62c38
Result status: READY
Result length: 301
timestamp: 2021-01-02 00:00:00+00:00, is_anomaly: 0 , anomaly score: 0.1770, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:01:00+00:00, is_anomaly: 0 , anomaly score: 0.3446, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:02:00+00:00, is_anomaly: 0 , anomaly score: 0.2397, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:03:00+00:00, is_anomaly: 0 , anomaly score: 0.1270, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:04:00+00:00, is_anomaly: 0 , anomaly score: 0.3321, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:05:00+00:00, is_anomaly: 0 , anomaly score: 0.4053, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:06:00+00:00, is_anomaly: 0 , anomaly score: 0.4371, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:07:00+00:00, is_anomaly: 1 , anomaly score: 0.6615, severity: 0.3850, contributor count: 5
contributor variable: series_3 , contributor score: 0.2939
contributor variable: series_1 , contributor score: 0.2834
contributor variable: series_4 , contributor score: 0.2329
contributor variable: series_0 , contributor score: 0.1543
contributor variable: series_2 , contributor score: 0.0354
A kimeneti eredmények csonkolt a rövidség kedvéért.
Az erőforrások eltávolítása
Ha törölni és eltávolítani szeretne egy anomáliadetektor erőforrást, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése a hozzá társított egyéb erőforrásokat is törli. Érdemes lehet törölnie a létrehozott környezeti változókat is, ha már nem szeretné használni őket.
Ismerkedés a Java anomáliadetektor többváltozós ügyfélkódtárával. A csomag telepítéséhez kövesse az alábbi lépéseket a szolgáltatás által biztosított algoritmusok használatával. Az új többváltozós anomáliadetektor API-k lehetővé teszik a fejlesztők számára, hogy egyszerűen integrálják a fejlett AI-t a metrikák csoportjaiból származó anomáliák észleléséhez anélkül, hogy gépi tanulási ismeretekre vagy címkézett adatokra van szükségük. A különböző jelek közötti függőségeket és korrelációkat a rendszer automatikusan kulcstényezőknek számítja. Ez segít proaktívan megvédeni összetett rendszereit a hibáktól.
A Java anomáliadetektor többváltozós ügyfélkódtár használatával:
- Rendszerszintű rendellenességek észlelése idősorok egy csoportjából.
- Ha az egyes idősorok nem sokat mondanak, és minden jelet meg kell vizsgálnia a probléma észleléséhez.
- Költséges fizikai eszközök predikatív karbantartása több tíz-száz különböző típusú érzékelővel, amelyek a rendszerállapot különböző aspektusait mérik.
Kódtár referenciadokumentációja Kódtár forráskódcsomagja | (Maven) | Mintakód |
Előfeltételek
- Azure-előfizetés – Ingyenes létrehozás
- A Java Development Kit (JDK) jelenlegi verziója
- A Gradle buildelési eszköz vagy egy másik függőségkezelő.
- Miután megkapta az Azure-előfizetését, hozzon létre egy anomáliadetektor erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Várja meg, amíg üzembe helyezi, és válassza az Erőforrás megnyitása gombot.
- Az alkalmazás anomáliadetektor API-hoz való csatlakoztatásához szüksége lesz a létrehozott erőforrás kulcsára és végpontjára. A rövid útmutató későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba.
Az ingyenes tarifacsomag (
F0
) használatával kipróbálhatja a szolgáltatást, és később frissíthet egy fizetős szintre az éles környezetben.
- Az alkalmazás anomáliadetektor API-hoz való csatlakoztatásához szüksége lesz a létrehozott erőforrás kulcsára és végpontjára. A rövid útmutató későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba.
Az ingyenes tarifacsomag (
Beállítás
Új Gradle-projekt létrehozása
Ez a rövid útmutató a Gradle függőségkezelőt használja. További ügyfélkódtár-információkat a Maven Central-adattárban talál.
Egy konzolablakban (pl. cmd, PowerShell vagy Bash) hozzon létre egy új mappát az alkalmazásnak, majd navigáljon oda.
mkdir myapp && cd myapp
Futtassa a gradle init
parancsot a munkakönyvtárból. Ez a parancs alapvető buildfájlokat hoz létre a Gradle-hez, beleértve a build.gradle.kts fájlt, amelyet futásidőben használnak az alkalmazás létrehozásához és konfigurálásához.
gradle init --type basic
Amikor a rendszer kéri, hogy válasszon egy DSL-t, válassza a Kotlin lehetőséget.
Telepítse az ügyfélkódtárat
Keresse meg a build.gradle.kts fájlt, és nyissa meg a kívánt IDE- vagy szövegszerkesztővel. Ezután másolja ezt a buildkonfigurációt. Ügyeljen arra, hogy a projektfüggőségeket is tartalmazza.
dependencies {
compile("com.azure:azure-ai-anomalydetector")
}
Java-fájl létrehozása
Hozzon létre egy mappát a mintaalkalmazáshoz. Futtassa a következő parancsot a munkakönyvtárban:
mkdir -p src/main/java
Lépjen az új mappára, és hozzon létre egy MetricsAdvisorQuickstarts.java nevű fájlt. Nyissa meg a kívánt szerkesztőben vagy IDE-ben, és adja hozzá a következő import
utasításokat:
package com.azure.ai.anomalydetector;
import com.azure.ai.anomalydetector.models.*;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.*;
import com.azure.core.http.policy.*;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.PagedResponse;
import com.azure.core.http.rest.Response;
import com.azure.core.http.rest.StreamResponse;
import com.azure.core.util.Context;
import reactor.core.publisher.Flux;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
Változókat hozhat létre az erőforrás Azure-végpontján és kulcsán. Hozzon létre egy másik változót a példaadatfájlhoz.
Feljegyzés
Mindig használhatja a két kulcs egyikét. Ez lehetővé teszi a kulcsok biztonságos elforgatását. Ebben a rövid útmutatóban használja az első kulcsot.
String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";
Fontos
Ne felejtse el eltávolítani a kulcsot a kódból, amikor elkészült, és soha ne tegye közzé nyilvánosan. Éles környezetben biztonságos módon tárolhatja és érheti el a hitelesítő adatait, például az Azure Key Vaultot. További információkért tekintse meg az Azure AI-szolgáltatások biztonsági cikkét.
A anomáliadetektor többváltozós API-k használatához először be kell tanítania a saját modelljeit. A betanítási adatok több idősorból álló készlet, amely megfelel az alábbi követelményeknek:
Minden idősornak olyan CSV-fájlnak kell lennie, amely fejlécsorként két (és csak két) oszlopot tartalmaz, az "időbélyeget" és az "érték"-t (mind kisbetűvel). Az "időbélyeg" értékeknek meg kell felelniük az ISO 8601-nek; az "érték" lehet egész szám vagy decimális tetszőleges számú tizedesjegygel. Példa:
időbélyeg | Érték |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3,6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Minden CSV-fájlt el kell nevezni egy másik változóról, amely a modell betanításához lesz használva. Például: "temperature.csv" és "humidity.csv". Az összes CSV-fájlt egy zip-fájlba kell tömöríteni almappák nélkül. A zip-fájlnak bármilyen neve lehet. A zip-fájlt fel kell tölteni az Azure Blob Storage-ba. Miután létrehozta a blob SAS (közös hozzáférésű jogosultságkódok) URL-címét a zip-fájlhoz, az betanításra használható. Ebből a dokumentumból megtudhatja, hogyan hozhat létre SAS URL-címeket az Azure Blob Storage-ból.
Kódpéldák
Ezek a kódrészletek a következőket mutatják be a anomáliadetektor Node.js ügyfélkódtárával:
Az ügyfél hitelesítése
Objektum példányosítása anomalyDetectorClient
a végponttal és a hitelesítő adatokkal.
HttpHeaders headers = new HttpHeaders()
.put("Accept", ContentType.APPLICATION_JSON);
HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy("Ocp-Apim-Subscription-Key",
new AzureKeyCredential(key));
AddHeadersPolicy addHeadersPolicy = new AddHeadersPolicy(headers);
HttpPipeline httpPipeline = new HttpPipelineBuilder().httpClient(HttpClient.createDefault())
.policies(authPolicy, addHeadersPolicy).build();
// Instantiate a client that will be used to call the service.
HttpLogOptions httpLogOptions = new HttpLogOptions();
httpLogOptions.setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS);
AnomalyDetectorClient anomalyDetectorClient = new AnomalyDetectorClientBuilder()
.pipeline(httpPipeline)
.endpoint(endpoint)
.httpLogOptions(httpLogOptions)
.buildClient();
Modell betanítása
Modelleredmény létrehozása és modell betanítása
Először létre kell hoznunk egy modellkérelemet. Győződjön meg arról, hogy a kezdési és a befejezési idő az adatforráshoz igazodik.
A anomáliadetektor többváltozós API-k használatához be kell tanítanunk a saját modellünket az észlelés használata előtt. A betanításhoz használt adatok idősorok kötegei, minden idősornak csak két oszlopot tartalmazó CSV-fájlban kell lennie, "időbélyeg" és "érték" (az oszlopneveknek pontosan azonosnak kell lenniük). Minden CSV-fájlt el kell nevezni az idősor minden változója után. Az összes idősort egy zip-fájlba kell tömöríteni, és fel kell tölteni az Azure Blob Storage-ba, és nincs szükség a zip-fájl nevére. Másik lehetőségként egy további meta.json fájl is szerepelhet a zip-fájlban, ha azt szeretné, hogy a változó neve eltérjen a .zip fájl nevétől. Miután létrehoztuk a blob SAS (közös hozzáférésű jogosultságkódok) URL-címét, betanításhoz használhatjuk a zip-fájl URL-címét.
Path path = Paths.get("test-data.csv");
List<String> requestData = Files.readAllLines(path);
List<TimeSeriesPoint> series = requestData.stream()
.map(line -> line.trim())
.filter(line -> line.length() > 0)
.map(line -> line.split(",", 2))
.filter(splits -> splits.length == 2)
.map(splits -> {
TimeSeriesPoint timeSeriesPoint = new TimeSeriesPoint();
timeSeriesPoint.setTimestamp(OffsetDateTime.parse(splits[0]));
timeSeriesPoint.setValue(Float.parseFloat(splits[1]));
return timeSeriesPoint;
})
.collect(Collectors.toList());
Integer window = 28;
AlignMode alignMode = AlignMode.OUTER;
FillNAMethod fillNAMethod = FillNAMethod.LINEAR;
Integer paddingValue = 0;
AlignPolicy alignPolicy = new AlignPolicy()
.setAlignMode(alignMode)
.setFillNAMethod(fillNAMethod)
.setPaddingValue(paddingValue);
String source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
OffsetDateTime startTime = OffsetDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC);
OffsetDateTime endTime = OffsetDateTime.of(2021, 1, 3, 0, 0, 0, 0, ZoneOffset.UTC);
String displayName = "Devops-MultiAD";
ModelInfo request = new ModelInfo()
.setSlidingWindow(window)
.setAlignPolicy(alignPolicy)
.setSource(source)
.setStartTime(startTime)
.setEndTime(endTime)
.setDisplayName(displayName);
TrainMultivariateModelResponse trainMultivariateModelResponse = anomalyDetectorClient.trainMultivariateModelWithResponse(request, Context.NONE);
String header = trainMultivariateModelResponse.getDeserializedHeaders().getLocation();
String[] substring = header.split("/");
UUID modelId = UUID.fromString(substring[substring.length - 1]);
System.out.println(modelId);
//Check model status until the model is ready
Response<Model> trainResponse;
while (true) {
trainResponse = anomalyDetectorClient.getMultivariateModelWithResponse(modelId, Context.NONE);
ModelStatus modelStatus = trainResponse.getValue().getModelInfo().getStatus();
if (modelStatus == ModelStatus.READY || modelStatus == ModelStatus.FAILED) {
break;
}
TimeUnit.SECONDS.sleep(10);
}
if (trainResponse.getValue().getModelInfo().getStatus() != ModelStatus.READY){
System.out.println("Training failed.");
List<ErrorResponse> errorMessages = trainResponse.getValue().getModelInfo().getErrors();
for (ErrorResponse errorMessage : errorMessages) {
System.out.println("Error code: " + errorMessage.getCode());
System.out.println("Error message: " + errorMessage.getMessage());
}
}
Anomáliák észlelése
DetectionRequest detectionRequest = new DetectionRequest().setSource(source).setStartTime(startTime).setEndTime(endTime);
DetectAnomalyResponse detectAnomalyResponse = anomalyDetectorClient.detectAnomalyWithResponse(modelId, detectionRequest, Context.NONE);
String location = detectAnomalyResponse.getDeserializedHeaders().getLocation();
String[] substring = location.split("/");
UUID resultId = UUID.fromString(substring[substring.length - 1]);
DetectionResult detectionResult;
while (true) {
detectionResult = anomalyDetectorClient.getDetectionResult(resultId);
DetectionStatus detectionStatus = detectionResult.getSummary().getStatus();;
if (detectionStatus == DetectionStatus.READY || detectionStatus == DetectionStatus.FAILED) {
break;
}
TimeUnit.SECONDS.sleep(10);
}
if (detectionResult.getSummary().getStatus() != DetectionStatus.READY){
System.out.println("Inference failed");
List<ErrorResponse> detectErrorMessages = detectionResult.getSummary().getErrors();
for (ErrorResponse errorMessage : detectErrorMessages) {
System.out.println("Error code: " + errorMessage.getCode());
System.out.println("Error message: " + errorMessage.getMessage());
}
}
Modell exportálása
Feljegyzés
Az exportálási parancs anomáliadetektor többváltozós modellek tárolóalapú környezetben való futtatásának engedélyezésére szolgál. Ez jelenleg nem támogatott a többváltozósság esetében, de a jövőben hozzá lesz adva a támogatás.
A betanított modell exportálásához használja a exportModelWithResponse
.
StreamResponse response_export = anomalyDetectorClient.exportModelWithResponse(model_id, Context.NONE);
Flux<ByteBuffer> value = response_export.getValue();
FileOutputStream bw = new FileOutputStream("result.zip");
value.subscribe(s -> write(bw, s), (e) -> close(bw), () -> close(bw));
Modell törlése
Az aktuális erőforrás számára elérhető meglévő modell törléséhez használja a függvényt deleteMultivariateModelWithResponse
.
Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);
Az alkalmazás futtatása
Az alkalmazást a következőkkel hozhatja létre:
gradle build
Az alkalmazás futtatása
A futtatás előtt hasznos lehet ellenőrizni a kódot a teljes mintakódon.
Futtassa az alkalmazást a run
következő céllal:
gradle run
Az erőforrások eltávolítása
Ha törölni és eltávolítani szeretne egy Azure AI-szolgáltatási előfizetést, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése az erőforráscsoporthoz társított egyéb erőforrásokat is törli.