Hızlı Başlangıç: Çok Değişkenli Anomali Algılayıcısı istemci kitaplığını kullanma

C# için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek ve hizmet tarafından sağlanan algoritmaları kullanmaya başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılama API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

C# için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu tespit etmek için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türüne sahip pahalı fiziksel varlıkların ön koşullu bakımı.

Kitaplık başvuru belgeleri | Kitaplık kaynak kodu | Paket (NuGet)

Ön koşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • .NET Core'un geçerli sürümü
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portal bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin.
    • Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştırın. Ücretsiz fiyatlandırma katmanını (F0) kullanarak hizmeti deneyebilir ve daha sonra üretim için ücretli bir katmana yükseltebilirsiniz.

Ayarlama

Yeni bir .NET Core uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi) komutunu kullanarak dotnet new adlı anomaly-detector-quickstart-multivariateyeni bir konsol uygulaması oluşturun. Bu komut, tek bir C# kaynak dosyasıyla basit bir "Merhaba Dünya" projesi oluşturur: Program.cs.

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

Dizininizi yeni oluşturulan uygulama klasörüyle değiştirin. Uygulamayı şu şekilde oluşturabilirsiniz:

dotnet build

Derleme çıkışı hiçbir uyarı veya hata içermemelidir.

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

İstemci kitaplığını yükleme

Uygulama dizininde aşağıdaki komutu kullanarak .NET için Anomali Algılayıcısı istemci kitaplığını yükleyin:

dotnet add package Azure.AI.AnomalyDetector --version 3.0.0-preview.3

Proje dizininden program.cs dosyasını açın ve kullanarak directivesaşağıdakileri ekleyin:

using System;
using System.Collections.Generic;
using System.Drawing.Text;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Net.NetworkInformation;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Azure.AI.AnomalyDetector.Models;
using Azure.Core.TestFramework;
using Microsoft.Identity.Client;
using NUnit.Framework;

Uygulamanın main() yönteminde kaynağınızın Azure uç noktası, API anahtarınız ve özel bir veri kaynağı için değişkenler oluşturun.

Not

Her zaman iki anahtardan birini kullanma seçeneğine sahip olursunuz. Bu, güvenli anahtar döndürmeye izin vermektir. Bu hızlı başlangıcın amaçları doğrultusunda ilk anahtarı kullanın.

string endpoint = "YOUR_API_KEY";
string apiKey =  "YOUR_ENDPOINT";
string datasource = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Bilişsel Hizmetler güvenlik makalesine bakın.

Anomali Algılayıcısı çok değişkenli API'leri kullanmak için önce kendi modellerinizi eğitmeniz gerekir. Eğitim verileri, aşağıdaki gereksinimleri karşılayan birden çok zaman serisi kümesidir:

Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (tümü küçük harfle) olmak üzere iki (ve yalnızca iki) sütunlu bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601'e uygun olmalıdır; "değer", herhangi bir sayıda ondalık basamak içeren tamsayılar veya ondalıklar olabilir. Örnek:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmalıdır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları herhangi bir alt klasör olmadan tek bir zip dosyasına sıkıştırılmalıdır. Zip dosyası istediğiniz ada sahip olabilir. Zip dosyası Azure Blob depolamaya yüklenmelidir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu belgeye bakın.

Kod örnekleri

Bu kod parçacıkları, .NET için çok değişkenli Anomali Algılayıcısı istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

İstemcinin kimliğini doğrulama

Uç noktanız ve anahtarınız ile bir Anomali Algılayıcısı istemcisi örneği oluşturun.

var endpointUri = new Uri(endpoint);
var credential = new AzureKeyCredential(apiKey)

AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);

Modeli eğitme

Modelinizi eğitmek için aşağıdaki gibi yeni bir özel zaman uyumsuz görev oluşturun. Modeli eğitmek ve GetMultivariateModelAysnc eğitimin ne zaman tamamlanıp tamamlanmayacağını denetlemek için kullanacaksınızTrainMultivariateModel.

