Bagikan melalui


Mulai cepat: Menggunakan pustaka klien Detektor Anomali Multivariat

Penting

Mulai tanggal 20 September 2023 Anda tidak akan dapat membuat sumber daya Detektor Anomali baru. Layanan Detektor Anomali dihentikan pada tanggal 1 Oktober 2026.

Mulai dengan pustaka klien multivariat Anomaly Detector untuk C#. Ikuti langkah-langkah ini untuk menginstal paket dan mulai menggunakan algoritma yang disediakan oleh layanan. API detektor anomali multivariat baru memungkinkan pengembang dengan dengan mudah mengintegrasikan AI tingkat lanjut untuk mendeteksi anomali dari grup metrik, tanpa perlu pengetahuan pembelajaran mesin atau data berlabel. Dependensi dan interkorelasi antara sinyal yang berbeda secara otomatis dihitung sebagai faktor kunci. Ini membantu Anda untuk secara proaktif melindungi sistem kompleks Anda dari kegagalan.

Gunakan pustaka klien multivariat Anomaly Detector untuk C# untuk:

  • Mendeteksi anomali tingkat sistem dari sekelompok rangkaian waktu.
  • Ketika deret waktu individu tidak akan memberi tahu Anda banyak dan Anda harus melihat semua sinyal untuk mendeteksi masalah.
  • Pemeliharaan predikat aset fisik mahal dengan puluhan hingga ratusan jenis sensor yang mengukur berbagai aspek kesehatan sistem.

Dokumentasi referensi pustaka | Kode sumber pustaka | Paket (NuGet)

Prasyarat

  • Langganan Azure - Buat langganan secara gratis
  • Versi .NET Core saat ini
  • Setelah Anda memiliki langganan Azure, buat sumber daya Detektor Anomali di portal Azure untuk mendapatkan kunci dan titik akhir Anda. Tunggu hingga disebarkan dan pilih tombol Buka sumber daya.
    • Anda akan memerlukan kunci dan titik akhir dari sumber daya yang Anda buat untuk menghubungkan aplikasi Anda ke Anomaly Detector API. Tempelkan kunci dan titik akhir ke dalam kode di bawah ini nanti di mulai cepat. Anda dapat menggunakan tingkat harga gratis (F0) untuk percobaan, lalu meningkatkannya ke tingkat berbayar untuk produksi.

Penyiapan

Buat akun penyimpanan

Detektor Anomali Multivariat mengharuskan file sampel Anda disimpan di Azure Blob Storage.

  1. Membuat akun Azure Storage.
  2. Buka Kontrol Akses (IAM), dan pilih TAMBAHKAN untuk Menambahkan penetapan peran.
  3. Cari peran Pembaca Data Blob Penyimpanan, sorot jenis akun ini lalu pilih Berikutnya.
  4. Pilih tetapkan akses ke Identitas terkelola, dan Pilih Anggota, lalu pilih sumber daya Detektor Anomali yang Anda buat sebelumnya, lalu pilih Tinjau + tetapkan.

Konfigurasi ini terkadang sedikit membingungkan, jika Anda mengalami masalah, sebaiknya konsultasikan dengan sampel Jupyter Notebook multivariat kami, yang menelusuri proses ini lebih mendalam.

Mengunduh data sampel

Mulai cepat ini menggunakan satu file untuk data sample_data_5_3000.csvsampel . File ini dapat diunduh dari data sampel GitHub kami

Anda juga dapat mengunduh data sampel dengan menjalankan:

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

Mengunggah data sampel ke Akun Penyimpanan

  1. Buka Akun Penyimpanan Anda, pilih Kontainer dan buat kontainer baru.
  2. Pilih Unggah dan unggah sample_data_5_3000.csv
  3. Pilih data yang Anda unggah dan salin URL Blob karena Anda perlu menambahkannya ke sampel kode dalam beberapa langkah.

Mengambil kunci dan titik akhir

Agar berhasil melakukan panggilan terhadap layanan Detektor Anomali, Anda memerlukan nilai berikut:

