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.

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.

  1. Hozzon létre egy Azure Storage-fiókot.
  2. 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.
  3. A Storage Blob Data Reader keresési szerepköre, jelölje ki ezt a fióktípust, majd válassza a Tovább gombot.
  4. 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

  1. Lépjen a Tárfiókra, válassza a Tárolók lehetőséget, és hozzon létre egy új tárolót.
  2. Válassza a Feltöltés és feltöltés sample_data_5_3000.csv lehetőséget
  3. 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:

Variable name Value
ANOMALY_DETECTOR_ENDPOINT This value can be found in the Keys & Endpoint section when examining your resource from the Azure portal. 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. You can use either KEY1 or 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. You can use either KEY1 or 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.

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

Clean up resources

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.

További 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.

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.

Megjegyzé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éldául:

timestamp É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 bemutatják, hogyan végezheti el a következőket a Node.js anomáliadetektor ü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

Megjegyzé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

Clean up resources

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.

További 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.

  1. Hozzon létre egy Azure Storage-fiókot.
  2. 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.
  3. A Storage Blob Data Reader keresési szerepköre, jelölje ki ezt a fióktípust, majd válassza a Tovább gombot.
  4. 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

  1. Lépjen a Tárfiókra, válassza a Tárolók lehetőséget, és hozzon létre egy új tárolót.
  2. Válassza a Feltöltés és feltöltés sample_data_5_3000.csv lehetőséget
  3. 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:

Variable name Value
ANOMALY_DETECTOR_ENDPOINT This value can be found in the Keys & Endpoint section when examining your resource from the Azure portal. 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. You can use either KEY1 or 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. You can use either KEY1 or 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.

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

  1. 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.

  2. Cserélje le a sample_multivariate_detect.py tartalmát a következő kódra. Módosítania kell a változók blob_urlelé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 *

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)
r = ad_client.get_multivariate_batch_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")

while r.summary.status != MultivariateBatchDetectionStatus.READY and r.summary.status != MultivariateBatchDetectionStatus.FAILED and r.summary.status !=MultivariateBatchDetectionStatus.CREATED:
    anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
    print("Detection is {}".format(r.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.

Clean up resources

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.

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.

Megjegyzé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éldául:

timestamp É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 bemutatják, hogyan végezheti el a következőket a Node.js anomáliadetektor ü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

Megjegyzé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

Clean up resources

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.

További lépések