private async Task<Guid?> trainAsync(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time)
{
    try
    {
        Console.WriteLine("Training new model...");

        int model_number = await getModelNumberAsync(client, false).ConfigureAwait(false);
        Console.WriteLine(String.Format("{0} available models before training.", model_number));

        ModelInfo data_feed = new ModelInfo(datasource, start_time, end_time);
        Response response_header = client.TrainMultivariateModel(data_feed);
        response_header.Headers.TryGetValue("Location", out string trained_model_id_path);
        Guid trained_model_id = Guid.Parse(trained_model_id_path.Split('/').LastOrDefault());
        Console.WriteLine(trained_model_id);

        // Wait until the model is ready. It usually takes several minutes
        Response<Model> get_response = await client.GetMultivariateModelAsync(trained_model_id).ConfigureAwait(false);
        while (get_response.Value.ModelInfo.Status != ModelStatus.Ready & get_response.Value.ModelInfo.Status != ModelStatus.Failed)
        {
            System.Threading.Thread.Sleep(10000);
            get_response = await client.GetMultivariateModelAsync(trained_model_id).ConfigureAwait(false);
            Console.WriteLine(String.Format("model_id: {0}, createdTime: {1}, lastUpdateTime: {2}, status: {3}.", get_response.Value.ModelId, get_response.Value.CreatedTime, get_response.Value.LastUpdatedTime, get_response.Value.ModelInfo.Status));
        }

        if (get_response.Value.ModelInfo.Status != ModelStatus.Ready)
        {
            Console.WriteLine(String.Format("Trainig failed."));
            IReadOnlyList<ErrorResponse> errors = get_response.Value.ModelInfo.Errors;
            foreach (ErrorResponse error in errors)
            {
                Console.WriteLine(String.Format("Error code: {0}.", error.Code));
                Console.WriteLine(String.Format("Error message: {0}.", error.Message));
            }
            throw new Exception("Training failed.");
        }

        model_number = await getModelNumberAsync(client).ConfigureAwait(false);
        Console.WriteLine(String.Format("{0} available models after training.", model_number));
        return trained_model_id;
    }
    catch (Exception e)
    {
        Console.WriteLine(String.Format("Train error. {0}", e.Message));
        throw new Exception(e.Message);
    }
}

Anomalileri algılama

Yeni eğitilen modelinizi kullanarak anomalileri algılamak için adlı detectAsyncbir private async Task oluşturun. Yeni DetectionRequest bir oluşturacak ve bunu parametresi olarak iletirsiniz DetectAnomalyAsync.

private async Task<DetectionResult> detectAsync(AnomalyDetectorClient client, string datasource, Guid model_id,DateTimeOffset start_time, DateTimeOffset end_time)
{
    try
    {
        Console.WriteLine("Start detect...");
        Response<Model> get_response = await client.GetMultivariateModelAsync(model_id).ConfigureAwait(false);

        DetectionRequest detectionRequest = new DetectionRequest(datasource, start_time, end_time);
        Response result_response = await client.DetectAnomalyAsync(model_id, detectionRequest).ConfigureAwait(false);
        var ok = result_response.Headers.TryGetValue("Location", out string result_id_path);
        Guid result_id = Guid.Parse(result_id_path.Split('/').LastOrDefault());
        // get detection result
        Response<DetectionResult> result = await client.GetDetectionResultAsync(result_id).ConfigureAwait(false);
        while (result.Value.Summary.Status != DetectionStatus.Ready & result.Value.Summary.Status != DetectionStatus.Failed)
        {
            System.Threading.Thread.Sleep(2000);
            result = await client.GetDetectionResultAsync(result_id).ConfigureAwait(false);
        }

        if (result.Value.Summary.Status != DetectionStatus.Ready)
        {
            Console.WriteLine(String.Format("Inference failed."));
            IReadOnlyList<ErrorResponse> errors = result.Value.Summary.Errors;
            foreach (ErrorResponse error in errors)
            {
                Console.WriteLine(String.Format("Error code: {0}.", error.Code));
                Console.WriteLine(String.Format("Error message: {0}.", error.Message));
            }
            return null;
        }

        return result.Value;
    }
    catch (Exception e)
    {
        Console.WriteLine(String.Format("Detection error. {0}", e.Message));
        throw new Exception(e.Message);
    }
}

Modeli dışarı aktarma

Not

