Share via


Quickstart: De Multivariate Anomaly Detector-clientbibliotheek gebruiken

Belangrijk

Vanaf 20 september 2023 kunt u geen nieuwe Anomaly Detector-resources maken. De Anomaly Detector-service wordt op 1 oktober 2026 buiten gebruik gesteld.

Ga aan de slag met de anomaly Detector-clientbibliotheek met meerderevariaties voor C#. Volg deze stappen om het pakket te installeren en de algoritmen van de service te gebruiken. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.

Gebruik de multivariate clientbibliotheek van Anomaly Detector voor C# om het volgende te doen:

  • Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
  • Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
  • Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.

Broncodepakket voor bibliotheekreferentiedocumentatiebibliotheek | | (NuGet)

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • De huidige versie van .NET Core
  • Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met de Anomaly Detector-API. Plak uw sleutel en eindpunt verderop in de onderstaande code in de quickstart. U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.

Instellingen

Een opslagaccount maken

Voor Multivariate Anomaly Detector moet uw voorbeeldbestand worden opgeslagen in Azure Blob Storage.

  1. Een Azure Storage-account maken.
  2. Ga naar Toegangsbeheer (IAM) en selecteer TOEVOEGEN om roltoewijzing toe te voegen.
  3. Zoekrol van Storage Blob-gegevenslezer, markeer dit accounttype en selecteer vervolgens Volgende.
  4. Selecteer Toegang tot beheerde identiteit toewijzen en Leden selecteren en kies vervolgens de Anomaly Detector-resource die u eerder hebt gemaakt en selecteer Vervolgens Beoordelen en toewijzen.

Deze configuratie kan soms een beetje verwarrend zijn, als u problemen ondervindt, raden we u aan om ons voorbeeld van multivariate Jupyter Notebook te raadplegen. Dit proces wordt uitgebreider beschreven.

Voorbeeldgegevens downloaden

In deze quickstart wordt één bestand gebruikt voor voorbeeldgegevens sample_data_5_3000.csv. Dit bestand kan worden gedownload uit onze GitHub-voorbeeldgegevens

U kunt de voorbeeldgegevens ook downloaden door het volgende uit te voeren:

curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv

Voorbeeldgegevens uploaden naar opslagaccount

  1. Ga naar uw opslagaccount, selecteer Containers en maak een nieuwe container.
  2. Selecteer Uploaden en uploaden sample_data_5_3000.csv
  3. Selecteer de gegevens die u hebt geüpload en kopieer de Blob-URL, omdat u deze in een paar stappen aan het codevoorbeeld moet toevoegen.

Sleutel en eindpunt ophalen

Als u een aanroep wilt maken op basis van de Anomaly Detector-service, hebt u de volgende waarden nodig:

Naam van de variabele Waarde
ANOMALY_DETECTOR_ENDPOINT Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. Voorbeeldeindpunt: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY De WAARDE van de API-sleutel vindt u in de sectie Sleutels en eindpunten bij het onderzoeken van uw resource vanuit De Azure-portal. U kunt KEY1 of KEY2 gebruiken.

Ga naar uw resource in Azure Portal. Het eindpunt en de sleutels vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel naar behoefte voor verificatie van uw API-aanroepen. U kunt KEY1 of KEY2 gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.

Omgevingsvariabelen maken

Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Een nieuwe .NET Core-app maken

Gebruik in een consolevenster (zoals cmd, PowerShell of Bash) de opdracht dotnet new om een nieuwe console-app te maken met de naam anomaly-detector-quickstart-multivariate. Met deze opdracht maakt u een eenvoudig 'Hallo wereld'-project met één C#-bronbestand: Program.cs.

dotnet new console -n anomaly-detector-quickstart-multivariate

Wijzig uw map in de zojuist gemaakte app-map. U kunt de toepassing maken met:

dotnet build

De build-uitvoer mag geen waarschuwingen of fouten bevatten.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

De clientbibliotheek installeren

Installeer in de toepassingsmap de Anomaly Detector-clientbibliotheek voor .NET met de volgende opdracht:

dotnet add package Azure.AI.AnomalyDetector --prerelease

Open het bestand program.cs in de projectmap en vervang het door de volgende code:

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));
        }
 
    }
}

De toepassing uitvoeren

Voer de toepassing uit vanuit uw toepassingsmap met de opdracht dotnet run.

dotnet run

Resources opschonen

Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook andere resources verwijderd die aan de resourcegroep zijn gekoppeld.

Volgende stappen

Ga aan de slag met de multivariate clientbibliotheek van Anomaly Detector voor JavaScript. Volg deze stappen om het pakket te installeren en de algoritmen van de service te gebruiken. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.

Gebruik de multivariate Clientbibliotheek van Anomaly Detector voor JavaScript om het volgende te doen:

  • Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
  • Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
  • Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.