Nama variabel Nilai
ANOMALY_DETECTOR_ENDPOINT Nilai ini dapat ditemukan di bagian Kunci & Titik Akhir saat memeriksa sumber daya Anda dari portal Microsoft Azure. Contoh titik akhir: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Nilai kunci API dapat ditemukan di bagian Kunci & Titik Akhir saat memeriksa sumber daya Anda dari portal Azure. Anda dapat menggunakan KEY1 atau KEY2.

Buka sumber daya Anda di portal Azure. Titik Akhir dan Kunci dapat ditemukan di bagian Manajemen Sumber Daya. Salin titik akhir dan kunci akses Anda karena Anda memerlukan keduanya untuk mengautentikasi panggilan API Anda. Anda dapat menggunakan KEY1 atau KEY2. Selalu miliki dua kunci untuk memungkinkan Anda memutar dan meregenerasi kunci dengan aman tanpa menyebabkan gangguan layanan.

Membuat variabel lingkungan

Buat dan tetapkan variabel lingkungan persisten untuk kunci dan titik akhir Anda.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Buat aplikasi .NET Core baru

Di jendela konsol (seperti cmd, PowerShell, atau Bash), gunakan perintah dotnet new untuk membuat aplikasi konsol baru dengan nama anomaly-detector-quickstart-multivariate. Perintah ini membuat proyek "Halo Dunia" sederhana dengan satu file sumber C#: Program.cs.

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

Ubah direktori Anda ke folder aplikasi yang baru dibuat. Anda dapat membangun aplikasi dengan:

dotnet build

Output build tidak boleh berisi peringatan atau kesalahan.

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

Memasang pustaka klien

Dalam direktori aplikasi, pasang pustaka klien Anomaly Detector untuk .NET dengan perintah berikut:

dotnet add package Azure.AI.AnomalyDetector --prerelease

Dari direktori proyek, buka file program.cs dan ganti dengan kode berikut:

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

Jalankan aplikasi

Menjalankan aplikasi dengan perintah dotnet run dari direktori aplikasi Anda.

dotnet run

Membersihkan sumber daya

Jika Anda ingin membersihkan dan menghapus langganan layanan Azure AI, Anda dapat menghapus sumber daya atau grup sumber daya. Menghapus grup sumber daya juga menghapus sumber daya lain yang terkait dengan grup sumber daya.

Langkah berikutnya

Mulai menggunakan pustaka klien multivariat Detektor Anomali untuk JavaScript. Ikuti langkah-langkah ini untuk menginstal paket dan mulai menggunakan algoritma yang disediakan oleh layanan. API detektor anomali multivariat baru memungkinkan pengembang dengan dengan mudah mengintegrasikan AI tingkat lanjut untuk mendeteksi anomali dari grup metrik, tanpa perlu pengetahuan pembelajaran mesin atau data berlabel. Dependensi dan interkorelasi antara sinyal yang berbeda secara otomatis dihitung sebagai faktor kunci. Ini membantu Anda untuk secara proaktif melindungi sistem kompleks Anda dari kegagalan.

Gunakan pustaka klien multivariat Detektor Anomali untuk JavaScript untuk:

  • Mendeteksi anomali tingkat sistem dari sekelompok rangkaian waktu.
  • Ketika setiap rangkaian waktu individual tidak akan memberi tahu Anda banyak, dan Anda harus melihat semua sinyal untuk mendeteksi masalah.
  • Pemeliharaan predikat aset fisik mahal dengan puluhan hingga ratusan jenis sensor yang mengukur berbagai aspek kesehatan sistem.

Dokumentasi referensi pustaka | Kode sumber pustaka | Paket (npm) | Kode sampel

Prasyarat

  • Langganan Azure - Buat langganan secara gratis
  • Versi terbaru Node.js
  • Setelah Anda memiliki langganan Azure, buat sumber daya Detektor Anomali di portal Azure untuk mendapatkan kunci dan titik akhir Anda. Tunggu hingga disebarkan dan pilih tombol Buka sumber daya.
    • Anda akan memerlukan kunci dan titik akhir dari sumber daya yang Anda buat untuk menghubungkan aplikasi Anda ke API Detektor Anomali. Anda akan menempelkan kunci dan titik akhir ke dalam kode di bawah ini di mulai cepat. Anda dapat menggunakan tingkat harga gratis (F0) untuk percobaan, lalu meningkatkannya ke tingkat berbayar untuk produksi.