Dışarı aktarma komutunun kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı model çalıştırmasına izin vermek için kullanılması amaçlanmıştır. Bu şu anda çok değişkenli için desteklenmese de gelecekte destek eklenecektir.

Daha önce eğitmiş olduğunuz modeli dışarı aktarmak için adlı exportAysncbir private async Task oluşturun. Dışarı aktarmak istediğiniz modelin model kimliğini kullanır ExportModelAsync ve geçirirsiniz.

private async Task exportAsync(AnomalyDetectorClient client, Guid model_id, string model_path = "model.zip")
{
    try
    {
        Stream model = await client.ExportModelAsync(model_id).ConfigureAwait(false);
        if (model != null)
        {
            var fileStream = File.Create(model_path);
            model.Seek(0, SeekOrigin.Begin);
            model.CopyTo(fileStream);
            fileStream.Close();
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(String.Format("Export error. {0}", e.Message));
        throw new Exception(e.Message);
    }
}

Modeli silme

Daha önce oluşturduğunuz bir modeli silmek için, silmek istediğiniz modelin model kimliğini kullanın DeleteMultivariateModelAsync ve geçirin. Model kimliğini almak için bize getModelNumberAsync:

private async Task deleteAsync(AnomalyDetectorClient client, Guid model_id)
{
    await client.DeleteMultivariateModelAsync(model_id).ConfigureAwait(false);
    int model_number = await getModelNumberAsync(client).ConfigureAwait(false);
    Console.WriteLine(String.Format("{0} available models after deletion.", model_number));
}
private async Task<int> getModelNumberAsync(AnomalyDetectorClient client, bool delete = false)
{
    int count = 0;
    AsyncPageable<ModelSnapshot> model_list = client.ListMultivariateModelAsync(0, 10000);
    await foreach (ModelSnapshot x in model_list)
    {
        count += 1;
        Console.WriteLine(String.Format("model_id: {0}, createdTime: {1}, lastUpdateTime: {2}.", x.ModelId, x.CreatedTime, x.LastUpdatedTime));
        if (delete & count < 4)
        {
            await client.DeleteMultivariateModelAsync(x.ModelId).ConfigureAwait(false);
        }
    }
    return count;
}

Main yöntemi

Artık tüm bileşen parçalarına sahip olduğunuza göre, yeni oluşturduğunuz görevleri çağırmak için ana yönteminize ek kod eklemeniz gerekir.


{
    //read endpoint and apiKey
     string endpoint = "YOUR_API_KEY";
    string apiKey =  "YOUR_ENDPOINT";
    string datasource = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
    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, 1, 0, 0, 0, offset);
    DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 12, 0, 0, offset);
    Guid? model_id_raw = null;
    try
    {
        model_id_raw = await trainAsync(client, datasource, start_time, end_time).ConfigureAwait(false);
        Console.WriteLine(model_id_raw);
        Guid model_id = model_id_raw.GetValueOrDefault();

        // detect
        start_time = end_time;
        end_time = new DateTimeOffset(2021, 1, 3, 0, 0, 0, offset);
        DetectionResult result = await detectAsync(client, datasource, model_id, start_time, end_time).ConfigureAwait(false);
        if (result != null)
        {
            Console.WriteLine(String.Format("Result ID: {0}", result.ResultId));
            Console.WriteLine(String.Format("Result summary: {0}", result.Summary));
            Console.WriteLine(String.Format("Result length: {0}", result.Results.Count));
        }

        // export model
        await exportAsync(client, model_id).ConfigureAwait(false);

        // delete
        await deleteAsync(client, model_id).ConfigureAwait(false);
    }
    catch (Exception e)
    {
        String msg = String.Format("Multivariate error. {0}", e.Message);
        if (model_id_raw != null)
        {
            await deleteAsync(client, model_id_raw.GetValueOrDefault()).ConfigureAwait(false);
        }
        Console.WriteLine(msg);
        throw new Exception(msg);
    }
}

Uygulamayı çalıştırma

Uygulamayı uygulama dizininizden komutuyla dotnet run çalıştırın.

dotnet run

Kaynakları temizleme

Bilişsel Hizmetler aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar

JavaScript için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek ve hizmet tarafından sağlanan algoritmaları kullanmaya başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılama API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