Broncodepakket voor bibliotheekreferentiedocumentatiebibliotheek | | (npm) | -voorbeeldcode

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • De huidige versie van Node.js
  • Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt om uw toepassing te verbinden met de Anomaly Detector-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code. U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.

Instellen

Een nieuwe Node.js-toepassing maken

Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.

mkdir myapp && cd myapp

Voer de opdracht npm init uit om een knooppunttoepassing te maken met een package.json-bestand.

npm init

Maak een bestand met de naam index.js en importeer de volgende bibliotheken: '

'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');

Maak variabelen voor het Azure-eindpunt en de Azure-sleutel voor uw resource. Maak een andere variabele voor het voorbeeldgegevensbestand.

Notitie

U hebt altijd de mogelijkheid om een van de twee sleutels te gebruiken. Dit is om veilige sleutelrotatie toe te staan. Gebruik voor deze quickstart de eerste sleutel.

const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";

Belangrijk

Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

Als u de Multivariate API's van Anomaly Detector wilt gebruiken, moet u eerst uw eigen modellen trainen. Trainingsgegevens zijn een set met meerdere tijdreeksen die voldoen aan de volgende vereisten:

Elke tijdreeks moet een CSV-bestand zijn met twee (en slechts twee) kolommen, 'timestamp' en 'value' (allemaal in kleine letters) als de veldnamenrij. De 'timestamp'-waarden moeten voldoen aan ISO 8601; de 'waarde' kan gehele getallen of decimalen met een willekeurig aantal decimalen zijn. Voorbeeld:

timestamp waarde
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3,6
2019-04-01T00:02:00Z 4
... ...

Elk CSV-bestand moet worden benoemd naar een andere variabele die wordt gebruikt voor modeltraining. Bijvoorbeeld 'temperature.csv' en 'humidity.csv'. Alle CSV-bestanden moeten worden gezipt in één zip-bestand zonder submappen. Het zip-bestand kan elke gewenste naam hebben. Het zip-bestand moet worden geüpload naar Azure Blob Storage. Zodra u de URL voor blob-SAS (Shared Access Signatures) voor het zip-bestand hebt gegenereerd, kan deze worden gebruikt voor training. Raadpleeg dit document voor het genereren van SAS-URL's van Azure Blob Storage.

De clientbibliotheek installeren

Installeer de NPM-pakketten ms-rest-azure en azure-ai-anomalydetector. De CSV-parseerbibliotheek wordt ook gebruikt in deze snelstart:

npm install @azure/ai-anomaly-detector csv-parse

Het package.json-bestand van uw app wordt bijgewerkt met de afhankelijkheden.

Codevoorbeelden

Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Anomaly Detector-clientbibliotheek voor Node.js:

De client verifiëren

Instantieer een AnomalyDetectorClient object met uw eindpunt en referenties.

const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));

Een model trainen

Een modelresultaat maken

Eerst moeten we een modelaanvraag maken. Zorg ervoor dat de begin- en eindtijd overeenkomen met uw gegevensbron.

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
};

Een nieuw model trainen

U geeft uw modelaanvraag door aan de Anomaly Detector-clientmethode trainMultivariateModel .

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)

Als u wilt controleren of de training van uw model is voltooid, kunt u de status van het model bijhouden:

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.");

Afwijkingen detecteren

Gebruik de detectAnomaly en getDectectionResult functies om te bepalen of er afwijkingen in uw gegevensbron zijn.

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);

Model exporteren

Notitie

De exportopdracht is bedoeld om het uitvoeren van multivariate Anomaly Detector-modellen in een containeromgeving toe te staan. Dit wordt momenteel niet ondersteund voor multivariate, maar er wordt in de toekomst ondersteuning toegevoegd.

Gebruik de exportModel functie om uw getrainde model te exporteren.

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+".")

Model verwijderen

Als u een bestaand model wilt verwijderen dat beschikbaar is voor de huidige resource, gebruikt u de deleteMultivariateModel functie.

client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")

De toepassing uitvoeren

Voordat u de toepassing uitvoert, kan het handig zijn om uw code te controleren op basis van de volledige voorbeeldcode

Voer de toepassing uit met de opdracht node in uw quickstart-bestand.

node index.js

Resources opschonen

Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook andere resources verwijderd die aan de resourcegroep zijn gekoppeld.

Volgende stappen

Referentiedocumentatie voor bibliotheek |Bibliotheekbroncode | Pakket (PyPi) |De voorbeeldcode zoeken op GitHub

Aan de slag met de anomaly Detector-clientbibliotheek met meerderevariaties voor Python. Volg deze stappen om het pakket te installeren en gebruik te maken van de algoritmen die door de service worden geleverd. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.

Gebruik de multivariate clientbibliotheek van Anomaly Detector voor Python om:

  • Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
  • Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
  • Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.