Menyiapkan

Membuat aplikasi Node.js baru

Di jendela konsol (seperti cmd, PowerShell, atau Bash), buat direktori baru untuk aplikasi Anda, dan buka direktori tersebut.

mkdir myapp && cd myapp

Jalankan perintah npm init untuk membuat aplikasi node dengan file package.json.

npm init

Buat file bernama index.js dan impor pustaka berikut: `

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

Buat variabel titik akhir dan kunci sumber daya Azure Anda. Buat variabel lain untuk contoh file data.

Catatan

Anda dapat menggunakan salah satu dari dua kunci kapan saja. Ini untuk memungkinkan rotasi kunci yang aman. Untuk keperluan mulai cepat ini, gunakan kunci pertama.

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

Penting

Jangan lupa menghapus kunci dari kode setelah Anda selesai, dan jangan pernah mempostingnya secara publik. Untuk produksi, gunakan cara yang aman untuk menyimpan dan mengakses kredensial Anda seperti Azure Key Vault. Lihat artikel keamanan layanan Azure AI untuk informasi selengkapnya.

Untuk menggunakan API multivariat Detektor Anomali, Anda harus terlebih dahulu melatih model Anda sendiri. Data pelatihan adalah kumpulan rangkaian waktu ganda yang memenuhi persyaratan berikut:

Setiap kali seri harus dalam bentuk file CSV dengan dua (dan hanya dua) kolom, "tanda waktu" dan "nilai" (semua dalam huruf kecil) sebagai baris header. Nilai "tanda waktu" harus sesuai dengan ISO 8601; "nilai" bisa menjadi bilangan bulat atau desimal dengan sejumlah angka di belakang koma. Contohnya:

rentang waktu value
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Setiap file CSV harus dinamai sesuai dengan variabel berbeda yang akan digunakan untuk pelatihan model. Misalnya, "temperature.csv" dan "humidity.csv". Semua file CSV harus di-zip ke dalam satu file zip tanpa subfolder. File zip dapat bernama apa pun yang Anda inginkan. File zip harus diunggah ke Azure Blob storage. Setelah Anda membuat URL SAS blob (Tanda tangan akses bersama) untuk file zip, URL tersebut dapat digunakan untuk pelatihan. Lihat dokumen ini tentang cara menghasilkan URL SAS dari Azure Blob Storage.

Memasang pustaka klien

Pasang paket NPM ms-rest-azure dan azure-ai-anomalydetector. Pustaka csv-parse juga digunakan dalam mulai cepat ini:

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

File aplikasi package.json Anda diperbarui dengan dependensi.

Contoh kode

Cuplikan kode ini memperlihatkan kepada Anda cara melakukan tugas berikut dengan pustaka klien Detektor Anomali untuk Node.js:

Mengautentikasi klien

Membuat objek AnomalyDetectorClient dengan titik akhir dan info masuk Anda.

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

Latih model

Membangun hasil model

Pertama kita perlu membangun permintaan model. Pastikan waktu mulai dan waktu akhir sejajar dengan sumber data Anda.

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

Melatih model barul

Anda meneruskan permintaan model Anda ke metode klien trainMultivariateModel Detektor Anomali.

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)

Untuk memeriksa apakah pelatihan model Anda selesai, Anda dapat melacak status model:

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

Mendeteksi anomali

Gunakan fungsi detectAnomaly dan getDectectionResult untuk menentukan apakah ada anomali dalam sumber data Anda.

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

Mengekspor model

Catatan

Perintah ekspor digunakan untuk mengeksekusi model multivariat Anomaly Detector dalam lingkungan kontainer. Tindakan ini tidak didukung untuk multivariat saat ini, tetapi dukungan akan ditambahkan di masa depan.

Untuk mengekspor model terlatih Anda, gunakan fungsi 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+".")

Menghapus model

Untuk menghapus model yang tersedia untuk sumber daya saat ini, gunakan fungsi deleteMultivariateModel.

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

Jalankan aplikasi

Sebelum menjalankan aplikasi, sebaiknya periksa kode Anda terhadap kode sampel lengkap

Jalankan aplikasi dengan perintah node pada file mulai cepat Anda.

node index.js

Membersihkan sumber daya

Jika Anda ingin membersihkan dan menghapus langganan layanan Azure AI, Anda dapat menghapus sumber daya atau grup sumber daya. Menghapus grup sumber daya juga menghapus sumber daya lain yang terkait dengan grup sumber daya.

Langkah berikutnya

Dokumentasi referensi pustaka |Kode sumber pustaka | Paket (PyPi) |Temukan kode sampel di GitHub

Mulai menggunakan pustaka klien multivariat Detektor Anomali untuk Python. Ikuti langkah-langkah ini untuk menginstal paket, dan mulai menggunakan algoritma yang disediakan oleh layanan. API detektor anomali multivariat baru memungkinkan pengembang dengan dengan mudah mengintegrasikan AI tingkat lanjut untuk mendeteksi anomali dari grup metrik, tanpa perlu pengetahuan pembelajaran mesin atau data berlabel. Dependensi dan interkorelasi antara sinyal yang berbeda secara otomatis dihitung sebagai faktor kunci. Ini membantu Anda untuk secara proaktif melindungi sistem kompleks Anda dari kegagalan.

Gunakan pustaka klien multivariat Detektor Anomali untuk Python untuk:

  • Mendeteksi anomali tingkat sistem dari sekelompok rangkaian waktu.
  • Ketika setiap rangkaian waktu individual tidak akan memberi tahu Anda banyak, dan Anda harus melihat semua sinyal untuk mendeteksi masalah.
  • Pemeliharaan predikat aset fisik mahal dengan puluhan hingga ratusan jenis sensor yang mengukur berbagai aspek kesehatan sistem.

Prasyarat

  • Langganan Azure - buat langganan gratis
  • Python 3.x
  • Setelah Anda memiliki langganan Azure, buat sumber daya Detektor Anomali di portal Azure untuk mendapatkan kunci dan titik akhir Anda. Tunggu hingga disebarkan dan pilih tombol Buka sumber daya. Anda dapat menggunakan tingkat harga gratis (F0) untuk percobaan, lalu meningkatkannya ke tingkat berbayar untuk produksi.

Penyiapan

Menginstal pustaka klien. Anda dapat memasang pustaka klien dengan:

pip install --upgrade azure.ai.anomalydetector

Buat akun penyimpanan

Detektor Anomali Multivariat mengharuskan file sampel Anda disimpan di Azure Blob Storage.

  1. Membuat akun Azure Storage.
  2. Buka Kontrol Akses (IAM), dan pilih TAMBAHKAN untuk Menambahkan penetapan peran.
  3. Cari peran Pembaca Data Blob Penyimpanan, sorot jenis akun ini lalu pilih Berikutnya.
  4. Pilih tetapkan akses ke Identitas terkelola, dan Pilih Anggota, lalu pilih sumber daya Detektor Anomali yang Anda buat sebelumnya, lalu pilih Tinjau + tetapkan.

Konfigurasi ini terkadang sedikit membingungkan, jika Anda mengalami masalah, sebaiknya konsultasikan dengan sampel Jupyter Notebook multivariat kami, yang menelusuri proses ini lebih mendalam.

Mengunduh data sampel

Mulai cepat ini menggunakan satu file untuk data sample_data_5_3000.csvsampel . File ini dapat diunduh dari data sampel GitHub kami

Anda juga dapat mengunduh data sampel dengan menjalankan:

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

Mengunggah data sampel ke Akun Penyimpanan

  1. Buka Akun Penyimpanan Anda, pilih Kontainer dan buat kontainer baru.
  2. Pilih Unggah dan unggah sample_data_5_3000.csv
  3. Pilih data yang Anda unggah dan salin URL Blob karena Anda perlu menambahkannya ke sampel kode dalam beberapa langkah.

Mengambil kunci dan titik akhir

Agar berhasil melakukan panggilan terhadap layanan Detektor Anomali, Anda memerlukan nilai berikut:

Nama variabel Nilai
ANOMALY_DETECTOR_ENDPOINT Nilai ini dapat ditemukan di bagian Kunci & Titik Akhir saat memeriksa sumber daya Anda dari portal Microsoft Azure. Contoh titik akhir: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Nilai kunci API dapat ditemukan di bagian Kunci & Titik Akhir saat memeriksa sumber daya Anda dari portal Azure. Anda dapat menggunakan KEY1 atau KEY2.

Buka sumber daya Anda di portal Azure. Titik Akhir dan Kunci dapat ditemukan di bagian Manajemen Sumber Daya. Salin titik akhir dan kunci akses Anda karena Anda memerlukan keduanya untuk mengautentikasi panggilan API Anda. Anda dapat menggunakan KEY1 atau KEY2. Selalu miliki dua kunci untuk memungkinkan Anda memutar dan meregenerasi kunci dengan aman tanpa menyebabkan gangguan layanan.

Membuat variabel lingkungan

Buat dan tetapkan variabel lingkungan persisten untuk kunci dan titik akhir Anda.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Membuat aplikasi Python baru

  1. Buat file Python baru yang disebut sample_multivariate_detect.py. Lalu buka file di editor atau IDE pilihan Anda.

  2. Ganti konten sample_multivariate_detect.py dengan kode berikut. Anda perlu memodifikasi jalur untuk variabel blob_url.

import time
from datetime import datetime, timezone
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.anomalydetector.models import *
import os

SUBSCRIPTION_KEY =  os.environ['ANOMALY_DETECTOR_API_KEY']
ANOMALY_DETECTOR_ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']

ad_client = AnomalyDetectorClient(ANOMALY_DETECTOR_ENDPOINT, AzureKeyCredential(SUBSCRIPTION_KEY))

time_format = "%Y-%m-%dT%H:%M:%SZ"
blob_url = "Path-to-sample-file-in-your-storage-account"  # example path: https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv

train_body = ModelInfo(
    data_source=blob_url,
    start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
    end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
    data_schema="OneTable",
    display_name="sample",
    sliding_window=200,
    align_policy=AlignPolicy(
        align_mode=AlignMode.OUTER,
        fill_n_a_method=FillNAMethod.LINEAR,
        padding_value=0,
    ),
)

batch_inference_body = MultivariateBatchDetectionOptions(
       data_source=blob_url,
       top_contributor_count=10,
       start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
       end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
   )


print("Training new model...(it may take a few minutes)")
model = ad_client.train_multivariate_model(train_body)
model_id = model.model_id
print("Training model id is {}".format(model_id))

## Wait until the model is ready. It usually takes several minutes
model_status = None
model = None

while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
    model = ad_client.get_multivariate_model(model_id)
    print(model)
    model_status = model.model_info.status
    print("Model is {}".format(model_status))
    time.sleep(30)
if model_status == ModelStatus.READY:
    print("Done.\n--------------------")
    # Return the latest model id

# Detect anomaly in the same data source (but a different interval)
result = ad_client.detect_multivariate_batch_anomaly(model_id, batch_inference_body)
result_id = result.result_id

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

while anomaly_results.summary.status != MultivariateBatchDetectionStatus.READY and anomaly_results.summary.status != MultivariateBatchDetectionStatus.FAILED:
    anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
    print("Detection is {}".format(anomaly_results.summary.status))
    time.sleep(5)
    
   
print("Result ID:\t", anomaly_results.result_id)
print("Result status:\t", anomaly_results.summary.status)
print("Result length:\t", len(anomaly_results.results))

# See detailed inference result
for r in anomaly_results.results:
    print(
        "timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(
            r.timestamp,
            r.value.is_anomaly,
            r.value.score,
            r.value.severity,
            len(r.value.interpretation) if r.value.is_anomaly else 0,
        )
    )
    if r.value.interpretation:
        for contributor in r.value.interpretation:
            print(
                "\tcontributor variable: {:<10}, contributor score: {:.4f}".format(
                    contributor.variable, contributor.contribution_score
                )
            )

Jalankan aplikasi

Jalankan aplikasi dengan perintah python pada file mulai cepat Anda.

python sample_multivariate_detect.py

Output

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

Hasil output telah dipotong untuk brevity.

Membersihkan sumber daya

Jika Anda ingin membersihkan dan menghapus sumber daya Detektor Anomali, Anda dapat menghapus sumber daya atau grup sumber daya. Menghapus grup sumber daya juga menghapus sumber daya apa pun yang terkait dengannya. Anda juga mungkin ingin mempertimbangkan untuk menghapus variabel lingkungan yang Anda buat jika Anda tidak lagi berniat menggunakannya.

Mulai menggunakan pustaka klien multivariat Detektor Anomali untuk Java. Ikuti langkah-langkah ini untuk memasang paket mulai menggunakan algoritma yang disediakan oleh layanan. API detektor anomali multivariat baru memungkinkan pengembang dengan dengan mudah mengintegrasikan AI tingkat lanjut untuk mendeteksi anomali dari grup metrik, tanpa perlu pengetahuan pembelajaran mesin atau data berlabel. Dependensi dan interkorelasi antara sinyal yang berbeda secara otomatis dihitung sebagai faktor kunci. Ini membantu Anda untuk secara proaktif melindungi sistem kompleks Anda dari kegagalan.

Gunakan pustaka klien multivariat Detektor Anomali untuk Java untuk:

  • Mendeteksi anomali tingkat sistem dari sekelompok rangkaian waktu.
  • Ketika setiap rangkaian waktu individual tidak akan memberi tahu Anda banyak, dan Anda harus melihat semua sinyal untuk mendeteksi masalah.
  • Pemeliharaan predikat aset fisik mahal dengan puluhan hingga ratusan jenis sensor yang mengukur berbagai aspek kesehatan sistem.

Dokumentasi referensi pustaka | Kode sumber pustaka | Paket (Maven) | Kode sampel

Prasyarat

  • Langganan Azure - Buat langganan secara gratis
  • Versi saat ini dari Java Development Kit (JDK)
  • Alat build Gradle, atau manajer dependensi lainnya.
  • Setelah Anda memiliki langganan Azure, buat sumber daya Detektor Anomali di portal Azure untuk mendapatkan kunci dan titik akhir Anda. Tunggu hingga disebarkan dan pilih tombol Buka sumber daya.
    • Anda akan memerlukan kunci dan titik akhir dari sumber daya yang Anda buat untuk menghubungkan aplikasi Anda ke API Detektor Anomali. Anda akan menempelkan kunci dan titik akhir ke dalam kode di bawah ini di mulai cepat. Anda dapat menggunakan tingkat harga gratis (F0) untuk percobaan, lalu meningkatkannya ke tingkat berbayar untuk produksi.

Menyiapkan

Buat proyek Gradle baru

Mulai cepat ini menggunakan pengelola dependensi Gradle. Anda dapat menemukan informasi pustaka klien lainnya di Repositori Maven Central.

Di jendela konsol (seperti cmd, PowerShell, atau Bash), buat direktori baru untuk aplikasi Anda, dan buka direktori tersebut.

mkdir myapp && cd myapp

Jalankan perintah gradle init dari direktori yang berfungsi. Perintah ini membuat file build penting untuk Gradle, termasuk build.gradle.kts yang digunakan pada runtime untuk membuat dan mengonfigurasi aplikasi Anda.

gradle init --type basic

Saat diminta untuk memilih DSL, pilih Kotlin.

Memasang pustaka klien

Temukan build.gradle.kts lalu buka dengan IDE atau editor teks pilihan Anda. Kemudian salin dalam konfigurasi build ini. Pastikan untuk menyertakan dependensi proyek.

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

Membuat file Java

Buat folder untuk aplikasi sampel Anda. Dari direktori kerja, jalankan perintah berikut:

mkdir -p src/main/java

Navigasi ke folder baru dan buat file yang disebut MetricsAdvisorQuickstarts.java. Buka di editor atau IDE pilihan Anda, lalu tambahkan pernyataan import berikut:

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;

Buat variabel titik akhir dan kunci sumber daya Azure Anda. Buat variabel lain untuk contoh file data.

Catatan

Anda dapat menggunakan salah satu dari dua kunci kapan saja. Ini untuk memungkinkan rotasi kunci yang aman. Untuk keperluan mulai cepat ini, gunakan kunci pertama.

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

Penting

Jangan lupa menghapus kunci dari kode setelah Anda selesai, dan jangan pernah mempostingnya secara publik. Untuk produksi, gunakan cara yang aman untuk menyimpan dan mengakses kredensial Anda seperti Azure Key Vault. Lihat artikel keamanan layanan Azure AI untuk informasi selengkapnya.

Untuk menggunakan API multivariat Detektor Anomali, Anda harus terlebih dahulu melatih model Anda sendiri. Data pelatihan adalah kumpulan rangkaian waktu ganda yang memenuhi persyaratan berikut:

Setiap kali seri harus dalam bentuk file CSV dengan dua (dan hanya dua) kolom, "tanda waktu" dan "nilai" (semua dalam huruf kecil) sebagai baris header. Nilai "tanda waktu" harus sesuai dengan ISO 8601; "nilai" bisa menjadi bilangan bulat atau desimal dengan sejumlah angka di belakang koma. Contohnya:

rentang waktu value
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Setiap file CSV harus dinamai sesuai dengan variabel berbeda yang akan digunakan untuk pelatihan model. Misalnya, "temperature.csv" dan "humidity.csv". Semua file CSV harus di-zip ke dalam satu file zip tanpa subfolder. File zip dapat bernama apa pun yang Anda inginkan. File zip harus diunggah ke Azure Blob storage. Setelah Anda membuat URL SAS blob (Tanda tangan akses bersama) untuk file zip, URL tersebut dapat digunakan untuk pelatihan. Lihat dokumen ini tentang cara menghasilkan URL SAS dari Azure Blob Storage.

Contoh kode

Cuplikan kode ini memperlihatkan kepada Anda cara melakukan tugas berikut dengan pustaka klien Detektor Anomali untuk Node.js:

Mengautentikasi klien

Membuat objek anomalyDetectorClient dengan titik akhir dan info masuk Anda.

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

Latih model

Membangun hasil model dan model kereta

Pertama kita perlu membangun permintaan model. Pastikan waktu mulai dan waktu akhir sejajar dengan sumber data Anda.

Untuk menggunakan API multivariat Detektor Anomali, kita perlu melatih model kita sendiri sebelum menggunakan deteksi. Data yang digunakan untuk pelatihan adalah kumpulan seri waktu, setiap seri waktu harus dalam file CSV dengan hanya dua kolom, "cap waktu" dan "nilai"(nama kolom harus sama persis). Setiap file CSV harus dinamai sesuai dengan setiap variabel untuk seri waktu. Semua rangkaian waktu harus di-zip ke dalam satu file zip dan diunggah ke penyimpanan Azure Blob, dan tidak ada persyaratan untuk nama file zip. Atau, file extra meta.json dapat dimasukkan dalam file zip jika Anda ingin nama variabel berbeda dari nama file .zip Anda. Setelah kami membuat URL SAS bob (Tanda tangan akses bersama), kita dapat menggunakan url ke file zip untuk pelatihan.

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

Mendeteksi anomali

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

Mengekspor model

Catatan

Perintah ekspor digunakan untuk mengeksekusi model multivariat Anomaly Detector dalam lingkungan kontainer. Tindakan ini tidak didukung untuk multivariat saat ini, tetapi dukungan akan ditambahkan di masa depan.

Untuk mengekspor model terlatih Anda, gunakan 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));

Menghapus model

Untuk menghapus model yang tersedia untuk sumber daya saat ini, gunakan fungsi deleteMultivariateModelWithResponse.

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

Jalankan aplikasi

Anda dapat membuat aplikasi dengan:

gradle build

Jalankan aplikasi

Sebelum menjalankannya dapat membantu untuk memeriksa kode Anda terhadap kode sampel lengkap.

Jalankan aplikasi dengan tujuan run:

gradle run

Membersihkan sumber daya

Jika Anda ingin membersihkan dan menghapus langganan layanan Azure AI, Anda dapat menghapus sumber daya atau grup sumber daya. Menghapus grup sumber daya juga menghapus sumber daya lain yang terkait dengan grup sumber daya.

Langkah berikutnya