JavaScript için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu tespit etmek için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türüne sahip pahalı fiziksel varlıkların ön koşullu bakımı.

Kitaplık başvuru belgeleri | Kitaplık kaynak kodu | Paket (npm) | Örnek kod

Ön koşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • Node.js'in geçerli sürümü
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portal bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesine tıklayın.
    • Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız. Ücretsiz fiyatlandırma katmanını (F0) kullanarak hizmeti deneyebilir ve daha sonra üretim için ücretli bir katmana yükseltebilirsiniz.

Ayarlama

Yeni bir Node.js uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir myapp && cd myapp

Dosyasını içeren npm init bir düğüm uygulaması package.json oluşturmak için komutunu çalıştırın.

npm init

adlı index.js bir dosya oluşturun ve aşağıdaki kitaplıkları içeri aktarın: '

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

Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun. Örnek veri dosyası için başka bir değişken oluşturun.

Not

Her zaman iki anahtardan birini kullanma seçeneğine sahip olursunuz. Bu, güvenli anahtar döndürmeye izin vermektir. Bu hızlı başlangıcın amaçları doğrultusunda ilk anahtarı kullanın.

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

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Bilişsel Hizmetler güvenlik makalesine bakın.

Anomali Algılayıcısı çok değişkenli API'leri kullanmak için önce kendi modellerinizi eğitmeniz gerekir. Eğitim verileri, aşağıdaki gereksinimleri karşılayan birden çok zaman serisi kümesidir:

Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (tümü küçük harfle) olmak üzere iki (ve yalnızca iki) sütunlu bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601'e uygun olmalıdır; "değer", herhangi bir sayıda ondalık basamak içeren tamsayılar veya ondalıklar olabilir. Örnek:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmalıdır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları herhangi bir alt klasör olmadan tek bir zip dosyasına sıkıştırılmalıdır. Zip dosyası istediğiniz ada sahip olabilir. Zip dosyası Azure Blob depolamaya yüklenmelidir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu belgeye bakın.

İstemci kitaplığını yükleme

ms-rest-azure ve azure-ai-anomalydetector NPM paketlerini yükleyin. Bu hızlı başlangıçta csv-parse kitaplığı da kullanılır:

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

Uygulamanızın package.json dosyası bağımlılıklarla güncelleştirilir.

Kod örnekleri

Bu kod parçacıkları, Node.js için Anomali Algılayıcısı istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

İstemcinin kimliğini doğrulama

Uç noktanız ve kimlik bilgilerinizle bir AnomalyDetectorClient nesne örneği oluşturma.

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

Modeli eğitme

Model sonucu oluşturma

İlk olarak bir model isteği oluşturmamız gerekir. Başlangıç ve bitiş saatinin veri kaynağınızla uyumlu olduğundan emin olun.

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

Yeni bir model eğitin

Model isteğinizi Anomali Algılayıcısı istemci trainMultivariateModel yöntemine geçirmeniz gerekir.

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)

Modelinizin eğitiminin tamam olup olmadığını denetlemek için modelin durumunu izleyebilirsiniz:

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

Anomalileri algılama

detectAnomaly Veri kaynağınızda herhangi bir anomali olup olmadığını belirlemek için ve getDectectionResult işlevlerini kullanın.

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

Modeli dışarı aktarma

Not

Dışarı aktarma komutunun kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı model çalıştırmasına izin vermek için kullanılması amaçlanmıştır. Bu şu anda çok değişkenli için desteklenmese de gelecekte destek eklenecektir.

Eğitilen modelinizi dışarı aktarmak için işlevini kullanın 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+".")

Modeli silme

Geçerli kaynakta kullanılabilen mevcut bir modeli silmek için işlevini kullanın deleteMultivariateModel .

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

Uygulamayı çalıştırma

Uygulamayı çalıştırmadan önce kodunuzun tam örnek kodla karşılaştırılması yararlı olabilir

Uygulamayı hızlı başlangıç dosyanızda komutuyla node çalıştırın.

node index.js

Kaynakları temizleme

Bilişsel Hizmetler aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar

Kitaplık başvuru belgeleri |Kitaplık kaynak kodu | Paket (PyPi) |GitHub'da örnek kodu bulma