Vereisten

  • Een Azure-abonnement - Een gratis abonnement maken
  • Python 3.x
  • Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource. U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.

Instellingen

Installeer de clientbibliotheek. U kunt de clientbibliotheek installeren met:

pip install --upgrade azure.ai.anomalydetector

Een opslagaccount maken

Voor Multivariate Anomaly Detector moet uw voorbeeldbestand worden opgeslagen in Azure Blob Storage.

  1. Een Azure Storage-account maken.
  2. Ga naar Toegangsbeheer (IAM) en selecteer TOEVOEGEN om roltoewijzing toe te voegen.
  3. Zoekrol van Storage Blob-gegevenslezer, markeer dit accounttype en selecteer vervolgens Volgende.
  4. Selecteer Toegang tot beheerde identiteit toewijzen en Leden selecteren en kies vervolgens de Anomaly Detector-resource die u eerder hebt gemaakt en selecteer Vervolgens Beoordelen en toewijzen.

Deze configuratie kan soms een beetje verwarrend zijn, als u problemen ondervindt, raden we u aan om ons voorbeeld van multivariate Jupyter Notebook te raadplegen. Dit proces wordt uitgebreider beschreven.

Voorbeeldgegevens downloaden

In deze quickstart wordt één bestand gebruikt voor voorbeeldgegevens sample_data_5_3000.csv. Dit bestand kan worden gedownload uit onze GitHub-voorbeeldgegevens

U kunt de voorbeeldgegevens ook downloaden door het volgende uit te voeren:

curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv

Voorbeeldgegevens uploaden naar opslagaccount

  1. Ga naar uw opslagaccount, selecteer Containers en maak een nieuwe container.
  2. Selecteer Uploaden en uploaden sample_data_5_3000.csv
  3. Selecteer de gegevens die u hebt geüpload en kopieer de Blob-URL, omdat u deze in een paar stappen aan het codevoorbeeld moet toevoegen.

Sleutel en eindpunt ophalen

Als u een aanroep wilt maken op basis van de Anomaly Detector-service, hebt u de volgende waarden nodig:

Naam van de variabele Waarde
ANOMALY_DETECTOR_ENDPOINT Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. Voorbeeldeindpunt: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY De WAARDE van de API-sleutel vindt u in de sectie Sleutels en eindpunten bij het onderzoeken van uw resource vanuit De Azure-portal. U kunt KEY1 of KEY2 gebruiken.

Ga naar uw resource in Azure Portal. Het eindpunt en de sleutels vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel naar behoefte voor verificatie van uw API-aanroepen. U kunt KEY1 of KEY2 gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.

Omgevingsvariabelen maken

Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Een nieuwe Python-toepassing maken

  1. Maak een nieuw Python-bestand met de naam sample_multivariate_detect.py. Open deze vervolgens in uw favoriete editor of IDE.

  2. Vervang de inhoud van sample_multivariate_detect.py door de volgende code. U moet de paden voor de variabelen blob_urlwijzigen.

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
                )
            )

De toepassing uitvoeren

Voer de toepassing uit met de opdracht python in uw quickstart-bestand.

python sample_multivariate_detect.py

Uitvoer

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

De uitvoerresultaten zijn afgekapt voor kortheid.

Resources opschonen

Als u een Anomaly Detector-resource wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd. U kunt ook overwegen om de omgevingsvariabelen die u hebt gemaakt te verwijderen als u deze niet meer wilt gebruiken.

Ga aan de slag met de multivariate clientbibliotheek van Anomaly Detector voor Java. Voer de volgende stappen uit om het pakket te installeren en de algoritmen te gaan gebruiken die door de service worden geleverd. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.

Gebruik de multivariate Clientbibliotheek van Anomaly Detector voor Java om:

  • Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
  • Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
  • Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.

