Inicio rápido: Uso de la biblioteca cliente multivariante de Anomaly Detector
Importante
A partir del 20 de septiembre de 2023, no podrá crear nuevos recursos de Anomaly Detector. El servicio Anomaly Detector se va a retirar el 1 de octubre de 2026.
Comience a usar la biblioteca cliente multivariante de Anomaly Detector para C#. Siga estos pasos para instalar el paquete y empezar a usar los algoritmos proporcionados por el servicio. Las nuevas API de detección de anomalías multivariante permiten a los desarrolladores integrar fácilmente inteligencia artificial avanzada para detectar anomalías de grupos de métricas, sin necesidad de tener conocimientos de aprendizaje automático ni usar datos etiquetados. Las dependencias y correlaciones entre distintas señales se consideran automáticamente como factores clave. De este modo, podrá proteger de forma proactiva los sistemas complejos frente a errores.
Utilice la biblioteca cliente multivariante de Anomaly Detector para C# con el fin de:
- Detectar anomalías de nivel del sistema para un grupo de series temporales.
- Cuando una serie temporal individual no ofrece demasiada información y se deben examinar todas las señales para detectar un problema.
- Mantenimiento predictivo de recursos físicos costosos con decenas o cientos de tipos de sensores diferentes que miden diversos aspectos del estado del sistema.
Documentación de referencia de la biblioteca | Código fuente de la biblioteca | Paquete (NuGet)
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- La versión actual de .NET Core
- Cuando tenga la suscripción de Azure, cree un recurso de Anomaly Detector en Azure Portal para obtener la clave y el punto de conexión. Espere a que se implemente y seleccione el botón Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación a Anomaly Detector API. Más adelante en este inicio rápido, debe pegar la clave y el punto de conexión en el código que se incluye a continuación.
Puede usar el plan de tarifa gratis (
F0
) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación a Anomaly Detector API. Más adelante en este inicio rápido, debe pegar la clave y el punto de conexión en el código que se incluye a continuación.
Puede usar el plan de tarifa gratis (
Configurar
Crear una cuenta de almacenamiento
La Anomaly Detector multivariante requiere que el archivo de ejemplo se almacene en Azure Blob Storage.
- Cree una cuenta de Azure Storage.
- Vaya a Access Control (IAM), y seleccione AGREGAR para elegir la opción Adición de asignación de roles.
- Busque el rol de Lector de datos de Storage Blob, seleccione este tipo de cuenta y luego haga clic en Siguiente.
- Seleccione Asignación de acceso a la identidad administrada y seleccione Miembros, luego elija el recurso de Anomaly Detector que ha creado antes y seleccione Revisar y asignar.
Esta configuración a veces puede resultar un poco confusa. Si tiene problemas, se recomienda consultar nuestro ejemplo de Jupyter Notebook multivariante, que le guiará a través de este proceso más en profundidad.
Descarga de datos de ejemplo
En este inicio rápido se usa un archivo para los datos de ejemplo sample_data_5_3000.csv
. Este archivo se puede descargar desde nuestros datos de ejemplo de GitHub
También puede descargar los datos de ejemplo mediante la ejecución de:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Carga de datos de ejemplo en la cuenta de almacenamiento
- Vaya a la cuenta de almacenamiento, seleccione Contenedores y cree un nuevo contenedor.
- Seleccione Cargar y cargar sample_data_5_3000.csv
- Seleccione los datos que ha cargado y copie la dirección URL del blob, ya que debe agregarlos al ejemplo de código en unos pasos más adelante.
Recuperación de la clave y el punto de conexión
Para realizar correctamente una llamada en el servicio Anomaly Detector, necesitará estos valores:
Nombre de la variable | Valor |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Punto de conexión de ejemplo: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
El valor de la clave de API se puede encontrar en la sección Claves y punto de conexión al examinar su recurso en Azure Portal. Puede usar KEY1 o KEY2 . |
Vaya al recurso en Azure Portal. El punto de conexión y las claves se pueden encontrar en la sección Administración de recursos. Copie el punto de conexión y la clave de acceso, ya que los necesita para autenticar las llamadas API. Puede usar KEY1
o KEY2
. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio.
Creación de variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Creación de una aplicación de .NET Core
En una ventana de consola (por ejemplo, cmd, PowerShell o Bash), use el comando dotnet new
para crear una nueva aplicación de consola con el nombre anomaly-detector-quickstart-multivariate
. Este comando crea un sencillo proyecto "Hola mundo" con un solo archivo de origen de C#: Program.cs.
dotnet new console -n anomaly-detector-quickstart-multivariate
Cambie el directorio a la carpeta de aplicaciones recién creada. Para compilar la aplicación:
dotnet build
La salida de la compilación no debe contener advertencias ni errores.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Instalación de la biblioteca cliente
Dentro del directorio de aplicaciones, instale la biblioteca cliente de Anomaly Detector para .NET con el siguiente comando:
dotnet add package Azure.AI.AnomalyDetector --prerelease
En el directorio del proyecto, abra el archivo program.cs y reemplácelo con el código siguiente:
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));
}
}
}
Ejecución de la aplicación
Ejecute la aplicación con el comando dotnet run
desde el directorio de la aplicación.
dotnet run
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción de servicios de Azure AI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a dicho grupo.
Pasos siguientes
Comience a usar la biblioteca cliente multivariante de Anomaly Detector para JavaScript. Siga estos pasos para instalar el paquete y empezar a usar los algoritmos proporcionados por el servicio. Las nuevas API de detección de anomalías multivariante permiten a los desarrolladores integrar fácilmente inteligencia artificial avanzada para detectar anomalías de grupos de métricas, sin necesidad de tener conocimientos de aprendizaje automático ni usar datos etiquetados. Las dependencias y correlaciones entre distintas señales se consideran automáticamente como factores clave. De este modo, podrá proteger de forma proactiva los sistemas complejos frente a errores.
Utilice la biblioteca cliente multivariante de Anomaly Detector para JavaScript con el fin de:
- Detectar anomalías de nivel del sistema para un grupo de series temporales.
- Cuando una serie temporal individual no ofrece demasiada información y se deben examinar todas las señales para detectar un problema.
- Mantenimiento predictivo de recursos físicos costosos con decenas o cientos de tipos de sensores diferentes que miden diversos aspectos del estado del sistema.
Documentación de referencia de la biblioteca | Código fuente de la biblioteca | Paquete (npm) | Código de ejemplo
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- La versión actual de Node.js
- Cuando tenga la suscripción de Azure, cree un recurso de Anomaly Detector en Azure Portal para obtener la clave y el punto de conexión. Espere a que se implemente y seleccione el botón Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación a la API Anomaly Detector. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
Puede usar el plan de tarifa gratis (
F0
) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación a la API Anomaly Detector. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
Puede usar el plan de tarifa gratis (
Instalación
Creación de una aplicación Node.js
En una ventana de la consola (como cmd, PowerShell o Bash), cree un directorio para la aplicación y vaya a él.
mkdir myapp && cd myapp
Ejecute el comando npm init
para crear una aplicación de nodo con un archivo package.json
.
npm init
Cree un archivo llamado index.js
e importe las bibliotecas siguientes:
'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');
Cree variables para el punto de conexión y la clave de Azure del recurso. Cree otra variable para el archivo de datos de ejemplo.
Nota
Siempre tendrá la opción de usar una de estas dos claves. Esto es para permitir la rotación de claves segura. Para este inicio rápido, use la primera clave.
const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
Importante
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Consulte el artículo sobre seguridad de los servicios de Azure AI para obtener más información.
Para usar las API multivariantes de Anomaly Detector, primero debe entrenar sus propios modelos. Los datos de entrenamiento son un conjunto de varias series temporales que cumplen los siguientes requisitos:
Cada serie temporal debe ser un archivo CSV con dos columnas (solo dos), "timestamp" y "value" (todo en minúsculas) como fila de encabezado. Los valores de "timestamp" deben cumplir la norma ISO 8601; los de "value" pueden ser números enteros o decimales con cualquier número de posiciones decimales. Por ejemplo:
timestamp | value |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3.6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Cada archivo CSV debe tener el nombre de una variable diferente que se usará para el entrenamiento del modelo. Por ejemplo, "temperature.csv" y "humidity.csv". Todos los archivos CSV deben comprimirse en un archivo ZIP sin subcarpetas. El archivo ZIP puede tener el nombre que desee. El archivo ZIP debe cargarse en Azure Blob Storage. Una vez que genere la dirección URL de SAS de blob (firmas de acceso compartido) para el archivo ZIP, se puede usar para el entrenamiento. Consulte este documento para obtener información sobre cómo generar direcciones URL de SAS a partir de Azure Blob Storage.
Instalación de la biblioteca cliente
Instale los paquetes ms-rest-azure
y azure-ai-anomalydetector
de NPM. La biblioteca de análisis de CSV también se usa en este inicio rápido:
npm install @azure/ai-anomaly-detector csv-parse
El archivo package.json
de la aplicación se actualiza con las dependencias.
Ejemplos de código
Estos fragmentos de código muestran cómo realizar las siguientes acciones con la biblioteca cliente de Anomaly Detector para Node.js:
- Autenticar el cliente
- Entrenamiento de un modelo
- Detectar anomalías
- Exportar un modelo
- Eliminar un modelo
Autenticar el cliente
Cree una instancia de un objeto AnomalyDetectorClient
con el punto de conexión y las credenciales.
const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));
Entrenamiento de un modelo
Construcción de un resultado de modelo
En primer lugar, es necesario construir una solicitud de modelo. Asegúrese de que la hora de inicio y finalización se correspondan con su origen de datos.
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
};
Entrenamiento de un modelo nuevo
Se pasa la solicitud de modelo al método trainMultivariateModel
del cliente de Anomaly Detector.
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)
Para comprobar si el entrenamiento del modelo está completo, puede realizar un seguimiento del estado del modelo:
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.");
Detección de anomalías
Use las funciones detectAnomaly
y getDectectionResult
para determinar si existe cualquier anomalía con el origen de datos.
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);
Exportación de un modelo
Nota
El comando de exportación está diseñado para permitir la ejecución de modelos multivariados de Anomaly Detector en un entorno en contenedor. Actualmente, no se admite para el multivariado, pero se agregará una compatibilidad en el futuro.
Para exportar el modelo entrenado, use la funció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+".")
Eliminación del modelo
Para eliminar un modelo existente que esté disponible para el recurso actual, use la función deleteMultivariateModel
.
client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")
Ejecución de la aplicación
Antes de ejecutar la aplicación, puede resultar útil comprobar el código con el código de ejemplo completo.
Ejecute la aplicación con el comando node
en el archivo de inicio rápido.
node index.js
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción de servicios de Azure AI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a dicho grupo.
Pasos siguientes
Documentación de referencia de la biblioteca |Código fuente de la biblioteca | Paquete (PyPi) |Buscar el ejemplo de código en GitHub
Comience a usar la biblioteca cliente multivariante de Anomaly Detector para Python. Siga estos pasos para instalar el paquete y empezar a usar los algoritmos proporcionados por el servicio. Las nuevas API de detección de anomalías multivariante permiten a los desarrolladores integrar fácilmente inteligencia artificial avanzada para detectar anomalías de grupos de métricas, sin necesidad de tener conocimientos de aprendizaje automático ni usar datos etiquetados. Las dependencias y correlaciones entre distintas señales se consideran automáticamente como factores clave. De este modo, podrá proteger de forma proactiva los sistemas complejos frente a errores.
Utilice la biblioteca cliente multivariante de Anomaly Detector para Python con el fin de:
- Detectar anomalías de nivel del sistema para un grupo de series temporales.
- Cuando una serie temporal individual no ofrece demasiada información y se deben examinar todas las señales para detectar un problema.
- Mantenimiento predictivo de recursos físicos costosos con decenas o cientos de tipos de sensores diferentes que miden diversos aspectos del estado del sistema.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- Python 3.x
- Cuando tenga la suscripción de Azure, cree un recurso de Anomaly Detector en Azure Portal para obtener la clave y el punto de conexión. Espere a que se implemente y seleccione el botón Ir al recurso. Puede usar el plan de tarifa gratis (
F0
) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
Configurar
Instale la biblioteca cliente. Puede instalar la biblioteca cliente con lo siguiente:
pip install --upgrade azure.ai.anomalydetector
Crear una cuenta de almacenamiento
La Anomaly Detector multivariante requiere que el archivo de ejemplo se almacene en Azure Blob Storage.
- Cree una cuenta de Azure Storage.
- Vaya a Access Control (IAM), y seleccione AGREGAR para elegir la opción Adición de asignación de roles.
- Busque el rol de Lector de datos de Storage Blob, seleccione este tipo de cuenta y luego haga clic en Siguiente.
- Seleccione Asignación de acceso a la identidad administrada y seleccione Miembros, luego elija el recurso de Anomaly Detector que ha creado antes y seleccione Revisar y asignar.
Esta configuración a veces puede resultar un poco confusa. Si tiene problemas, se recomienda consultar nuestro ejemplo de Jupyter Notebook multivariante, que le guiará a través de este proceso más en profundidad.
Descarga de datos de ejemplo
En este inicio rápido se usa un archivo para los datos de ejemplo sample_data_5_3000.csv
. Este archivo se puede descargar desde nuestros datos de ejemplo de GitHub
También puede descargar los datos de ejemplo mediante la ejecución de:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Carga de datos de ejemplo en la cuenta de almacenamiento
- Vaya a la cuenta de almacenamiento, seleccione Contenedores y cree un nuevo contenedor.
- Seleccione Cargar y cargar sample_data_5_3000.csv
- Seleccione los datos que ha cargado y copie la dirección URL del blob, ya que debe agregarlos al ejemplo de código en unos pasos más adelante.
Recuperación de la clave y el punto de conexión
Para realizar correctamente una llamada en el servicio Anomaly Detector, necesitará estos valores:
Nombre de la variable | Valor |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Este valor se puede encontrar en la sección Claves y punto de conexión al examinar el recurso en Azure Portal. Punto de conexión de ejemplo: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
El valor de la clave de API se puede encontrar en la sección Claves y punto de conexión al examinar su recurso en Azure Portal. Puede usar KEY1 o KEY2 . |
Vaya al recurso en Azure Portal. El punto de conexión y las claves se pueden encontrar en la sección Administración de recursos. Copie el punto de conexión y la clave de acceso, ya que los necesita para autenticar las llamadas API. Puede usar KEY1
o KEY2
. Tener siempre dos claves permite rotar y regenerar las claves de forma segura sin provocar una interrupción del servicio.
Creación de variables de entorno
Cree y asigne variables de entorno persistentes para la clave y el punto de conexión.
Importante
Si usa una clave de API, almacénela de forma segura en otro lugar, como en Azure Key Vault. No incluya la clave de API directamente en el código ni la exponga nunca públicamente.
Para más información sobre la seguridad de los servicios de AI, consulte Autenticación de solicitudes a los servicios de Azure AI.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Creación de una nueva aplicación de Python
Cree un nuevo archivo Python llamado sample_multivariate_detect.py. A continuación, ábralo en el editor o IDE preferidos.
Reemplace el contenido de sample_multivariate_detect.py por este código. Debe modificar las rutas de acceso de las variables
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
)
)
Ejecución de la aplicación
Ejecute la aplicación con el comando python
en el archivo de inicio rápido.
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
Los resultados de salida se han truncado por motivos de brevedad.
Limpieza de recursos
Si quiere limpiar y quitar un recurso de Anomaly Detector, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él. También puede considerar la posibilidad de eliminar las variables de entorno que creó si ya no tiene intención de usarlas.
Comience a usar la biblioteca cliente multivariante de Anomaly Detector para Java. Siga estos pasos para instalar el inicio del paquete con los algoritmos que proporciona el servicio. Las nuevas API de detección de anomalías multivariante permiten a los desarrolladores integrar fácilmente inteligencia artificial avanzada para detectar anomalías de grupos de métricas, sin necesidad de tener conocimientos de aprendizaje automático ni usar datos etiquetados. Las dependencias y correlaciones entre distintas señales se consideran automáticamente como factores clave. De este modo, podrá proteger de forma proactiva los sistemas complejos frente a errores.
Utilice la biblioteca cliente multivariante de Anomaly Detector para Java con el fin de:
- Detectar anomalías de nivel del sistema para un grupo de series temporales.
- Cuando una serie temporal individual no ofrece demasiada información y se deben examinar todas las señales para detectar un problema.
- Mantenimiento predictivo de recursos físicos costosos con decenas o cientos de tipos de sensores diferentes que miden diversos aspectos del estado del sistema.
Documentación de referencia de la biblioteca | Código fuente de la biblioteca | Paquete (Maven) | Código de ejemplo
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- La versión actual de Java Development Kit (JDK)
- La herramienta de compilación de Gradle u otro administrador de dependencias.
- Cuando tenga la suscripción de Azure, cree un recurso de Anomaly Detector en Azure Portal para obtener la clave y el punto de conexión. Espere a que se implemente y seleccione el botón Ir al recurso.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación a la API Anomaly Detector. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
Puede usar el plan de tarifa gratis (
F0
) para probar el servicio y actualizarlo más adelante a un plan de pago para producción.
- Necesitará la clave y el punto de conexión del recurso que cree para conectar la aplicación a la API Anomaly Detector. En una sección posterior de este mismo inicio rápido pegará la clave y el punto de conexión en el código siguiente.
Puede usar el plan de tarifa gratis (
Instalación
Creación de un proyecto de Gradle
En este inicio rápido se usa el administrador de dependencias Gradle. Puede encontrar más información de la biblioteca cliente en Maven Central Repository.
En una ventana de la consola (como cmd, PowerShell o Bash), cree un directorio para la aplicación y vaya a él.
mkdir myapp && cd myapp
Ejecute el comando gradle init
desde el directorio de trabajo. Este comando creará archivos de compilación esenciales para Gradle, como build.gradle.kts, que se usa en el entorno de ejecución para crear y configurar la aplicación.
gradle init --type basic
Cuando se le solicite que elija un DSL, seleccione Kotlin.
Instalación de la biblioteca cliente
Busque build.gradle.kts y ábralo con el IDE o el editor de texto que prefiera. A continuación, se copia en esta configuración de compilación. Asegúrese de incluir las dependencias del proyecto.
dependencies {
compile("com.azure:azure-ai-anomalydetector")
}
Creación de un archivo Java
Cree una carpeta para la aplicación de ejemplo. En el directorio de trabajo, ejecute el siguiente comando:
mkdir -p src/main/java
Vaya a la nueva carpeta y cree un archivo denominado MetricsAdvisorQuickstarts.java. Ábralo en el editor o el IDE que prefiera y agregue las siguientes instrucciones import
:
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;
Cree variables para el punto de conexión y la clave de Azure del recurso. Cree otra variable para el archivo de datos de ejemplo.
Nota
Siempre tendrá la opción de usar una de estas dos claves. Esto es para permitir la rotación de claves segura. Para este inicio rápido, use la primera clave.
String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";
Importante
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Consulte el artículo sobre seguridad de los servicios de Azure AI para obtener más información.
Para usar las API multivariantes de Anomaly Detector, primero debe entrenar sus propios modelos. Los datos de entrenamiento son un conjunto de varias series temporales que cumplen los siguientes requisitos:
Cada serie temporal debe ser un archivo CSV con dos columnas (solo dos), "timestamp" y "value" (todo en minúsculas) como fila de encabezado. Los valores de "timestamp" deben cumplir la norma ISO 8601; los de "value" pueden ser números enteros o decimales con cualquier número de posiciones decimales. Por ejemplo:
timestamp | value |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3.6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Cada archivo CSV debe tener el nombre de una variable diferente que se usará para el entrenamiento del modelo. Por ejemplo, "temperature.csv" y "humidity.csv". Todos los archivos CSV deben comprimirse en un archivo ZIP sin subcarpetas. El archivo ZIP puede tener el nombre que desee. El archivo ZIP debe cargarse en Azure Blob Storage. Una vez que genere la dirección URL de SAS de blob (firmas de acceso compartido) para el archivo ZIP, se puede usar para el entrenamiento. Consulte este documento para obtener información sobre cómo generar direcciones URL de SAS a partir de Azure Blob Storage.
Ejemplos de código
Estos fragmentos de código muestran cómo realizar las siguientes acciones con la biblioteca cliente de Anomaly Detector para Node.js:
- Autenticar el cliente
- Entrenamiento de un modelo
- Detectar anomalías
- Exportar un modelo
- Eliminar un modelo
Autenticar el cliente
Cree una instancia de un objeto anomalyDetectorClient
con el punto de conexión y las credenciales.
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();
Entrenamiento de un modelo
Construcción de un resultado del modelo y entrenamiento del modelo
En primer lugar, es necesario construir una solicitud de modelo. Asegúrese de que la hora de inicio y finalización se correspondan con su origen de datos.
Para usar las API multivariante de Anomaly Detector, es necesario entrenar nuestro modelo antes de usar la detección. Los datos usados para el entrenamiento son un lote de series temporales; cada serie temporal debe estar en un archivo CSV con solo dos columnas, "timestamp" y "value" (los nombres de columna deben ser exactamente iguales). Cada archivo CSV debe tener el nombre de cada variable para la serie temporal. Todas las series temporales deben comprimirse en un archivo ZIP y cargarse en Azure Blob Storage. No existe ningún requisito para el nombre del archivo ZIP. Como alternativa, se puede incluir un archivo meta.json en el archivo ZIP si desea que el nombre de la variable sea diferente al nombre del archivo .zip. Una vez que se genera una URL de SAS (firmas de acceso compartido) de blob, podemos usar la dirección URL para el archivo ZIP para el entrenamiento.
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());
}
}
Detección de anomalías
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());
}
}
Exportación de un modelo
Nota
El comando de exportación está diseñado para permitir la ejecución de modelos multivariados de Anomaly Detector en un entorno en contenedor. Actualmente, no se admite para el multivariado, pero se agregará una compatibilidad en el futuro.
Para exportar el modelo entrenado, use la funció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));
Eliminación del modelo
Para eliminar un modelo existente que esté disponible para el recurso actual, use la función deleteMultivariateModelWithResponse
.
Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);
Ejecución de la aplicación
Puede compilar la aplicación con:
gradle build
Ejecución de la aplicación
Antes de ejecutarla, puede resultar útil comprobar el código con el código de ejemplo completo.
Ejecute la aplicación con el objetivo run
:
gradle run
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción de servicios de Azure AI, puede eliminar el recurso o el grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a dicho grupo.