Python için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek için bu adımları izleyin ve hizmet tarafından sağlanan algoritmaları kullanmaya başlayın. Yeni çok değişkenli anomali algılama API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

Python için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu tespit etmek için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türüne sahip pahalı fiziksel varlıkların ön koşullu bakımı.

Ön koşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • Python 3.x
  • Pandas veri analizi kitaplığı
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portal bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin. Ücretsiz fiyatlandırma katmanını (F0) kullanarak hizmeti deneyebilir ve daha sonra üretim için ücretli bir katmana yükseltebilirsiniz.

Kurulum

İstemci kitaplığını yükleyin. İstemci kitaplığını şu şekilde yükleyebilirsiniz:

pip install --upgrade azure.ai.anomalydetector

Henüz yüklemediyseniz pandas kitaplığını da yüklemeniz gerekir:

pip install pandas

Örnek verileri indirme

Bu hızlı başlangıçta sample_data_5_3000.zipGitHub örnek verilerimizden indirilebilen dosya kullanılmaktadır

Aşağıdakini çalıştırarak örnek verileri de indirebilirsiniz:

curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/samples-multivariate/multivariate_sample_data/sample_data_5_3000.zip" --output sample_data_5_3000_.zip

SAS URL'si oluşturma

Çok değişkenli Anomali Algılayıcısı, örnek dosyanızın Azure Blob Depolama'da .zip bir dosya olarak depolanmasını gerektirir.

  1. Bir Azure Depolama hesabı oluşturun.

  2. Depolama hesabınızın içinden Genel erişim düzeyi özel olarak ayarlanmış yeni bir depolama kapsayıcısı oluşturun.

  3. Kapsayıcınızı açın ve karşıya yükle'yi seçin. Önceki adımdaki sample_data_5_3000.zip dosyayı karşıya yükleyin. Depolama alanı yükleme kullanıcı deneyiminin ekran görüntüsü.

  4. ... Yeni karşıya yüklenen zip dosyanızın yanındaki bağlam menüsünü açmak için öğesini seçin ve SAS Oluştur'u seçin. SAS Oluştur seçeneğinin vurgulandığı Blob depolama bağlam menüsünün ekran görüntüsü.

  5. SAS Belirteci ve URL Oluştur'a tıklayın.

  6. Sonraki bölümde SAS URL'sini ortam değişkenine ANOMALY_DETECTOR_DATA_SOURCE kopyalamanız gerekir.

    Not

    Yukarıdaki adımlar, SAS URL'si oluşturmak için minimum değerdir. Süreçle ilgili daha ayrıntılı bir makale için bu Form Tanıma makaleye danışmanızı öneririz.

Anahtar ve uç noktayı alma

Anomali Algılayıcısı hizmetine karşı başarılı bir şekilde çağrı yapmak için aşağıdaki değerlere ihtiyacınız olacaktır:

Değişken adı Değer
ANOMALY_DETECTOR_ENDPOINT Bu değer, Azure portal kaynağınızı incelerken Anahtarlar & Uç Noktası bölümünde bulunabilir. Örnek uç nokta: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY API anahtar değeri, Azure portal kaynağınızı incelerken AnahtarLar & Uç Noktası bölümünde bulunabilir. veya KEY2kullanabilirsinizKEY1.
ANOMALY_DETECTOR_DATA_SOURCE Bu hızlı başlangıçta sample_data_5-3000.zipGitHub örnek verilerimizden indirilebilen dosya kullanılmaktadır. Daha sonra bu dosyanın Azure Blob Depolama eklenmesi ve SAS URL'si aracılığıyla erişilebilir hale getirmesi gerekir.

Azure portal kaynağınıza gidin. Uç Nokta ve AnahtarlarKaynak Yönetimi bölümünde bulunabilir. Hem API çağrılarınızın kimliğini doğrulamak için ihtiyacınız olacak şekilde uç noktanızı ve erişim anahtarınızı kopyalayın. veya KEY2kullanabilirsinizKEY1. Her zaman iki anahtara sahip olmak, hizmet kesintisine neden olmadan anahtarları güvenli bir şekilde döndürmenize ve yeniden oluşturmanıza olanak tanır.