Bibliotheekreferentiedocumentatiebibliotheek | broncodepakket | (Maven) | -voorbeeldcode

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • De huidige versie van de Java Development Kit (JDK)
  • Het hulpprogramma Gradle of een andere afhankelijkheidsbeheerder.
  • Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt om uw toepassing te verbinden met de Anomaly Detector-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code. U kunt de gratis prijscategorie (F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.

Instellen

Een nieuw Gradle-project maken

Deze quickstart maakt gebruik van de Gradle-afhankelijkheidsmanager. U vindt meer informatie over clientbibliotheken in de centrale opslagplaats van Maven.

Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.

mkdir myapp && cd myapp

Voer de opdracht gradle init uit vanuit uw werkmap. Met deze opdracht maakt u essentiële buildbestanden voor Gradle, waaronder build.gradle.kts die tijdens runtime worden gebruikt om uw toepassing te maken en te configureren.

gradle init --type basic

Wanneer u wordt gevraagd om een DSL te kiezen, selecteert u Kotlin.

De clientbibliotheek installeren

Zoek build.gradle.kts en open het met uw favoriete IDE of teksteditor. Kopieer het vervolgens in deze buildconfiguratie. Zorg ervoor dat u de projectafhankelijkheden mee kopieert.

dependencies {
    compile("com.azure:azure-ai-anomalydetector")
}

Een Java-bestand maken

Maak een map voor de voorbeeld-app. Voer de volgende opdracht uit vanuit uw werkmap:

mkdir -p src/main/java

Ga naar de nieuwe map en maak een bestand met de naam MetricsAdvisorQuickstarts.java. Open het bestand in uw voorkeurseditor of IDE en voeg de volgende import-instructies toe:

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;

Maak variabelen voor het Azure-eindpunt en de Azure-sleutel voor uw resource. Maak een andere variabele voor het voorbeeldgegevensbestand.

Notitie

U hebt altijd de mogelijkheid om een van de twee sleutels te gebruiken. Dit is om veilige sleutelrotatie toe te staan. Gebruik voor deze quickstart de eerste sleutel.

String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";

Belangrijk

Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

Als u de Multivariate API's van Anomaly Detector wilt gebruiken, moet u eerst uw eigen modellen trainen. Trainingsgegevens zijn een set met meerdere tijdreeksen die voldoen aan de volgende vereisten:

Elke tijdreeks moet een CSV-bestand zijn met twee (en slechts twee) kolommen, 'timestamp' en 'value' (allemaal in kleine letters) als de veldnamenrij. De 'timestamp'-waarden moeten voldoen aan ISO 8601; de 'waarde' kan gehele getallen of decimalen met een willekeurig aantal decimalen zijn. Voorbeeld:

timestamp waarde
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3,6
2019-04-01T00:02:00Z 4
... ...

Elk CSV-bestand moet worden benoemd naar een andere variabele die wordt gebruikt voor modeltraining. Bijvoorbeeld 'temperature.csv' en 'humidity.csv'. Alle CSV-bestanden moeten worden gezipt in één zip-bestand zonder submappen. Het zip-bestand kan elke gewenste naam hebben. Het zip-bestand moet worden geüpload naar Azure Blob Storage. Zodra u de URL voor blob-SAS (Shared Access Signatures) voor het zip-bestand hebt gegenereerd, kan deze worden gebruikt voor training. Raadpleeg dit document voor het genereren van SAS-URL's van Azure Blob Storage.

Codevoorbeelden

Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Anomaly Detector-clientbibliotheek voor Node.js:

De client verifiëren

Instantieer een anomalyDetectorClient object met uw eindpunt en referenties.

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();

Een model trainen

Een modelresultaat maken en model trainen

Eerst moeten we een modelaanvraag maken. Zorg ervoor dat de begin- en eindtijd overeenkomen met uw gegevensbron.

Als u de Multivariate API's van Anomaly Detector wilt gebruiken, moet u ons eigen model trainen voordat u detectie gebruikt. Gegevens die worden gebruikt voor de training zijn een reeks tijdreeksen. Elke tijdreeks moet zich in een CSV-bestand bevinden met slechts twee kolommen, 'tijdstempel' en 'waarde'(de kolomnamen moeten precies hetzelfde zijn). Elk CSV-bestand moet worden benoemd na elke variabele voor de tijdreeks. Alle tijdreeksen moeten worden gezipt in één zip-bestand en worden geüpload naar Azure Blob Storage, en er is geen vereiste voor de naam van het zip-bestand. U kunt ook een extra meta.json-bestand opnemen in het zip-bestand als u wilt dat de naam van de variabele verschilt van de .zip-bestandsnaam. Zodra we de URL voor blob-SAS (Shared Access Signatures) genereren, kunnen we de URL naar het zip-bestand gebruiken voor training.

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());
    }
}

Afwijkingen detecteren

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());
    }
}

Model exporteren

Notitie

De exportopdracht is bedoeld om het uitvoeren van multivariate Anomaly Detector-modellen in een containeromgeving toe te staan. Dit wordt momenteel niet ondersteund voor multivariate, maar er wordt in de toekomst ondersteuning toegevoegd.

Als u uw getrainde model wilt exporteren, gebruikt u de 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));

Model verwijderen

Als u een bestaand model wilt verwijderen dat beschikbaar is voor de huidige resource, gebruikt u de deleteMultivariateModelWithResponse functie.

Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);

De toepassing uitvoeren

U kunt de app maken met:

gradle build

De toepassing uitvoeren

Voordat u deze uitvoert, kan het handig zijn om uw code te controleren op basis van de volledige voorbeeldcode.

Voer de toepassing uit met het doel run:

gradle run

Resources opschonen

Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook andere resources verwijderd die aan de resourcegroep zijn gekoppeld.

Volgende stappen