Inicio rápido: Uso de las API REST o las bibliotecas cliente para personalizar una solución
Introducción a las API REST o las bibliotecas cliente de Metrics Advisor. Siga estos pasos para instalar el paquete y probar el código de ejemplo para realizar tareas básicas.
Use Metrics Advisor para realizar lo siguiente:
- Incorporación de una fuente de distribución de datos desde un origen de datos
- Comprobación del estado de la ingesta
- Configuración de la detección y las alertas
- Consulta de los resultados de la detección de anomalías
- Diagnóstico de las anomalías
Documentación de referencia | Código fuente de la biblioteca | Paquete (NuGet) | Ejemplos
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- La versión actual de .NET Core.
- Una vez que tenga la suscripción de Azure, create a Metrics Advisor resource en Azure Portal para implementar la instancia de Metrics Advisor.
- Su propia base de datos SQL con datos de series temporales.
Sugerencia
- Puede encontrar ejemplos de Metrics Advisor de .NET en GitHub.
- El recurso de Metrics Advisor puede tardar entre 10 y 30 minutos en implementar una instancia de servicio para que pueda usarla. Haga clic en Ir al recurso una vez que se implemente correctamente. Después de la implementación, puede empezar a usar la instancia de Metrics Advisor con el portal web y la API de REST.
- Puede encontrar la dirección URL de la API de REST en Azure Portal, en la sección Información general de su recurso. Tendrá este aspecto:
https://<instance-name>.cognitiveservices.azure.com/
Instalación
Instalación de la biblioteca cliente
Después de crear un proyecto, instale la biblioteca cliente; para ello, haga clic con el botón derecho en la solución del proyecto en el Explorador de soluciones y seleccione Administrar paquetes NuGet. En el administrador de paquetes que se abre, seleccione Examinar Incluir versión preliminar y busque Azure.AI.MetricsAdvisor. Seleccione la versión 1.0.0 e Instalar.
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 metrics-advisor-quickstart. Este comando crea un sencillo proyecto de C#, "Hola mundo", con un solo archivo de origen: program.cs.
dotnet new console -n metrics-advisor-quickstart
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
Si usa un IDE que no sea Visual Studio, puede instalar la biblioteca cliente de Metrics Advisor para .NET con el siguiente comando:
dotnet add package Azure.AI.MetricsAdvisor --version 1.0.0
Sugerencia
¿Desea ver todo el archivo de código de inicio rápido de una vez? Puede encontrarlo en GitHub, que contiene los ejemplos de código de este inicio rápido.
En el directorio del proyecto, abra el archivo program.cs y agregue lo siguiente mediante directivas using:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure.AI.MetricsAdvisor.Administration;
using Azure.AI.MetricsAdvisor;
using Azure.AI.MetricsAdvisor.Models;
En el método Main() de la aplicación, agregue llamadas para los métodos que se usan en este inicio rápido. Las creará más adelante.
static void Main(string[] args){
// You will create the below methods later in the quickstart
exampleTask1();
}
Modelo de objetos
Las siguientes clases controlan algunas de las características principales del SDK de C# para Metrics Advisor.
| Nombre | Descripción |
|---|---|
| MetricsAdvisorClient | Se usa para: - Enumerar pendientes - Enumerar la causa raíz de los incidentes - Recuperar los datos de series temporales originales y los datos de series temporales enriquecidos por el servicio. - Enumerar alertas - Agregar comentarios para optimizar el modelo |
| MetricsAdvisorAdministrationClient | Permite: - Administrar fuentes de distribución de datos - Configurar la detección de anomalías - Configurar las alertas de anomalías - Administrar enlaces |
| DataFeed | Lo que Metrics Advisor ingiere de su origen de datos. DataFeed contiene filas de: - Marcas de tiempo - Cero o más dimensiones - Una o varias medidas |
| DataFeedMetric | DataFeedMetric es una medida cuantificable que se usa para supervisar y evaluar el estado de un proceso empresarial específico. Puede ser una combinación de varios valores de serie temporal divididos en dimensiones. Por ejemplo, una métrica de mantenimiento de la Web podría contener dimensiones para recuento de usuarios y el mercado es-es. |
Ejemplos de código
Estos fragmentos de código muestran cómo realizar las siguientes tareas con la biblioteca cliente de Metrics Advisor para .NET:
- Autenticar el cliente
- Adición de una fuente de distribución de datos
- Comprobación del estado de la ingesta
- Configuración de la detección de anomalías
- Crear un enlace
- Crear una configuración de alertas
- Consultar la alerta
Autenticar el cliente
En la clase Program de la aplicación, cree variables para las claves y el punto de conexión del recurso.
Importante
Vaya a Azure Portal. Si el recurso de Metrics Advisor que creó en la sección Requisitos previos se implementó correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Sus claves de suscripción y su punto de conexión se encuentran en la página Key and Endpoint (Clave y punto de conexión) del recurso, en Administración de recursos.
Para recuperar la clave de API, debe ir a https://metricsadvisor.azurewebsites.net. Seleccione los valores apropiados: Directory (Directorio), Subscriptions (Suscripciones) y Workspace (Área de trabajo) del recurso y seleccione Comenzar. A continuación, podrá recuperar las claves de API de https://metricsadvisor.azurewebsites.net/api-key.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Para más información, consulte el artículo sobre la seguridad de Cognitive Services.
Una vez que tenga la suscripción y las claves de API, cree MetricsAdvisorKeyCredential. Con el punto de conexión y la credencial de la clave puede crear MetricsAdvisorClient:
string endpoint = "<endpoint>";
string subscriptionKey = "<subscriptionKey>";
string apiKey = "<apiKey>";
var credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
var client = new MetricsAdvisorClient(new Uri(endpoint), credential);
También puede crear una instancia de MetricsAdvisorAdministrationClient para realizar operaciones administrativas:
string endpoint = "<endpoint>";
string subscriptionKey = "<subscriptionKey>";
string apiKey = "<apiKey>";
var credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
var adminClient = new MetricsAdvisorAdministrationClient(new Uri(endpoint), credential);
Adición de una fuente de distribución de datos
Metrics Advisor admite varios tipos de orígenes de datos. En este ejemplo se ilustrará una instancia de DataFeed que extrae datos de un servidor de SQL Server.
Reemplace connection_String por su propia cadena de conexión de SQL Server y reemplace query por una consulta que devuelva los datos en una sola marca de tiempo. También tendrá que ajustar los valores de DataFeedMetric y DataFeedDimension en función de los datos personalizados.
Importante
La consulta debe devolver como máximo un registro para cada combinación de dimensión, en cada marca de tiempo. Y todos los registros devueltos por la consulta deben tener las mismas marcas de tiempo. El asesor de métricas ejecutará esta consulta para cada marca de tiempo que deba ingerir los datos. Consulte Tutorial: Escritura de una consulta válida para incorporar datos de métricas para más información y ejemplos.
string sqlServerConnectionString = "<connection_String>";
string sqlServerQuery = "<query>";
var dataFeedName = "Sample data feed";
var dataFeedSource = new SqlServerDataFeedSource(sqlServerConnectionString, sqlServerQuery);
var dataFeedGranularity = new DataFeedGranularity(DataFeedGranularityType.Daily);
var dataFeedMetrics = new List<DataFeedMetric>()
{
new DataFeedMetric("cost"),
new DataFeedMetric("revenue")
};
var dataFeedDimensions = new List<DataFeedDimension>()
{
new DataFeedDimension("category"),
new DataFeedDimension("city")
};
var dataFeedSchema = new DataFeedSchema(dataFeedMetrics)
{
DimensionColumns = dataFeedDimensions
};
var ingestionStartTime = DateTimeOffset.Parse("2020-01-01T00:00:00Z");
var dataFeedIngestionSettings = new DataFeedIngestionSettings(ingestionStartTime);
var dataFeed = new DataFeed()
{
Name = dataFeedName,
DataSource = dataFeedSource,
Granularity = dataFeedGranularity,
Schema = dataFeedSchema,
IngestionSettings = dataFeedIngestionSettings,
};
Response<string> response = await adminClient.CreateDataFeedAsync(dataFeed);
string dataFeedId = response.Value;
Console.WriteLine($"Data feed ID: {dataFeedId}");
// Note that only the ID of the data feed is known at this point. You can perform another
// service call to GetDataFeedAsync or GetDataFeed to get more information, such as status,
// created time, the list of administrators, or the metric IDs.
Response<DataFeed> response = await adminClient.GetDataFeedAsync(dataFeedId);
DataFeed dataFeed = response.Value;
Console.WriteLine($"Data feed status: {dataFeed.Status.Value}");
Console.WriteLine($"Data feed created time: {dataFeed.CreatedTime.Value}");
Console.WriteLine($"Data feed administrators:");
foreach (string admin in dataFeed.AdministratorEmails)
{
Console.WriteLine($" - {admin}");
}
Console.WriteLine($"Metric IDs:");
foreach (DataFeedMetric metric in dataFeed.Schema.MetricColumns)
{
Console.WriteLine($" - {metric.MetricName}: {metric.MetricId}");
}
Comprobación del estado de la ingesta
Compruebe el estado de la ingesta de una instancia de DataFeed creada anteriormente
string dataFeedId = "<dataFeedId>";
var startTime = DateTimeOffset.Parse("2020-01-01T00:00:00Z");
var endTime = DateTimeOffset.Parse("2020-09-09T00:00:00Z");
var options = new GetDataFeedIngestionStatusesOptions(startTime, endTime)
{
MaxPageSize = 5
};
Console.WriteLine("Ingestion statuses:");
Console.WriteLine();
int statusCount = 0;
await foreach (DataFeedIngestionStatus ingestionStatus in adminClient.GetDataFeedIngestionStatusesAsync(dataFeedId, options))
{
Console.WriteLine($"Timestamp: {ingestionStatus.Timestamp}");
Console.WriteLine($"Status: {ingestionStatus.Status}");
Console.WriteLine($"Service message: {ingestionStatus.Message}");
Console.WriteLine();
// Print at most 5 statuses.
if (++statusCount >= 5)
{
break;
}
}
Configuración de la detección de anomalías
Cree una configuración de detección de anomalías para indicar al servicio qué puntos de datos deberían considerarse anomalías.
string metricId = "<metricId>";
string configurationName = "Sample anomaly detection configuration";
var hardThresholdSuppressCondition = new SuppressCondition(1, 100);
var hardThresholdCondition = new HardThresholdCondition(AnomalyDetectorDirection.Down, hardThresholdSuppressCondition)
{
LowerBound = 5.0
};
var smartDetectionSuppressCondition = new SuppressCondition(4, 50);
var smartDetectionCondition = new SmartDetectionCondition(10.0, AnomalyDetectorDirection.Up, smartDetectionSuppressCondition);
var detectionCondition = new MetricWholeSeriesDetectionCondition()
{
HardThresholdCondition = hardThresholdCondition,
SmartDetectionCondition = smartDetectionCondition,
CrossConditionsOperator = DetectionConditionsOperator.Or
};
var detectionConfiguration = new AnomalyDetectionConfiguration(metricId, configurationName, detectionCondition);
Response<string> response = await adminClient.CreateDetectionConfigurationAsync(detectionConfiguration);
string detectionConfigurationId = response.Value;
Console.WriteLine($"Anomaly detection configuration ID: {detectionConfigurationId}");
Creación de un enlace
Metrics Advisor admite las clases EmailNotificationHook y WebNotificationHook como medio de suscribirse a notificaciones de alertas. En este ejemplo ilustraremos cómo crear EmailNotificationHook. Para empezar a obtener notificaciones, es preciso que pase el enlace a una configuración de aleta de anomalía. Para más información, consulte la creación de una configuración de alerta de anomalías de ejemplo.
string hookName = "Sample hook";
var emailsToAlert = new List<string>()
{
"email1@sample.com",
"email2@sample.com"
};
var emailHook = new EmailNotificationHook(hookName, emailsToAlert);
Response<string> response = await adminClient.CreateHookAsync(emailHook);
string hookId = response.Value;
Console.WriteLine($"Hook ID: {hookId}");
Creación de una configuración de alertas
Cree AnomalyAlertConfiguration para indicar al servicio qué anomalías deben desencadenar alertas.
string hookId = "<hookId>";
string anomalyDetectionConfigurationId = "<anomalyDetectionConfigurationId>";
string configurationName = "Sample anomaly alert configuration";
var idsOfHooksToAlert = new List<string>() { hookId };
var scope = MetricAnomalyAlertScope.GetScopeForWholeSeries();
var metricAlertConfigurations = new List<MetricAnomalyAlertConfiguration>()
{
new MetricAnomalyAlertConfiguration(anomalyDetectionConfigurationId, scope)
};
AnomalyAlertConfiguration alertConfiguration = new AnomalyAlertConfiguration(configurationName, idsOfHooksToAlert, metricAlertConfigurations);
Response<string> response = await adminClient.CreateAlertConfigurationAsync(alertConfiguration);
string alertConfigurationId = response.Value;
Console.WriteLine($"Alert configuration ID: {alertConfigurationId}");
Consulta de la alerta
Examine las alertas creadas por una determinada configuración de alertas de anomalías.
string anomalyAlertConfigurationId = "<anomalyAlertConfigurationId>";
var startTime = DateTimeOffset.Parse("2020-01-01T00:00:00Z");
var endTime = DateTimeOffset.UtcNow;
var options = new GetAlertsOptions(startTime, endTime, AlertQueryTimeMode.AnomalyTime)
{
MaxPageSize = 5
};
int alertCount = 0;
await foreach (AnomalyAlert alert in client.GetAlertsAsync(anomalyAlertConfigurationId, options))
{
Console.WriteLine($"Alert created at: {alert.CreatedTime}");
Console.WriteLine($"Alert at timestamp: {alert.Timestamp}");
Console.WriteLine($"Id: {alert.Id}");
Console.WriteLine();
// Print at most 5 alerts.
if (++alertCount >= 5)
{
break;
}
}
Una vez que conozca el identificador de una alerta, enumere las anomalías que ha desencadenado dicha alerta.
string alertConfigurationId = "<alertConfigurationId>";
string alertId = "<alertId>";
var options = new GetAnomaliesForAlertOptions() { MaxPageSize = 3 };
int anomalyCount = 0;
await foreach (DataPointAnomaly anomaly in client.GetAnomaliesAsync(alertConfigurationId, alertId, options))
{
Console.WriteLine($"Anomaly detection configuration ID: {anomaly.AnomalyDetectionConfigurationId}");
Console.WriteLine($"Metric ID: {anomaly.MetricId}");
Console.WriteLine($"Anomaly at timestamp: {anomaly.Timestamp}");
Console.WriteLine($"Anomaly detected at: {anomaly.CreatedTime}");
Console.WriteLine($"Status: {anomaly.Status}");
Console.WriteLine($"Severity: {anomaly.Severity}");
Console.WriteLine("Series key:");
foreach (KeyValuePair<string, string> keyValuePair in anomaly.SeriesKey.AsDictionary())
{
Console.WriteLine($" Dimension '{keyValuePair.Key}': {keyValuePair.Value}");
}
Console.WriteLine();
// Print at most 3 anomalies.
if (++anomalyCount >= 3)
{
break;
}
}
Ejecución de la aplicación
Ejecute la aplicación desde el directorio de la aplicación con el comando dotnet run.
dotnet run
Documentación de referencia | Código fuente de la biblioteca | Artifact (Maven) | Ejemplos
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.
- Una vez que tenga la suscripción de Azure, create a Metrics Advisor resource en Azure Portal para implementar la instancia de Metrics Advisor.
- Su propia base de datos SQL con datos de series temporales.
Sugerencia
- Puede encontrar ejemplos de Metrics Advisor de Java en GitHub.
- El recurso de Metrics Advisor puede tardar entre 10 y 30 minutos en implementar una instancia de servicio para que pueda usarla. Haga clic en Ir al recurso una vez que se implemente correctamente. Después de la implementación, puede empezar a usar la instancia de Metrics Advisor con el portal web y la API de REST.
- Puede encontrar la dirección URL de la API de REST en Azure Portal, en la sección Información general de su recurso. Tendrá este aspecto:
https://<instance-name>.cognitiveservices.azure.com/
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 runtime 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-metricsadvisor:1.0.0")
}
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:
Sugerencia
¿Desea ver todo el archivo de código de inicio rápido de una vez? Puede encontrarlo en GitHub, que contiene los ejemplos de código de este inicio rápido.
En la clase MetricsAdvisorQuickstarts de la aplicación, cree variables para el punto de conexión y la clave del recurso.
Importante
Vaya a Azure Portal. Si el recurso de Metrics Advisor que creó en la sección Requisitos previos se implementó correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Sus claves de suscripción y su punto de conexión se encuentran en la página Key and Endpoint (Clave y punto de conexión) del recurso, en Administración de recursos.
Para recuperar la clave de API, debe ir a https://metricsadvisor.azurewebsites.net. Seleccione los valores apropiados: Directory (Directorio), Subscriptions (Suscripciones) y Workspace (Área de trabajo) del recurso y seleccione Comenzar. A continuación, podrá recuperar las claves de API de https://metricsadvisor.azurewebsites.net/api-key.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Para más información, consulte el artículo sobre la seguridad de Cognitive Services.
private static String SUBSCRIPTION_KEY = "<replace-with-your-metrics-advisor-subscription-key-here>";
private static String API_KEY = "<replace-with-your-metrics-advisor-api-key-here>"
private static String ENDPOINT = "<replace-with-your-metrics-advisor-endpoint-here>";
En el método Main() de la aplicación, agregue llamadas para los métodos que se usan en este inicio rápido. Las creará más adelante.
static void Main(string[] args){
// You will create the below methods later in the quickstart
exampleTask1();
}
Modelo de objetos
Las siguientes clases controlan algunas de las características principales del SDK de Java para Metrics Advisor.
| Nombre | Descripción |
|---|---|
| MetricsAdvisorClient | Se usa para: - Enumerar incidentes anómalos - Enumerar la causa raíz de los incidentes - Recuperar los datos de series temporales originales y los datos de series temporales enriquecidos por el servicio. - Enumerar alertas - Agregar comentarios para optimizar el modelo |
| MetricsAdvisorAdministrationClient | Permite: - Administrar fuentes de distribución de datos - Configurar la detección de anomalías - Configurar las alertas de anomalías - Administrar enlaces |
| DataFeed | Lo que Metrics Advisor ingiere de su origen de datos. DataFeed contiene filas de: - Marcas de tiempo - Cero o más dimensiones - Una o varias medidas |
| DataFeedMetric | DataFeedMetric es una medida cuantificable que se usa para supervisar y evaluar el estado de un proceso empresarial específico. Puede ser una combinación de varios valores de serie temporal divididos en dimensiones. Por ejemplo, una métrica de mantenimiento de la Web podría contener dimensiones para recuento de usuarios y el mercado es-es. |
Ejemplos de código
Estos fragmentos de código muestran cómo realizar las siguientes tareas con la biblioteca cliente de Metrics Advisor para Java:
- Autenticar el cliente
- Adición de una fuente de distribución de datos
- Comprobación del estado de la ingesta
- Configuración de la detección de anomalías
- Crear un enlace
- Crear una configuración de alertas
- Consultar la alerta
Autenticar el cliente
Creación de un cliente de Metrics Advisor mediante MetricsAdvisorKeyCredential
MetricsAdvisorKeyCredential credential = new MetricsAdvisorKeyCredential(SUBSCRIPTION_KEY, API_KEY);
MetricsAdvisorClient metricsAdvisorClient = new MetricsAdvisorClientBuilder()
.endpoint(ENDPOINT)
.credential(credential)
.buildClient();
Creación de un cliente de Metrics Administration mediante MetricsAdvisorKeyCredential
MetricsAdvisorKeyCredential credential = new MetricsAdvisorKeyCredential(SUBSCRIPTION_KEY, API_KEY);
MetricsAdvisorAdministrationClient metricsAdvisorAdministrationClient =
new MetricsAdvisorAdministrationClientBuilder()
.endpoint(ENDPOINT)
.credential(credential)
.buildClient();
Adición de una fuente de distribución de datos
Reemplace sql_server_connection_string por su propia cadena de conexión de SQL Server y reemplace query por una consulta que devuelva los datos en una sola marca de tiempo. También tendrá que ajustar los valores de DataFeedMetric y DataFeedDimension en función de los datos personalizados.
Importante
La consulta debe devolver como máximo un registro para cada combinación de dimensión, en cada marca de tiempo. Y todos los registros devueltos por la consulta deben tener las mismas marcas de tiempo. El asesor de métricas ejecutará esta consulta para cada marca de tiempo que deba ingerir los datos. Consulte Tutorial: Escritura de una consulta válida para incorporar datos de métricas para más información y ejemplos.
DataFeed dataFeed = new DataFeed()
.setName("dataFeedName")
.setSource(new MySqlDataFeedSource("conn-string", "query"))
.setGranularity(new DataFeedGranularity().setGranularityType(DataFeedGranularityType.DAILY))
.setSchema(new DataFeedSchema(
Arrays.asList(
new DataFeedMetric("cost"),
new DataFeedMetric("revenue")
)).setDimensions(
Arrays.asList(
new DataFeedDimension("city"),
new DataFeedDimension("category")
))
)
.setIngestionSettings(new DataFeedIngestionSettings(OffsetDateTime.parse("2020-01-01T00:00:00Z")))
.setOptions(new DataFeedOptions()
.setDescription("data feed description")
.setRollupSettings(new DataFeedRollupSettings()
.setRollupType(DataFeedRollupType.AUTO_ROLLUP)));
final DataFeed createdSqlDataFeed = metricsAdvisorAdminClient.createDataFeed(dataFeed);
System.out.printf("Data feed Id : %s%n", createdSqlDataFeed.getId());
System.out.printf("Data feed name : %s%n", createdSqlDataFeed.getName());
System.out.printf("Is the query user is one of data feed administrator : %s%n", createdSqlDataFeed.isAdmin());
System.out.printf("Data feed created time : %s%n", createdSqlDataFeed.getCreatedTime());
System.out.printf("Data feed granularity type : %s%n",
createdSqlDataFeed.getGranularity().getGranularityType());
System.out.printf("Data feed granularity value : %d%n",
createdSqlDataFeed.getGranularity().getCustomGranularityValue());
System.out.println("Data feed related metric Ids:");
createdSqlDataFeed.getMetricIds().forEach(System.out::println);
System.out.printf("Data feed source type: %s%n", createdSqlDataFeed.getSourceType());
if (SQL_SERVER_DB == createdSqlDataFeed.getSourceType()) {
System.out.printf("Data feed sql server query: %s%n",
((SqlServerDataFeedSource) createdSqlDataFeed.getSource()).getQuery());
}
Comprobación del estado de la ingesta
En este ejemplo se comprueba el estado de la ingesta de un origen de una fuente de distribución de datos proporcionado previamente.
String dataFeedId = "<use-the-data-feed-id-from-createdSqlDataFeed.getId()";
metricsAdvisorAdminClient.listDataFeedIngestionStatus(
dataFeedId,
new ListDataFeedIngestionOptions(
OffsetDateTime.parse("2020-01-01T00:00:00Z"),
OffsetDateTime.parse("2020-09-09T00:00:00Z"))
).forEach(dataFeedIngestionStatus -> {
System.out.printf("Message : %s%n", dataFeedIngestionStatus.getMessage());
System.out.printf("Timestamp value : %s%n", dataFeedIngestionStatus.getTimestamp());
System.out.printf("Status : %s%n", dataFeedIngestionStatus.getStatus());
});
Configuración de la detección de anomalías
En este ejemplo se muestra la forma en que un usuario puede configurar una configuración de detección de anomalías para sus datos.
String metricId = "<metric-id-from-adding-data-feed>";
ChangeThresholdCondition changeThresholdCondition = new ChangeThresholdCondition(
20,
10,
true,
AnomalyDetectorDirection.BOTH,
new SuppressCondition(1, 2));
HardThresholdCondition hardThresholdCondition = new HardThresholdCondition(
AnomalyDetectorDirection.DOWN,
new SuppressCondition(1, 1))
.setLowerBound(5.0);
SmartDetectionCondition smartDetectionCondition = new SmartDetectionCondition(
10.0,
AnomalyDetectorDirection.UP,
new SuppressCondition(1, 2));
final AnomalyDetectionConfiguration anomalyDetectionConfiguration =
metricsAdvisorAdminClient.createMetricAnomalyDetectionConfig(
metricId,
new AnomalyDetectionConfiguration("My dataPoint anomaly detection configuration")
.setDescription("anomaly detection config description")
.setWholeSeriesDetectionCondition(
new MetricWholeSeriesDetectionCondition()
.setChangeThresholdCondition(changeThresholdCondition)
.setHardThresholdCondition(hardThresholdCondition)
.setSmartDetectionCondition(smartDetectionCondition)
.setConditionOperator(DetectionConditionOperator.OR))
);
Creación de un enlace
En este ejemplo se crea un enlace de correo electrónico que recibe alertas de incidentes de anomalías.
NotificationHook emailNotificationHook = new EmailNotificationHook("email Hook")
.setDescription("my email Hook")
.addEmailToAlert("alertme@alertme.com")
.setExternalLink("https://example.com/handleAlerts"); // you must enter a valid webhook url to post the alert payload
final NotificationHook notificationHook = metricsAdvisorAdminClient.createHook(emailNotificationHook);
EmailNotificationHook createdEmailHook = (EmailNotificationHook) notificationHook;
System.out.printf("Email Hook Id: %s%n", createdEmailHook.getId());
System.out.printf("Email Hook name: %s%n", createdEmailHook.getName());
System.out.printf("Email Hook description: %s%n", createdEmailHook.getDescription());
System.out.printf("Email Hook external Link: %s%n", createdEmailHook.getExternalLink());
System.out.printf("Email Hook emails to alert: %s%n",
String.join(",", createdEmailHook.getEmailsToAlert()));
Creación de una configuración de alertas
En este ejemplo se muestra la forma en que un usuario puede configurar una configuración de alertas para las anomalías detectadas en sus datos.
String detectionConfigurationId1 = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
String detectionConfigurationId2 = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
String hookId1 = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
String hookId2 = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
final AnomalyAlertConfiguration anomalyAlertConfiguration
= metricsAdvisorAdminClient.createAnomalyAlertConfig(
new AnomalyAlertConfiguration("My anomaly alert config name")
.setDescription("alert config description")
.setMetricAlertConfigurations(
Arrays.asList(
new MetricAnomalyAlertConfiguration(detectionConfigurationId1,
MetricAnomalyAlertScope.forWholeSeries()),
new MetricAnomalyAlertConfiguration(detectionConfigurationId2,
MetricAnomalyAlertScope.forWholeSeries())
.setAlertConditions(new MetricAnomalyAlertConditions()
.setSeverityRangeCondition(new SeverityCondition(AnomalySeverity.HIGH,
AnomalySeverity.HIGH)))
))
.setCrossMetricsOperator(MetricAnomalyAlertConfigurationsOperator.AND)
.setIdOfHooksToAlert(Arrays.asList(hookId1, hookId2)));
Consulta de la alerta
En este ejemplo se muestra la forma en que un usuario puede consultar las alertas desencadenadas para una configuración de detección de alertas y obtener anomalías para esa alerta.
String alertConfigurationId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
final OffsetDateTime startTime = OffsetDateTime.parse("2020-01-01T00:00:00Z");
final OffsetDateTime endTime = OffsetDateTime.parse("2020-09-09T00:00:00Z");
metricsAdvisorClient.listAlerts(
alertConfigurationId,
startTime, endTime)
.forEach(alert -> {
System.out.printf("AnomalyAlert Id: %s%n", alert.getId());
System.out.printf("AnomalyAlert created on: %s%n", alert.getCreatedTime());
// List anomalies for returned alerts
metricsAdvisorClient.listAnomaliesForAlert(
alertConfigurationId,
alert.getId())
.forEach(anomaly -> {
System.out.printf("DataPoint Anomaly was created on: %s%n", anomaly.getCreatedTime());
System.out.printf("DataPoint Anomaly severity: %s%n", anomaly.getSeverity().toString());
System.out.printf("DataPoint Anomaly status: %s%n", anomaly.getStatus());
System.out.printf("DataPoint Anomaly related series key: %s%n", anomaly.getSeriesKey().asMap());
});
});
Puede compilar la aplicación con:
gradle build
Ejecución de la aplicación
Ejecute la aplicación con el objetivo run:
gradle run
Documentación de referencia | Código fuente de la biblioteca | Paquete (npm) | Ejemplos
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- La versión actual de Node.js
- Una vez que tenga la suscripción de Azure, create a Metrics Advisor resource en Azure Portal para implementar la instancia de Metrics Advisor.
- Su propia base de datos SQL con datos de series temporales.
Sugerencia
- Puede encontrar ejemplos de Metrics Advisor de JavaScript en GitHub.
- El recurso de Metrics Advisor puede tardar entre 10 y 30 minutos en implementar una instancia de servicio para que pueda usarla. Haga clic en Ir al recurso una vez que se implemente correctamente. Después de la implementación, puede empezar a usar la instancia de Metrics Advisor con el portal web y la API de REST.
- Puede encontrar la dirección URL de la API de REST en Azure Portal, en la sección Información general de su recurso. Tendrá este aspecto:
https://<instance-name>.cognitiveservices.azure.com/
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
Instalación de la biblioteca cliente
Instale el paquete NPM @azure/ai-metrics-advisor:
npm install @azure/ai-metrics-advisor
el archivo package.json de la aplicación se actualizará con las dependencias.
Cree un archivo llamado index.js e importe las bibliotecas siguientes:
Sugerencia
¿Desea ver todo el archivo de código de inicio rápido de una vez? Puede encontrarlo en GitHub, que contiene los ejemplos de código de este inicio rápido.
Cree variables para el punto de conexión y la clave de Azure del recurso.
Importante
Vaya a Azure Portal. Si el recurso de Metrics Advisor que creó en la sección Requisitos previos se implementó correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Sus claves de suscripción y su punto de conexión se encuentran en la página Key and Endpoint (Clave y punto de conexión) del recurso, en Administración de recursos.
Para recuperar la clave de API, debe ir a https://metricsadvisor.azurewebsites.net. Seleccione los valores apropiados: Directory (Directorio), Subscriptions (Suscripciones) y Workspace (Área de trabajo) del recurso y seleccione Comenzar. A continuación, podrá recuperar las claves de API de https://metricsadvisor.azurewebsites.net/api-key.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Para más información, consulte el artículo sobre la seguridad de Cognitive Services.
subscriptionKey = "<paste-your-metrics-advisor-key-here>";
apiKey ="<paste-your-metrics-advisor-api-key-here>";
endpoint = "<paste-your-metrics-advisor-endpoint-here>";
Modelo de objetos
Las siguientes clases e interfaces controlan algunas de las características principales del SDK de JavaScript para Metrics Advisor.
| Nombre | Descripción |
|---|---|
| MetricsAdvisorClient | Se usa para: - Enumerar pendientes - Enumerar la causa raíz de los incidentes - Recuperar los datos de series temporales originales y los datos de series temporales enriquecidos por el servicio. - Enumerar alertas - Agregar comentarios para optimizar el modelo |
| MetricsAdvisorAdministrationClient | Permite: - Administrar fuentes de distribución de datos -Crear, configurar, recuperar, enumerar y eliminar configuraciones de alertas de anomalías - Administrar enlaces |
| DataFeed | Lo que Metrics Advisor ingiere de su origen de datos. DataFeed contiene filas de: - Marcas de tiempo - Cero o más dimensiones - Una o varias medidas |
| DataFeedMetric | DataFeedMetric es una medida cuantificable que se usa para supervisar y evaluar el estado de un proceso empresarial específico. Puede ser una combinación de varios valores de serie temporal divididos en dimensiones. Por ejemplo, una métrica de mantenimiento de la Web podría contener dimensiones para recuento de usuarios y el mercado es-es. |
Ejemplos de código
Estos fragmentos de código muestran cómo realizar las siguientes tareas con la biblioteca cliente de Metrics Advisor para JavaScript:
- Autenticar el cliente
- Adición de una fuente de distribución de datos
- Comprobar el estado de la ingesta
- Configurar la detección de anomalías
- Crear un enlace
- Crear una configuración de alertas
- Consultar la alerta
Autenticar el cliente
Una vez que tenga las dos claves y la dirección del punto de conexión, puede usar la clase MetricsAdvisorKeyCredential para autenticar a los clientes como se indica a continuación:
const {
MetricsAdvisorKeyCredential,
MetricsAdvisorClient,
MetricsAdvisorAdministrationClient
} = require("@azure/ai-metrics-advisor");
const credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
const client = new MetricsAdvisorClient(endpoint, credential);
const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential);
Adición de una fuente de distribución de datos
Metrics Advisor admite la conexión de distintos tipos de orígenes de datos. Este es un ejemplo para ingerir datos de SQL Server.
Reemplace sql_server_connection_string por su propia cadena de conexión de SQL Server y reemplace query por una consulta que devuelva los datos en una sola marca de tiempo. También tendrá que ajustar los valores de metric y dimension en función de los datos personalizados.
Importante
La consulta debe devolver como máximo un registro para cada combinación de dimensión, en cada marca de tiempo. Y todos los registros devueltos por la consulta deben tener las mismas marcas de tiempo. El asesor de métricas ejecutará esta consulta para cada marca de tiempo que deba ingerir los datos. Consulte Tutorial: Escritura de una consulta válida para incorporar datos de métricas para más información y ejemplos.
const {
MetricsAdvisorKeyCredential,
MetricsAdvisorAdministrationClient
} = require("@azure/ai-metrics-advisor");
async function main() {
const subscriptionKey = "<paste-your-metrics-advisor-key-here>";
const apiKey ="<paste-your-metrics-advisor-api-key-here>";
const endpoint = "<paste-your-metrics-advisor-endpoint-here>";
const sqlServerConnectionString ="<sql_server_connection_string>";
const sqlServerQuery ="<query>";
const credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential);
const created = await createDataFeed(adminClient, sqlServerConnectionString, sqlServerQuery);
console.log(`Data feed created: ${created.id}`);
}
async function createDataFeed(adminClient, sqlServerConnectionString, sqlServerQuery) {
console.log("Creating Datafeed...");
const dataFeed = {
name: "test_datafeed_" + new Date().getTime().toString(),
source: {
dataSourceType: "SqlServer",
dataSourceParameter: {
connectionString: sqlServerConnectionString,
query: sqlServerQuery
}
},
granularity: {
granularityType: "Daily"
},
schema: {
metrics: [
{
name: "revenue",
displayName: "revenue",
description: "Metric1 description"
},
{
name: "cost",
displayName: "cost",
description: "Metric2 description"
}
],
dimensions: [
{ name: "city", displayName: "city display" },
{ name: "category", displayName: "category display" }
],
timestampColumn: null
},
ingestionSettings: {
ingestionStartTime: new Date(Date.UTC(2020, 5, 1)),
ingestionStartOffsetInSeconds: 0,
dataSourceRequestConcurrency: -1,
ingestionRetryDelayInSeconds: -1,
stopRetryAfterInSeconds: -1
},
rollupSettings: {
rollupType: "AutoRollup",
rollupMethod: "Sum",
rollupIdentificationValue: "__CUSTOM_SUM__"
},
missingDataPointFillSettings: {
fillType: "SmartFilling"
},
accessMode: "Private",
admins: ["xyz@example.com"]
};
const result = await adminClient.createDataFeed(dataFeed);
return result;
}
Comprobación del estado de la ingesta
Tras iniciar la ingesta de datos, podemos comprobar el estado de la misma.
const {
MetricsAdvisorKeyCredential,
MetricsAdvisorAdministrationClient
} = require("@azure/ai-metrics-advisor");
async function main() {
// You will need to set these environment variables or edit the following values
const endpoint = "<service endpoint>";
const subscriptionKey = "<subscription key>";
const apiKey = "<api key>";
const dataFeedId = "<data feed id>";
const credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential);
await checkIngestionStatus(
adminClient,
dataFeedId,
new Date(Date.UTC(2020, 8, 1)),
new Date(Date.UTC(2020, 8, 12))
);
}
async function checkIngestionStatus(adminClient, datafeedId, startTime, endTime) {
// This shows how to use for-await-of syntax to list status
console.log("Checking ingestion status...");
const iterator = adminClient.listDataFeedIngestionStatus(datafeedId, startTime, endTime);
for await (const status of iterator) {
console.log(` [${status.timestamp}] ${status.status} - ${status.message}`);
}
}
Configuración de la detección de anomalías
Necesitamos una configuración de detección de anomalías para determinar si un punto de la serie temporal es una anomalía. Aunque se aplica automáticamente una configuración de detección predeterminada a cada métrica, se pueden ajustar los modos de detección que se utilizan en los datos. Para ello, es preciso crear una configuración de detección de anomalías.
const {
MetricsAdvisorKeyCredential,
MetricsAdvisorAdministrationClient
} = require("@azure/ai-metrics-advisor");
async function main() {
const endpoint = "<service endpoint>";
const subscriptionKey = "<subscription key>";
const apiKey = "<api key>";
const metricId = "<metric id>";
const credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential);
const detectionConfig = await configureAnomalyDetectionConfiguration(adminClient, metricId);
console.log(`Detection configuration created: ${detectionConfig.id}`);
}
async function configureAnomalyDetectionConfiguration(adminClient, metricId) {
console.log(`Creating an anomaly detection configuration on metric '${metricId}'...`);
const detectionConfig = {
name: "test_detection_configuration" + new Date().getTime().toString(),
metricId,
wholeSeriesDetectionCondition: {
smartDetectionCondition: {
sensitivity: 100,
anomalyDetectorDirection: "Both",
suppressCondition: {
minNumber: 1,
minRatio: 1
}
}
},
description: "Detection configuration description"
};
return await adminClient.createDetectionConfig(detectionConfig);
}
Creación de un enlace
Los enlaces se usan para suscribirse a alertas en tiempo real. En este ejemplo, se crea un webhook en la que el servicio Metrics Advisor puede publicar la alerta.
const {
MetricsAdvisorKeyCredential,
MetricsAdvisorAdministrationClient
} = require("@azure/ai-metrics-advisor");
async function main() {
// You will need to set these environment variables or edit the following values
const endpoint = "<service endpoint>";
const subscriptionKey = "<subscription key>";
const apiKey = "<api key>";
const credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential);
const hook = await createWebhookHook(adminClient);
console.log(`Webhook hook created: ${hook.id}`);
}
async function createWebhookHook(adminClient) {
console.log("Creating a webhook hook");
const hook = {
hookType: "Webhook",
name: "web hook " + new Date().getTime().toFixed(),
description: "description",
hookParameter: {
endpoint: "https://example.com/handleAlerts", // you must enter a valid webhook url to post the alert payload
username: "username",
password: "password"
// certificateKey: "certificate key",
// certificatePassword: "certificate password"
}
};
return await adminClient.createHook(hook);
}
Creación de una configuración de alertas
En este ejemplo se muestra cómo configurar las condiciones que necesita una alerta para desencadenarse y los enlaces que se usan como destino de una alerta.
const {
MetricsAdvisorKeyCredential,
MetricsAdvisorAdministrationClient
} = require("@azure/ai-metrics-advisor");
async function main() {
// You will need to set these environment variables or edit the following values
const endpoint = "<service endpoint>";
const subscriptionKey = "<subscription key>";
const apiKey = "<api key>";
const detectionConfigId = "<detection id>";
const hookId = "<hook id>";
const credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
const adminClient = new MetricsAdvisorAdministrationClient(endpoint, credential);
const alertConfig = await configureAlertConfiguration(adminClient, detectionConfigId, [hookId]);
console.log(`Alert configuration created: ${alertConfig.id}`);
}
async function configureAlertConfiguration(adminClient, detectionConfigId, hookIds) {
console.log("Creating a new alerting configuration...");
const anomalyAlertConfig = {
name: "test_alert_config_" + new Date().getTime().toString(),
crossMetricsOperator: "AND",
metricAlertConfigurations: [
{
detectionConfigurationId: detectionConfigId,
alertScope: {
scopeType: "All"
},
alertConditions: {
severityCondition: { minAlertSeverity: "Medium", maxAlertSeverity: "High" }
},
snoozeCondition: {
autoSnooze: 0,
snoozeScope: "Metric",
onlyForSuccessive: true
}
}
],
hookIds,
description: "Alerting config description"
};
return await adminClient.createAlertConfig(anomalyAlertConfig);
}
Consulta de la alerta
const { MetricsAdvisorKeyCredential, MetricsAdvisorClient } = require("@azure/ai-metrics-advisor");
async function main() {
// You will need to set these environment variables or edit the following values
const endpoint = "<service endpoint>";
const subscriptionKey = "<subscription key>";
const apiKey = "<api key>";
const alertConfigId = "<alert config id>";
const credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
const client = new MetricsAdvisorClient(endpoint, credential);
const alertIds = await queryAlerts(
client,
alertConfigId,
new Date(Date.UTC(2020, 8, 1)),
new Date(Date.UTC(2020, 8, 12))
);
if (alertIds.length > 1) {
// query anomalies using an alert id.
await queryAnomaliesByAlert(client, alertConfigId, alertIds[0]);
} else {
console.log("No alerts during the time period");
}
}
async function queryAlerts(client, alertConfigId, startTime, endTime) {
let alerts = [];
const iterator = client.listAlerts(alertConfigId, startTime, endTime, "AnomalyTime");
for await (const alert of iterator) {
alerts.push(alert);
}
return alerts;
}
async function queryAnomaliesByAlert(client, alert) {
console.log(
`Listing anomalies for alert configuration '${alert.alertConfigId}' and alert '${alert.id}'`
);
const iterator = client.listAnomaliesForAlert(alert);
for await (const anomaly of iterator) {
console.log(
` Anomaly ${anomaly.severity} ${anomaly.status} ${anomaly.seriesKey} ${anomaly.timestamp}`
);
}
}
Ejecución de la aplicación
Ejecute la aplicación con el comando node en el archivo de inicio rápido.
node index.js
Documentación de referencia | Código fuente de la biblioteca | Paquete (PiPy) | Ejemplos
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Python 3.x
- Una vez que tenga la suscripción de Azure, create a Metrics Advisor resource en Azure Portal para implementar la instancia de Metrics Advisor.
- Su propia base de datos SQL con datos de series temporales.
Sugerencia
- Puede encontrar ejemplos de Metrics Advisor de Python en GitHub.
- El recurso de Metrics Advisor puede tardar entre 10 y 30 minutos en implementar una instancia de servicio para que pueda usarla. Haga clic en Ir al recurso una vez que se implemente correctamente. Después de la implementación, puede empezar a usar la instancia de Metrics Advisor con el portal web y la API de REST.
- Puede encontrar la dirección URL de la API de REST en Azure Portal, en la sección Información general de su recurso. Tendrá este aspecto:
https://<instance-name>.cognitiveservices.azure.com/
Instalación
Instalación de la biblioteca cliente
Después de instalar Python, puede instalar la biblioteca cliente con:
pip install azure-ai-metricsadvisor --pre
Creación de una nueva aplicación de Python
Cree un archivo de Python e importe las bibliotecas siguientes.
import os
import datetime
Cree variables para el punto de conexión y la clave de Azure del recurso.
Importante
Vaya a Azure Portal. Si el recurso de Metrics Advisor que creó en la sección Requisitos previos se implementó correctamente, haga clic en el botón Ir al recurso en Pasos siguientes. Sus claves de suscripción y su punto de conexión se encuentran en la página Key and Endpoint (Clave y punto de conexión) del recurso, en Administración de recursos.
Para recuperar la clave de API, debe ir a https://metricsadvisor.azurewebsites.net. Seleccione los valores apropiados: Directory (Directorio), Subscriptions (Suscripciones) y Workspace (Área de trabajo) del recurso y seleccione Comenzar. A continuación, podrá recuperar las claves de API de https://metricsadvisor.azurewebsites.net/api-key.
Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, considere la posibilidad de usar alguna forma segura de almacenar las credenciales, y acceder a ellas. Para más información, consulte el artículo sobre la seguridad de Cognitive Services.
subscription_key = "<paste-your-metrics-advisor-subscription-key-here>"
api_key = "<paste-your-metrics-advisor-api-key-here>"
service_endpoint = "<paste-your-metrics-advisor-endpoint-here>"
Modelo de objetos
Las siguientes clases controlan algunas de las características principales del SDK de Python para Metrics Advisor.
| Nombre | Descripción |
|---|---|
| MetricsAdvisorClient | Se usa para: - Enumerar pendientes - Enumerar la causa raíz de los incidentes - Recuperar los datos de series temporales originales y los datos de series temporales enriquecidos por el servicio. - Enumerar alertas - Agregar comentarios para optimizar el modelo |
| MetricsAdvisorAdministrationClient | Permite: - Administrar fuentes de distribución de datos -Crear, configurar, recuperar, enumerar y eliminar configuraciones de detección de anomalías -Crear, configurar, recuperar, enumerar y eliminar configuraciones de alertas de anomalías - Administrar enlaces |
| DataFeed | Lo que Metrics Advisor ingiere de su origen de datos. DataFeed contiene filas de: - Marcas de tiempo - Cero o más dimensiones - Una o varias medidas |
| DataFeedMetric | DataFeedMetric es una medida cuantificable que se usa para supervisar y evaluar el estado de un proceso empresarial específico. Puede ser una combinación de varios valores de serie temporal divididos en dimensiones. Por ejemplo, una métrica de mantenimiento de la Web podría contener dimensiones para recuento de usuarios y el mercado es-es. |
Ejemplos de código
Estos fragmentos de código muestran cómo realizar las siguientes tareas con la biblioteca cliente de Metrics Advisor para Python:
- Autenticar el cliente
- Adición de una fuente de distribución de datos
- Comprobar el estado de la ingesta
- Instalar la configuración de detección y la configuración de alertas
- Crear una configuración de alertas
- Resultados de la detección de anomalías de las consultas
Autenticar el cliente
El cliente de este ejemplo es un objeto MetricsAdvisorAdministrationClient que utiliza un punto de conexión y un objeto MetricsAdvisorKeyCredential que contiene las claves. No es necesario copiar este código de ejemplo. Los métodos que cree posteriormente crearán instancias del cliente. Se llama al cliente alternativo MetricsAdvisorClient. Se puede encontrar más información sobre este cliente en la documentación de referencia.
client = MetricsAdvisorAdministrationClient(service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key))
Adición de una fuente de distribución de datos
En un método nuevo, cree instrucciones de importación como las del ejemplo siguiente. Reemplace sql_server_connection_string por su propia cadena de conexión de SQL Server y reemplace query por una consulta que devuelva los datos en una sola marca de tiempo. También tendrá que ajustar los valores de DataFeedmetric y DataFeedDimension en función de los datos personalizados.
Importante
La consulta debe devolver como máximo un registro para cada combinación de dimensión, en cada marca de tiempo. Y todos los registros devueltos por la consulta deben tener las mismas marcas de tiempo. El asesor de métricas ejecutará esta consulta para cada marca de tiempo que deba ingerir los datos. Consulte Tutorial: Escritura de una consulta válida para incorporar datos de métricas para más información y ejemplos.
Cree un cliente con sus claves y un punto de conexión, y use client.create_data_feed() para configurar el nombre, el origen, la granularidad y el esquema. También puede establecer el tiempo de ingesta, la configuración del monitor de acumulación, etc.
def sample_create_data_feed():
from azure.ai.metricsadvisor import MetricsAdvisorKeyCredential, MetricsAdvisorAdministrationClient
from azure.ai.metricsadvisor.models import (
SqlServerDataFeedSource,
DataFeedSchema,
DataFeedMetric,
DataFeedDimension,
DataFeedRollupSettings,
DataFeedMissingDataPointFillSettings
)
sql_server_connection_string = "<replace-with-your-sql-server-connection-string>"
query = "<replace-with-metrics-advisor-sql-server-query>"
client = MetricsAdvisorAdministrationClient(service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key))
data_feed = client.create_data_feed(
name="My data feed",
source=SqlServerDataFeedSource(
connection_string=sql_server_connection_string,
query=query,
),
granularity="Daily",
schema=DataFeedSchema(
metrics=[
DataFeedMetric(name="cost", display_name="Cost"),
DataFeedMetric(name="revenue", display_name="Revenue")
],
dimensions=[
DataFeedDimension(name="category", display_name="Category"),
DataFeedDimension(name="city", display_name="City")
],
timestamp_column="Timestamp"
),
ingestion_settings=datetime.datetime(2019, 10, 1),
data_feed_description="cost/revenue data feed",
rollup_settings=DataFeedRollupSettings(
rollup_type="AutoRollup",
rollup_method="Sum",
rollup_identification_value="__CUSTOM_SUM__"
),
missing_data_point_fill_settings=DataFeedMissingDataPointFillSettings(
fill_type="SmartFilling"
),
access_mode="Private"
)
)
return data_feed
sample_create_data_feed()
Comprobación del estado de la ingesta
En un método nuevo, cree una instrucción de importación como la del ejemplo siguiente. Reemplace data_feed_id por el identificador de la fuente de distribución de datos que ha creado. Cree un cliente con sus claves y su punto de conexión, y use client.list_data_feed_ingestion_status() para obtener el progreso de la ingesta. Imprima los detalles, como las últimas marcas de tiempo activa y correcta.
from azure.ai.metricsadvisor import MetricsAdvisorKeyCredential, MetricsAdvisorAdministrationClient
data_feed_id = "<replace-with-your-metrics-advisor-data-feed-id>"
client = MetricsAdvisorAdministrationClient(service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key)
)
ingestion_status = client.list_data_feed_ingestion_status(
data_feed_id,
datetime.datetime(2020, 9, 20),
datetime.datetime(2020, 9, 25)
)
for status in ingestion_status:
print("Timestamp: {}".format(status.timestamp))
print("Status: {}".format(status.status))
print("Message: {}\n".format(status.message))
Configuración de la detección de anomalías
En un método nuevo, cree instrucciones de importación como las del ejemplo siguiente. Reemplace metric_id por el identificador de la métrica que desea configurar. Cree un cliente con sus claves y su punto de conexión, y use client.create_detection_configuration para crear una configuración de detección. Las condiciones del umbral especifican los parámetros para la detección de anomalías.
from azure.ai.metricsadvisor import MetricsAdvisorKeyCredential, MetricsAdvisorAdministrationClient
from azure.ai.metricsadvisor.models import (
ChangeThresholdCondition,
HardThresholdCondition,
SmartDetectionCondition,
SuppressCondition,
MetricDetectionCondition,
)
metric_id = "replace-with-your-metric-id"
client = MetricsAdvisorAdministrationClient(
service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key)
)
change_threshold_condition = ChangeThresholdCondition(
anomaly_detector_direction="Both",
change_percentage=20,
shift_point=10,
within_range=True,
suppress_condition=SuppressCondition(
min_number=5,
min_ratio=2
)
)
hard_threshold_condition = HardThresholdCondition(
anomaly_detector_direction="Up",
upper_bound=100,
suppress_condition=SuppressCondition(
min_number=2,
min_ratio=2
)
)
smart_detection_condition = SmartDetectionCondition(
anomaly_detector_direction="Up",
sensitivity=10,
suppress_condition=SuppressCondition(
min_number=2,
min_ratio=2
)
)
detection_config = client.create_detection_configuration(
name="my_detection_config",
metric_id=metric_id,
description="anomaly detection config for metric",
whole_series_detection_condition=MetricDetectionCondition(
condition_operator="OR",
change_threshold_condition=change_threshold_condition,
hard_threshold_condition=hard_threshold_condition,
smart_detection_condition=smart_detection_condition
)
)
return detection_config
Creación de un enlace
En un método nuevo, cree instrucciones de importación como las del ejemplo siguiente. Cree un cliente con sus claves y su punto de conexión, y use client.create_hook() para crear un enlace. Escriba una descripción, la lista de direcciones de correo electrónico a los que se enviará la alerta y el vínculo externo que aparecerá en la alerta.
def sample_create_hook():
from azure.ai.metricsadvisor import MetricsAdvisorKeyCredential, MetricsAdvisorAdministrationClient
from azure.ai.metricsadvisor.models import EmailNotificationHook
client = MetricsAdvisorAdministrationClient(service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key))
client = MetricsAdvisorAdministrationClient(service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key))
hook = client.create_hook(
hook=EmailNotificationHook(
name="email hook",
description="my email hook",
emails_to_alert=["alertme@alertme.com"],
external_link="https://example.com/handleAlerts" #A customized field configured by users, which will be displayed in the anomaly alert. It's usually been used to link to a troubleshooting guide to help further diagnose the issue.
)
)
Creación de una configuración de alertas
En un método nuevo, cree instrucciones de importación como las del ejemplo siguiente. Reemplace detection_configuration_id por el identificador de la configuración de detección de anomalías y reemplace hook_id por el enlace que creó anteriormente. Cree un cliente con sus claves y su punto de conexión, y use client.create_alert_configuration() para crear una configuración de alertas.
def sample_create_alert_config():
from azure.ai.metricsadvisor import MetricsAdvisorKeyCredential, MetricsAdvisorAdministrationClient
from azure.ai.metricsadvisor.models import (
MetricAlertConfiguration,
MetricAnomalyAlertScope,
TopNGroupScope,
MetricAnomalyAlertConditions,
SeverityCondition,
MetricBoundaryCondition,
MetricAnomalyAlertSnoozeCondition
)
anomaly_detection_configuration_id = "<replace-with-your-detection-configuration-id"
hook_id = "<replace-with-your-hook-id>"
client = MetricsAdvisorAdministrationClient(
service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key)
)
alert_config = client.create_alert_configuration(
name="my alert config",
description="alert config description",
cross_metrics_operator="AND",
metric_alert_configurations=[
MetricAlertConfiguration(
detection_configuration_id=detection_configuration_id,
alert_scope=MetricAnomalyAlertScope(
scope_type="WholeSeries"
),
alert_conditions=MetricAnomalyAlertConditions(
severity_condition=SeverityCondition(
min_alert_severity="Low",
max_alert_severity="High"
)
)
),
MetricAlertConfiguration(
detection_configuration_id=detection_configuration_id,
alert_scope=MetricAnomalyAlertScope(
scope_type="TopN",
top_n_group_in_scope=TopNGroupScope(
top=10,
period=5,
min_top_count=5
)
),
alert_conditions=MetricAnomalyAlertConditions(
metric_boundary_condition=MetricBoundaryCondition(
direction="Up",
upper=50
)
),
alert_snooze_condition=MetricAnomalyAlertSnoozeCondition(
auto_snooze=2,
snooze_scope="Metric",
only_for_successive=True
)
),
],
hook_ids=[hook_id]
)
return alert_config
Consulta de la alerta
En un método nuevo, cree una instrucción de importación como la del ejemplo siguiente. Reemplace alert_id por el identificador de la alerta y reemplace alert_config_id por el identificador de configuración de la alerta. Cree un cliente con sus claves y su punto de conexión, y use client.list_anomalies para enumerar la anomalías de una alerta.
from azure.ai.metricsadvisor import MetricsAdvisorKeyCredential, MetricsAdvisorClient
alert_id = "<replace-with-your-alert-id>"
alert_config_id = "<replace-with-your-alert-configuration-id"
client = MetricsAdvisorClient(service_endpoint,
MetricsAdvisorKeyCredential(subscription_key, api_key)
)
results = client.list_alerts(
alert_configuration_id=alert_config_id,
start_time=datetime.datetime(2020, 1, 1),
end_time=datetime.datetime(2020, 9, 9),
time_mode="AnomalyTime",
)
for result in results:
print("Alert id: {}".format(result.id))
print("Create on: {}".format(result.created_on))
results = client.list_anomalies(
alert_configuration_id=alert_config_id,
alert_id=alert_id,
)
for result in results:
print("Create on: {}".format(result.created_on))
print("Severity: {}".format(result.severity))
print("Status: {}".format(result.status))
Ejecución de la aplicación
Ejecute la aplicación con el comando python en el archivo de inicio rápido.
python quickstart-file.py
Prerrequisitos
- Una suscripción a Azure: cree una cuenta gratuita
- Una vez que tenga la suscripción de Azure, create a Metrics Advisor resource en Azure Portal para implementar la instancia de Metrics Advisor.
- La versión actual de cURL. En este artículo se usan varios modificadores de línea de comandos, que se indican en la documentación de cURL.
- En los siguientes ejemplos de BASH se usa el carácter de continuación de línea
\. Si la consola o el terminal usan un carácter de continuación de línea diferente, use este carácter.
- En los siguientes ejemplos de BASH se usa el carácter de continuación de línea
Sugerencia
- Puede encontrar un ejemplo de Python que llama a la API de REST en GitHub.
- El recurso de Metrics Advisor puede tardar entre 10 y 30 minutos en implementar una instancia de servicio para que pueda usarla. Haga clic en Ir al recurso una vez que se implemente correctamente. Después de la implementación, puede empezar a usar la instancia de Metrics Advisor con el portal web y la API de REST.
- Puede encontrar la dirección URL de la API de REST en Azure Portal, en la sección Información general de su recurso. Tendrá el siguiente aspecto:
https://<instance-name>.cognitiveservices.azure.com/
Necesitará dos claves para empezar a usar la API de REST:
- La clave para el recurso de Metrics Advisor. Puede encontrarla en la sección Claves y punto de conexión del recurso en Azure Portal.
- Más adelante, reemplazará
Ocp-Apim-Subscription-Keyen los ejemplos por esta clave.
- Más adelante, reemplazará
- La clave de API para la instancia de Metrics Advisor. Puede encontrarla en el portal web de Metrics Advisor, en Claves de API en el menú de navegación izquierdo.
- Más adelante, reemplazará
x-api-keyen los ejemplos por esta clave.
- Más adelante, reemplazará
Incorporación de una fuente de distribución de datos desde un origen de datos o un ejemplo
Para empezar a supervisar los datos de la serie temporal, tiene que agregar una fuente de distribución de datos. Para ello, debe proporcionar un esquema de datos según el tipo de origen de datos y los parámetros. Guarde el cuerpo de la solicitud JSON siguiente en un archivo denominado body.json y ejecute el comando de cURL.
{
"dataSourceType": "SqlServer",
"dataFeedName": "test_data_feed_00000001",
"dataFeedDescription": "",
"dataSourceParameter": {
"connectionString": "Server=ad-sample.database.windows.net,1433;Initial Catalog=ad-sample;Persist Security Info=False;User ID=adreadonly;Password=Readonly@2020;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
"query": "select * from adsample3 where Timestamp = @StartTime"
},
"granularityName": "Daily",
"granularityAmount": 0,
"metrics": [
{
"metricName": "revenue",
"metricDisplayName": "revenue",
"metricDescription": ""
},
{
"metricName": "cost",
"metricDisplayName": "cost",
"metricDescription": ""
}
],
"dimension": [
{
"dimensionName": "city",
"dimensionDisplayName": "city"
},
{
"dimensionName": "category",
"dimensionDisplayName": "category"
}
],
"timestampColumn": "timestamp",
"dataStartFrom": "2020-06-01T00:00:00.000Z",
"startOffsetInSeconds": 0,
"maxConcurrency": -1,
"minRetryIntervalInSeconds": -1,
"stopRetryAfterInSeconds": -1,
"needRollup": "NoRollup",
"fillMissingPointType": "SmartFilling",
"fillMissingPointValue": 0,
"viewMode": "Private",
"admins": [
"xxx@microsoft.com"
],
"viewers": [
],
"actionLinkTemplate": ""
}
El comando de cURL se ejecuta desde un shell de BASH. Edite este comando con sus propios valores de nombre de recurso, clave de recurso y JSON.
curl -i https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/datafeeds \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY" \
-H "Content-Type:application/json" \
-d @body.json
Respuesta de ejemplo
HTTP/1.1 201 Created
Content-Length: 0
Location: https://gualala-beta-0617.cognitiveservices.azure.com/metricsadvisor/v1.0/datafeeds/b5921405-8001-42b2-8746-004ddeeb780d
x-envoy-upstream-service-time: 564
apim-request-id: 4e4fe70b-d663-4fb7-a804-b9dc14ba02a3
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
Date: Thu, 03 Sep 2020 18:29:27 GMT
En la respuesta anterior, el encabezado Location (Ubicación) es la dirección URL de la fuente de distribución de datos que ha creado y contiene el valor de dataFeedID (Identificador de la fuente de distribución de datos).
Con la dirección URL anterior, puede consultar información detallada de la fuente de distribución de datos que creó en el paso anterior. (Usaremos metricID en la información de la fuente de distribución de datos en los pasos siguientes)
curl https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/datafeeds/REPLACE-WITH-YOUR-DATA-FEED-ID \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY"
Respuesta de ejemplo
{
"dataFeedId":"90919c03-be13-4efa-86e5-aa9dc72764ce",
"dataFeedName":"test_data_feed_00000007",
"metrics":[
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"metricName":"cost",
"metricDisplayName":"cost",
"metricDescription":""
},
{
"metricId":"82bbc63d-3739-4d57-b190-accb69721b6a",
"metricName":"revenue",
"metricDisplayName":"revenue",
"metricDescription":""
}
],
"dimension":[
{
"dimensionName":"category",
"dimensionDisplayName":"category"
},
{
"dimensionName":"city",
"dimensionDisplayName":"city"
}
],
"dataStartFrom":"2020-06-01T00:00:00Z",
"dataSourceType":"SqlServer",
"timestampColumn":"timestamp",
"startOffsetInSeconds":0,
"maxQueryPerMinute":30.0,
"granularityName":"Daily",
"granularityAmount":null,
"allUpIdentification":null,
"needRollup":"NoRollup",
"fillMissingPointType":"SmartFilling",
"fillMissingPointValue":0.0,
"rollUpMethod":"None",
"rollUpColumns":[
],
"dataFeedDescription":"",
"stopRetryAfterInSeconds":-1,
"minRetryIntervalInSeconds":-1,
"maxConcurrency":-1,
"viewMode":"Private",
"admins":[
"xyz@microsoft.com"
],
"viewers":[
],
"creator":"xyz@microsoft.com",
"status":"Active",
"createdTime":"2020-09-08T08:39:28Z",
"isAdmin":true,
"actionLinkTemplate":"",
"dataSourceParameter":{
"connectionString":"Server=ad-sample.database.windows.net,1433;Initial Catalog=ad-sample;Persist Security Info=False;User ID=adreadonly;Password=Readonly@2020;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
"query":"select * from adsample3 where Timestamp = @StartTime"
}
}
Comprobación del estado de la ingesta
Después de agregar la fuente de distribución de datos, si desea comprobar el progreso de un trabajo de ingesta, puede comprobar su estado. Guarde el cuerpo de la solicitud JSON siguiente en un archivo denominado body.json y ejecute el comando de cURL.
{
"startTime": "2020-01-01T00:00:00.0000000+00:00",
"endTime": "2020-01-04T00:00:00.0000000+00:00"
}
El comando de cURL se ejecuta desde un shell de BASH. Edite este comando con su propio nombre de recurso, clave de recurso y valores y tamaño de JSON.
curl https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/datafeeds/REPLACE-WITH-YOUR-DATA-FEED-ID/ingestionStatus/query \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY" \
-H "Content-Type:application/json" \
-d @body.json
Respuesta de ejemplo
{
"@nextLink": "https://demo.example.com/datafeeds/01234567-8901-2345-6789-012345678901/ingestionStatus/query?$skip=3&$top=1",
"value": [
{
"timestamp": "2020-09-03T00:00:00.0000000+00:00",
"status": "Running",
"message": ""
},
{
"timestamp": "2020-09-02T00:00:00.0000000+00:00",
"status": "Succeeded",
"message": ""
},
{
"timestamp": "2020-09-01T00:00:00.0000000+00:00",
"status": "Failed",
"message": "No valid record pulled from source for current timestamp 2020-01-01T00:00:00Z"
}
]
}
Configuración de la detección de anomalías
Aunque a cada métrica se le aplica automáticamente una configuración predeterminada, se pueden ajustar los modos de detección utilizados en los datos. Guarde el cuerpo de la solicitud JSON siguiente en un archivo denominado body.json y ejecute el comando de cURL.
{
"name": "test_detection_config0000000001",
"description": "string",
"metricId": "8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"wholeMetricConfiguration": {
"smartDetectionCondition": {
"sensitivity": 100,
"anomalyDetectorDirection": "Both",
"suppressCondition": {
"minNumber": 1,
"minRatio": 1
}
}
},
"dimensionGroupOverrideConfigurations": [
],
"seriesOverrideConfigurations": [
]
}
El comando de cURL se ejecuta desde un shell de BASH. Edite este comando con su propio nombre de recurso, clave de recurso y valores y tamaño de JSON.
curl -i https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/enrichment/anomalyDetection/configurations \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY" \
-H "Content-Type:application/json" \
-d @body.json
Respuesta de ejemplo
HTTP/1.1 201 Created
Content-Length: 0
Location: https://gualala-beta-0617.cognitiveservices.azure.com/metricsadvisor/v1.0/enrichment/anomalyDetection/configurations/6a977d61-f0f5-488a-a162-2feb4643ae09
x-request-id: 17752fcc-9085-46d5-ad37-c4e9e9ba6a5a
x-envoy-upstream-service-time: 253
apim-request-id: 17752fcc-9085-46d5-ad37-c4e9e9ba6a5a
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
Date: Tue, 08 Sep 2020 09:50:38 GMT
En el encabezado Location (Ubicación) anterior, se encuentra la dirección URL del nuevo recurso creado (configuración de detección).
Con la dirección URL anterior en el encabezado Location (Ubicación), puede consultar la configuración de detección que ha creado (usaremos anomalyDetectionConfigurationId (Identificador de configuración de detección de anomalías) en el contenido de la respuesta en los pasos siguientes).
curl https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/enrichment/anomalyDetection/configurations/REPLACE-WITH-YOUR-DETECTION-CONFIGURATION-ID \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY"
Respuesta de ejemplo
{
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"name":"test_detection_config0000000001",
"description":"string",
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"wholeMetricConfiguration":{
"smartDetectionCondition":{
"sensitivity":100.0,
"anomalyDetectorDirection":"Both",
"suppressCondition":{
"minNumber":1,
"minRatio":1.0
}
}
},
"dimensionGroupOverrideConfigurations":[
],
"seriesOverrideConfigurations":[
]
}
Configuración de las alertas
Antes de configurar la alerta, debe crear un enlace que se utilizará para notificarla. Hay dos maneras de recibir notificaciones si se desencadena una alerta: webhook y correo electrónico. Mientras crea el tipo de enlace, puede especificar cualquiera de ellas en la configuración del enlace.
Guarde el cuerpo de la solicitud JSON siguiente en un archivo denominado body.json y ejecute el comando de cURL.
{
"hookType": "Webhook",
"hookName": "test_web_hook000001",
"description": "",
"externalLink": "",
"hookParameter": {
"endpoint": "https://www.xxx.com/aaa",
"username": "",
"password": ""
}
}
El comando de cURL se ejecuta desde un shell de BASH. Edite este comando con su propio nombre de recurso, clave de recurso y valores y tamaño de JSON.
curl -i https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/hooks \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY" \
-H "Content-Type:application/json" \
-d @body.json
Respuesta de ejemplo
HTTP/1.1 201 Created
Content-Length: 0
Location: https://gualala-beta-0617.cognitiveservices.azure.com/metricsadvisor/v1.0/hooks/34d677bd-0875-4760-8bf6-24d48abde7c3
x-request-id: 7b6cc1a6-02cb-405b-bee3-174fdae0a7d2
x-envoy-upstream-service-time: 1640
apim-request-id: 7b6cc1a6-02cb-405b-bee3-174fdae0a7d2
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
Date: Tue, 08 Sep 2020 10:37:59 GMT
Con la dirección URL anterior en el encabezado Ubicación, puede consultar el webhook que ha creado.
curl https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/hooks/REPLACE-WITH-YOUR-HOOK-ID \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY"
Respuesta de ejemplo
{
"hookId":"34d677bd-0875-4760-8bf6-24d48abde7c3",
"hookName":"test_web_hook000001",
"hookType":"Webhook",
"externalLink":"",
"description":"",
"admins":[
"bowgong@microsoft.com"
],
"hookParameter":{
"endpoint":"https://www.xxx.com/aaa",
"username":"",
"password":"",
"headers":{
},
"certificateKey":"",
"certificatePassword":""
}
}
Mediante la configuración de alertas, puede especificar la condición de detección que se puede usar para desencadenar una alerta. Guarde el cuerpo de la solicitud JSON siguiente en un archivo denominado body.json y ejecute el comando de cURL.
{
"name": "test_alert_config00000001",
"description": "",
"crossMetricsOperator": "AND",
"hookIds": [
"34d677bd-0875-4760-8bf6-24d48abde7c3"
],
"metricAlertingConfigurations": [
{
"anomalyDetectionConfigurationId": "6a977d61-f0f5-488a-a162-2feb4643ae09",
"anomalyScopeType": "All",
"severityFilter": {
"minAlertSeverity": "Low",
"maxAlertSeverity": "High"
},
"snoozeFilter": {
"autoSnooze": 0,
"snoozeScope": "Metric",
"onlyForSuccessive": true
},
}
]
}
El comando de cURL se ejecuta desde un shell de BASH. Edite este comando con su propio nombre de recurso, clave de recurso y valores y tamaño de JSON.
curl -i https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/alert/anomaly/configurations \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY" \
-H "Content-Type:application/json" \
-d @body.json
Respuesta de ejemplo
HTTP/1.1 201 Created
Content-Length: 0
Location: https://gualala-beta-0617.cognitiveservices.azure.com/metricsadvisor/v1.0/alert/anomaly/configurations/40004c91-6996-47c0-b8c8-fd20a8f4f0ab
x-request-id: 17752fcc-9085-46d5-ad37-c4e9e9ba6a5a
x-envoy-upstream-service-time: 253
apim-request-id: 17752fcc-9085-46d5-ad37-c4e9e9ba6a5a
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
Date: Tue, 08 Sep 2020 09:50:38 GMT
En el encabezado Location (Ubicación) anterior, se encuentra la dirección URL del nuevo recurso creado (configuración de detección).
Con la dirección URL anterior en el encabezado Location, puede consultar la configuración de alertas que ha creado. (Usaremos anomalyAlertingConfigurationId en la configuración de alertas, en los pasos siguientes)
curl https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/alert/anomaly/configurations/REPLACE-WITH-YOUR-ANOMALY-ALERTING-CONFIGURATION-ID \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY"
Respuesta de ejemplo
{
"anomalyAlertingConfigurationId":"40004c91-6996-47c0-b8c8-fd20a8f4f0ab",
"name":"test_alert_config00000001",
"description":"",
"hookIds":[
"34d677bd-0875-4760-8bf6-24d48abde7c3"
],
"metricAlertingConfigurations":[
{
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"anomalyScopeType":"All",
"negationOperation":false,
"severityFilter":{
"minAlertSeverity":"Low",
"maxAlertSeverity":"High"
},
"snoozeFilter":{
"autoSnooze":0,
"snoozeScope":"Metric",
"onlyForSuccessive":true
}
}
]
}
Resultados de la detección de anomalías de las consultas
Hay diferentes maneras de obtener los resultados de la detección. Por ejemplo, puede consultar el resultado de la detección de forma periódica con la configuración de la detección que ha creado o bien podría recibir una notificación mediante la alerta y, a continuación, usar dicha alerta para consultar las anomalías correspondientes.
En el ejemplo siguiente, se muestra cómo consultar la alerta y cómo usarla para consultar las anomalías relacionadas con ella.
Alerta de consulta
Puede usar la configuración de alertas creada en el paso anterior para consultar la alerta.
curl https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/alert/anomaly/configurations/REPLACE-WITH-YOUR-ANOMALY-ALERTING-CONFIGURATION-ID/alerts/query \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY"
Respuesta de ejemplo
{
"value":[
{
"alertId":"17465dcc000",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.532Z",
"modifiedTime":"2020-09-08T19:12:46.588Z"
}
],
"@nextLink":null
}
En la respuesta anterior, se produjo una alerta. Con este alertID, podemos consultar todas las anomalías relacionadas que produjeron esta alerta.
(Otra manera de obtener una alerta es configurar el webhook y la alerta de recepción pasiva una vez que se encuentre).
Consulta de anomalías mediante alertID
curl https://REPLACE-WITH-YOUR-ENDPOINT/metricsadvisor/v1.0/alert/anomaly/configurations/REPLACE-WITH-YOUR-ANOMALY-ALERTING-CONFIGURATION-ID/alerts/REPLACE-WITH-YOUR-ALERTID/anomalies \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "x-api-key: REPLACE-WITH-YOUR-API-KEY"
Respuesta de ejemplo
{
"value":[
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.566Z",
"modifiedTime":"2020-09-08T19:12:46.566Z",
"dimension":{
"city":"Amphibian",
"category":"Caucasian Fir"
},
"property":{
"anomalySeverity":"High",
"anomalyStatus":"Active"
}
},
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.566Z",
"modifiedTime":"2020-09-08T19:12:46.566Z",
"dimension":{
"city":"Animals by number of neurons",
"category":"Crack willow"
},
"property":{
"anomalySeverity":"High",
"anomalyStatus":"Active"
}
},
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.566Z",
"modifiedTime":"2020-09-08T19:12:46.566Z",
"dimension":{
"city":"Amphibian",
"category":"Crack willow"
},
"property":{
"anomalySeverity":"High",
"anomalyStatus":"Active"
}
},
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.566Z",
"modifiedTime":"2020-09-08T19:12:46.566Z",
"dimension":{
"city":"Animals by number of neurons",
"category":"Common Lime"
},
"property":{
"anomalySeverity":"High",
"anomalyStatus":"Active"
}
},
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.566Z",
"modifiedTime":"2020-09-08T19:12:46.566Z",
"dimension":{
"city":"Chickadee",
"category":"Common Lime"
},
"property":{
"anomalySeverity":"High",
"anomalyStatus":"Active"
}
},
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.566Z",
"modifiedTime":"2020-09-08T19:12:46.566Z",
"dimension":{
"city":"Amphibian",
"category":"Common Lime"
},
"property":{
"anomalySeverity":"High",
"anomalyStatus":"Active"
}
},
{
"metricId":"8d03e541-a56d-4c28-8d9c-09ce91c6d95f",
"anomalyDetectionConfigurationId":"6a977d61-f0f5-488a-a162-2feb4643ae09",
"timestamp":"2020-09-07T00:00:00Z",
"createdTime":"2020-09-08T19:12:46.566Z",
"modifiedTime":"2020-09-08T19:12:46.566Z",
"dimension":{
"city":"Chickadee",
"category":"Crack willow"
},
"property":{
"anomalySeverity":"High",
"anomalyStatus":"Active"
}
}
],
"@nextLink":null
}
Limpieza de recursos
Si quiere limpiar y eliminar una suscripción a Cognitive Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él.