Ortam değişkenlerini oluşturma

Anahtarınız ve uç noktanız için kalıcı ortam değişkenleri oluşturun ve atayın.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
setx ANOMALY_DETECTOR_DATA_SOURCE "REPLACE_WITH_YOUR_SAS_URL_TO_THE_SAMPLE_ZIP_FILE"

Yeni Python uygulaması oluşturma

  1. quickstart.py adlı yeni bir Python dosyası oluşturun. Ardından tercih ettiğiniz düzenleyicide veya IDE'de açın.

  2. quickstart.py içeriğini aşağıdaki kodla değiştirin. Hızlı başlangıçtaki önceki adımlarda yer alan ortam değişkenlerini kullanıyorsanız kodda değişiklik yapılması gerekmez:

import os
import time
from datetime import datetime, timezone

from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.ai.anomalydetector.models import DetectionRequest, ModelInfo, LastDetectionRequest
from azure.ai.anomalydetector.models import ModelStatus, DetectionStatus
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError

SUBSCRIPTION_KEY = os.environ["ANOMALY_DETECTOR_API_KEY"]
ANOMALY_DETECTOR_ENDPOINT = os.environ["ANOMALY_DETECTOR_ENDPOINT"]
DATA_SOURCE = os.environ["ANOMALY_DETECTOR_DATA_SOURCE"]

ad_client = AnomalyDetectorClient(AzureKeyCredential(SUBSCRIPTION_KEY), ANOMALY_DETECTOR_ENDPOINT)
model_list = list(ad_client.list_multivariate_model(skip=0, top=10000))
print("{:d} available models before training.".format(len(model_list)))

print("Training new model...(it may take a few minutes)")
data_feed = ModelInfo(start_time=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone.utc), end_time=datetime(2021, 1, 2, 12, 0, 0, tzinfo=timezone.utc), source=DATA_SOURCE)
response_header = \
        ad_client.train_multivariate_model(data_feed, cls=lambda *args: [args[i] for i in range(len(args))])[-1]
trained_model_id = response_header['Location'].split("/")[-1]

model_status = None

while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
    model_info = ad_client.get_multivariate_model(trained_model_id).model_info
    model_status = model_info.status
    time.sleep(30)
    print ("MODEL STATUS: " + model_status)

if model_status == ModelStatus.READY:
            new_model_list = list(ad_client.list_multivariate_model(skip=0, top=10000))
            print("Model training complete.\n--------------------")
            print("{:d} available models after training.".format(len(new_model_list)))
            print("New Model ID " + trained_model_id)

detection_req = DetectionRequest(source=DATA_SOURCE, start_time=datetime(2021, 1, 2, 12, 0, 0, tzinfo=timezone.utc), end_time=datetime(2021, 1, 3, 0, 0, 0, tzinfo=timezone.utc))
response_header = ad_client.detect_anomaly(trained_model_id, detection_req, cls=lambda *args: [args[i] for i in range(len(args))])[-1]
result_id = response_header['Location'].split("/")[-1]

# Get results (may need a few seconds)
r = ad_client.get_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")

while r.summary.status != DetectionStatus.READY and r.summary.status != DetectionStatus.FAILED:
    r = ad_client.get_detection_result(result_id)
    time.sleep(1)

print("Result ID:\t", r.result_id)
print("Result status:\t", r.summary.status)
print("Result length:\t", len(r.results))
print("\nAnomaly details:")
for i in r.results:
        if i.value.is_anomaly:
            print("timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(i.timestamp, str(i.value.is_anomaly), i.value.score, i.value.severity, len(i.value.interpretation) if i.value.is_anomaly else 0))
            if i.value.interpretation is not None:
                for interp in i.value.interpretation:
                    print("\tcorrelation changes: {:<10}, contribution score: {:.4f}".format(interp.variable, interp.contribution_score))

Uygulamayı çalıştırma

Uygulamayı hızlı başlangıç dosyanızda komutuyla python çalıştırın.

python quickstart.py

Çıktı

0 available models before training.
Training new model...(it may take a few minutes)
MODEL STATUS: CREATED
MODEL STATUS: RUNNING
MODEL STATUS: RUNNING
MODEL STATUS: RUNNING
MODEL STATUS: RUNNING
MODEL STATUS: READY
Model training complete.
--------------------
1 available models after training.
New Model ID GUID
Get detection result...(it may take a few seconds)
Result ID: GUID
Result status:     READY
Result length:     721
timestamp: 2021-01-02 12:06:00+00:00, is_anomaly: True , anomaly score: 0.5633, severity: 0.3278, contributor count: 5
    correlation changes: series_2  , contribution score: 0.2950
    correlation changes: series_3  , contribution score: 0.2281
    correlation changes: series_1  , contribution score: 0.2148
    correlation changes: series_4  , contribution score: 0.1927
    correlation changes: series_0  , contribution score: 0.0694
timestamp: 2021-01-02 12:27:00+00:00, is_anomaly: True , anomaly score: 0.4873, severity: 0.2836, contributor count: 5
    correlation changes: series_2  , contribution score: 0.4787
    correlation changes: series_4  , contribution score: 0.2131
    correlation changes: series_1  , contribution score: 0.1528
    correlation changes: series_3  , contribution score: 0.1338
    correlation changes: series_0  , contribution score: 0.0215
timestamp: 2021-01-02 13:08:00+00:00, is_anomaly: True , anomaly score: 0.5176, severity: 0.3012, contributor count: 5
    correlation changes: series_1  , contribution score: 0.4417
    correlation changes: series_4  , contribution score: 0.1921
    correlation changes: series_3  , contribution score: 0.1730
    correlation changes: series_0  , contribution score: 0.1591
    correlation changes: series_2  , contribution score: 0.0341
timestamp: 2021-01-02 13:19:00+00:00, is_anomaly: True , anomaly score: 0.6038, severity: 0.3514, contributor count: 5
    correlation changes: series_0  , contribution score: 0.3545
    correlation changes: series_3  , contribution score: 0.3002
    correlation changes: series_2  , contribution score: 0.2700
    correlation changes: series_4  , contribution score: 0.0608
    correlation changes: series_1  , contribution score: 0.0144
timestamp: 2021-01-02 13:22:00+00:00, is_anomaly: True , anomaly score: 0.5010, severity: 0.2915, contributor count: 5

Başlamanıza yardımcı olacak ayrıntılı bir Jupyter Notebook de var.

Kaynakları temizleme

bir Anomali Algılayıcısı kaynağını temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler. Artık kullanmayı düşünmüyorsanız, oluşturduğunuz ortam değişkenlerini silmeyi de düşünebilirsiniz.

Java için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek için bu adımları izleyin ve hizmet tarafından sağlanan algoritmaları kullanmaya başlayın. Yeni çok değişkenli anomali algılama API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

Java için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu tespit etmek için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türüne sahip pahalı fiziksel varlıkların ön koşullu bakımı.

Kitaplık başvuru belgeleri | Kitaplık kaynak kodu | Paket (Maven) | Örnek kod

Ön koşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • Java Development Kit'in (JDK) geçerli sürümü
  • Gradle derleme aracı veya başka bir bağımlılık yöneticisi.
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portal bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesine tıklayın.
    • Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız. Ücretsiz fiyatlandırma katmanını (F0) kullanarak hizmeti deneyebilir ve daha sonra üretim için ücretli bir katmana yükseltebilirsiniz.

Ayarlama

Yeni Gradle projesi oluşturma

Bu hızlı başlangıçta Gradle bağımlılık yöneticisi kullanılır. Maven Central Deposu'nda daha fazla istemci kitaplığı bilgisi bulabilirsiniz.

Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir myapp && cd myapp

gradle init Komutunu çalışma dizininizden çalıştırın. Bu komut, uygulamanızı oluşturmak ve yapılandırmak için çalışma zamanında kullanılan build.gradle.kts de dahil olmak üzere Gradle için temel derleme dosyaları oluşturur.

gradle init --type basic

DSL seçmeniz istendiğinde Kotlin'i seçin.

İstemci kitaplığını yükleme

build.gradle.kts dosyasını bulun ve tercih ettiğiniz IDE veya metin düzenleyicisiyle açın. Ardından bu derleme yapılandırmasında kopyalayın. Proje bağımlılıklarını eklediğinizden emin olun.

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

Java dosyası oluşturma

Örnek uygulamanız için bir klasör oluşturun. Çalışma dizininizden aşağıdaki komutu çalıştırın:

mkdir -p src/main/java

Yeni klasöre gidin ve MetricsAdvisorQuickstarts.java adlı bir dosya oluşturun. Bunu tercih ettiğiniz düzenleyicide veya IDE'de açın ve aşağıdaki import deyimleri ekleyin:

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;

Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun. Örnek veri dosyası için başka bir değişken oluşturun.

Not

Her zaman iki anahtardan birini kullanma seçeneğine sahip olursunuz. Bu, güvenli anahtar döndürmeye izin vermektir. Bu hızlı başlangıcın amaçları doğrultusunda ilk anahtarı kullanın.

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

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Bilişsel Hizmetler güvenlik makalesine bakın.

Anomali Algılayıcısı çok değişkenli API'leri kullanmak için önce kendi modellerinizi eğitmeniz gerekir. Eğitim verileri, aşağıdaki gereksinimleri karşılayan birden çok zaman serisi kümesidir:

Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (tümü küçük harfle) olmak üzere iki (ve yalnızca iki) sütunu olan bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601'e uygun olmalıdır; "değer", herhangi bir sayıda ondalık basamak içeren tamsayılar veya ondalıklar olabilir. Örnek:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmalıdır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları herhangi bir alt klasör olmadan tek bir zip dosyasına sıkıştırılmalıdır. Zip dosyasında istediğiniz ad bulunabilir. Zip dosyası Azure Blob depolamaya yüklenmelidir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu belgeye bakın.

Kod örnekleri

Bu kod parçacıkları, Node.js için Anomali Algılayıcısı istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

İstemcinin kimliğini doğrulama

Uç noktanız ve kimlik bilgilerinizle bir anomalyDetectorClient nesne örneği oluşturma.

HttpHeaders headers = new HttpHeaders()
    .put("Accept", ContentType.APPLICATION_JSON);

HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy(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();

Modeli eğitme

Model sonucu oluşturma ve modeli eğitma

İlk olarak bir model isteği oluşturmamız gerekir. Başlangıç ve bitiş saatinin veri kaynağınızla uyumlu olduğundan emin olun.

Anomali Algılayıcısı çok değişkenli API'leri kullanmak için algılamayı kullanmadan önce kendi modelimizi eğitmeliyiz. Eğitim için kullanılan veriler bir dizi zaman serisidir; her zaman serisi yalnızca "zaman damgası" ve "değer" olmak üzere iki sütun içeren bir CSV dosyasında olmalıdır (sütun adları tam olarak aynı olmalıdır). Her CSV dosyası, zaman serisi için her değişkenden sonra adlandırılmalıdır. Zaman serisinin tamamı tek bir zip dosyasına sıkıştırılmalı ve Azure Blob depolamaya yüklenmelidir ve zip dosyası adı için bir gereksinim yoktur. Alternatif olarak, değişkenin adının .zip dosya adından farklı olmasını istiyorsanız zip dosyasına fazladan bir meta.json dosyası eklenebilir. Blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra eğitim için zip dosyasının URL'sini kullanabiliriz.

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

Anomalileri algılama

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

Modeli dışarı aktarma

Not

Dışarı aktarma komutunun kapsayıcılı bir ortamda Anomali Algılayıcısı çok değişkenli model çalıştırmaya izin vermek için kullanılması amaçlanmıştır. Bu şu anda çok değişkenli için desteklenmemektedir, ancak gelecekte destek eklenecektir.

Eğitilen modelinizi dışarı aktarmak için kullanın 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));

Modeli silme

Geçerli kaynak tarafından kullanılabilen mevcut bir modeli silmek için işlevini kullanın deleteMultivariateModelWithResponse .

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

Uygulamayı çalıştırma

Uygulamayı şu şekilde oluşturabilirsiniz:

gradle build

Uygulamayı çalıştırma

Çalıştırmadan önce kodunuzun tam örnek kodla karşılaştırılması yararlı olabilir.

Uygulamayı şu hedefle run çalıştırın:

gradle run

Kaynakları temizleme

Bilişsel Hizmetler aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar