Hızlı başlangıç: çözümünüzü özelleştirmek için istemci kitaplıklarını veya REST API 'Lerini kullanma

Ölçüm Danışmanı REST API veya istemci kitaplıklarını kullanmaya başlayın. Paketi yüklemek için bu adımları izleyin ve temel görevler için örnek kodu deneyin.

Şunları yapmak için ölçüm Danışmanı 'nı kullanın:

  • Veri kaynağından veri akışı ekleme
  • Alma durumunu denetle
  • Algılama ve Uyarıları yapılandırma
  • Anomali algılama sonuçlarını sorgulama
  • Bozukluklar tanılayın

Başvuru belgeleri | Kitaplık kaynak kodu | Paket (NuGet) | Örnekler

Önkoşullar

  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • .NET Core'un geçerli sürümü.
  • Azure aboneliğiniz olduktan sonra, ölçüm Danışmanı örneğinizi dağıtmak için Azure Portal ölçüm Danışmanı kaynağı oluşturun.
  • zaman serisi verileriyle kendi SQL veritabanınız.

İpucu

  • .NET ölçüm Danışmanı örneklerini GitHubbulabilirsiniz.
  • Ölçüm Danışmanı kaynağınızın kullanabilmeniz için bir hizmet örneği dağıtması 10 ila 30 dakika sürebilir. Başarılı bir şekilde dağıtıldıktan sonra Kaynağa Git ' e tıklayın. Dağıtımdan sonra, ölçüm Danışmanı örneğinizi hem Web portalı hem de REST API kullanmaya başlayabilirsiniz.
  • Azure portal REST API URL 'sini kaynağınızın genel bakış bölümünde bulabilirsiniz. Şu şekilde görünür:
    • https://<instance-name>.cognitiveservices.azure.com/

Ayarlanıyor

İstemci kitaplığını yükler

yeni bir proje oluşturduktan sonra, Çözüm Gezgini proje çözümüne sağ tıklayıp NuGet paketlerini yönet' i seçerek istemci kitaplığını yükleyebilirsiniz. Açılan paket yöneticisinde, Seç ' i seçin, ön sürümü dahil et ' i işaretleyin ve arama yapın Azure.AI.MetricsAdvisor . Sürüm 1.0.0 ' ü ve ardından öğesini seçin.

Konsol penceresinde (cmd, PowerShell veya Bash gibi), dotnet new adıyla yeni bir konsol uygulaması oluşturmak için komutunu kullanın metrics-advisor-quickstart . Bu komut, tek bir kaynak dosyası olan basit bir "Merhaba Dünya" C# projesi oluşturur: program. cs.

dotnet new console -n metrics-advisor-quickstart

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

dotnet build

Derleme çıktısı hiçbir uyarı veya hata içermemelidir.

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

İstemci kitaplığını yükler

Visual Studio dışında bir ıde kullanıyorsanız aşağıdaki komutla .net için ölçüm danışmanı istemci kitaplığı ' nı yükleyebilirsiniz:

dotnet add package Azure.AI.MetricsAdvisor --version 1.0.0

İpucu

Tüm hızlı başlangıç kodu dosyasını aynı anda görüntülemek mi istiyorsunuz? bu hızlı başlangıçta kod örneklerini içeren GitHubüzerinde bulabilirsiniz.

Proje dizininden program. cs dosyasını açın ve aşağıdaki using yönergeleri ekleyin:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure.AI.MetricsAdvisor.Administration;
using Azure.AI.MetricsAdvisor;
using Azure.AI.MetricsAdvisor.Models;

Uygulamanın Main() yönteminde, bu hızlı başlangıçta kullanılan yöntemlere çağrılar ekleyin. Bunları daha sonra oluşturacaksınız.

static void Main(string[] args){
    // You will create the below methods later in the quickstart
    exampleTask1();
}

Nesne modeli

Aşağıdaki sınıflar, ölçüm Danışmanı C# SDK 'SıNıN bazı önemli özelliklerini işler.

Ad Açıklama
MetricsAdvisorClient Kullanım için:
-Olayları listeleme
-Olayların temel nedenini listeleme
-Özgün zaman serisi verileri ve zaman serisi verilerinin hizmet tarafından zenginleştirerek elde alınması.
-Uyarılar listeleniyor
-Modelinizi ayarlamak için geri bildirim ekleme
MetricsAdvisorAdministrationClient Şunları yapmanıza olanak sağlar:
-Veri akışlarını yönetme
-Anomali algılama yapılandırmasını yapılandırma
-Anomali uyarı yapılandırmasını yapılandırın
-Kancaları Yönet
Veri akışı Veri kaynağından alınan ölçüm danışmanı. Şu DataFeed satırları içerir:
-Zaman damgaları
-Sıfır veya daha fazla boyut
-Bir veya daha fazla ölçü
DataFeedMetric , DataFeedMetric Belirli bir iş sürecinin durumunu izlemek ve değerlendirmek için kullanılan, ölçülebilir bir ölçüdür. Bu, boyutlara bölünen birden çok zaman serisi değerinin bir birleşimi olabilir. Örneğin, bir Web durumu ölçümü Kullanıcı sayısı ve en-US pazarında boyut içerebilir.

Kod örnekleri

Bu kod parçacıkları, .NET için ölçüm Danışmanı istemci kitaplığı ile aşağıdaki görevlerin nasıl yapılacağını gösterir:

İstemcinin kimliğini doğrulama

Uygulamanın Program sınıfında, kaynağınızın anahtarları ve uç noktası için değişkenler oluşturun.

Önemli

Azure portala gidin. Önkoşullar bölümünde oluşturduğunuz ölçüm Danışmanı kaynağı başarıyla dağıtılırsa, sonraki adımlar altında Kaynağa Git düğmesine tıklayın. Kaynak yönetimi altında, kaynağın anahtar ve uç nokta sayfasında abonelik Anahtarlarınızı ve uç noktanızı bulabilirsiniz.

API anahtarınızı almak için adresine gitmeniz gerekir https://metricsadvisor.azurewebsites.net . Kaynağınız için uygun: Dizin, abonelikler ve çalışma alanını seçin ve kullanmaya başlayın ' ı seçin. Bundan sonra API anahtarlarınızı adresinden alabilirsiniz https://metricsadvisor.azurewebsites.net/api-key .

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Daha fazla bilgi için bilişsel Hizmetler güvenlik makalesine bakın.

Abonelik ve API anahtarlarına sahip olduktan sonra bir MetricsAdvisorKeyCredential oluşturun. Uç nokta ve anahtar kimlik bilgileri ile şunu oluşturabilirsiniz MetricsAdvisorClient :

string endpoint = "<endpoint>";
string subscriptionKey = "<subscriptionKey>";
string apiKey = "<apiKey>";
var credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
var client = new MetricsAdvisorClient(new Uri(endpoint), credential);

MetricsAdvisorAdministrationClientYönetim işlemleri gerçekleştirmek için bir de oluşturabilirsiniz:

string endpoint = "<endpoint>";
string subscriptionKey = "<subscriptionKey>";
string apiKey = "<apiKey>";
var credential = new MetricsAdvisorKeyCredential(subscriptionKey, apiKey);
var adminClient = new MetricsAdvisorAdministrationClient(new Uri(endpoint), credential);

Veri akışı Ekle

Ölçüm Danışmanı birden çok veri kaynağı türünü destekler. bu örnekte, bir DataFeed SQL sunucusundan veri çıkaran bir oluşturma işlemini göstereceğiz.

connection_Stringkendi SQL server bağlantı dizeniz ile değiştirin ve query tek bir zaman damgasında verilerinizi döndüren bir sorguyla değiştirin. Ayrıca, DataFeedMetric ve DataFeedDimension değerlerini özel verilerinize göre ayarlamanız gerekir.

Önemli

Sorgu her bir zaman damgasında her bir boyut birleşimi için en çok bir kayıt döndürmelidir. Ve sorgu tarafından döndürülen tüm kayıtlar aynı zaman damgalarına sahip olmalıdır. Ölçüm Danışmanı, verilerinizi almak için bu sorguyu her zaman damgası için çalıştırır. Daha fazla bilgi ve örnekler için öğreticiye bakın: geçerli bir sorgu yazın .

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

Alma durumunu denetleme

Daha önce oluşturulan bir öğesinin giriş durumunu denetleme DataFeed

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

Anomali algılamayı yapılandırma

Hizmete hangi veri noktalarının anormal düşünüldüler olduğunu bildirmek için bir anomali algılama yapılandırması oluşturun.

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

Kanca oluşturma

Ölçüm Danışmanı, EmailNotificationHook WebNotificationHook Uyarı bildirimlerine abone olma yöntemi olarak ve sınıflarını destekler. Bu örnekte nasıl oluşturulacağını göstereceğiz EmailNotificationHook . Bildirimleri almaya başlamak için bir anomali uyarı yapılandırmasına geçiş yapmanız gerekir. Daha fazla bilgi için bkz. anomali uyarı yapılandırması oluşturma örneği.

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

Uyarı yapılandırması oluşturma

AnomalyAlertConfigurationHizmeti, uyarıları tetikleyebilen bir hizmete bildirmek için oluşturun.

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

Uyarıyı sorgulama

Belirli bir anomali uyarı yapılandırması tarafından oluşturulan uyarılara bakın.

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

Bir uyarının KIMLIĞINI öğrendikten sonra, bu uyarıyı tetikleyen anormallikleri listeleyin.

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

Uygulamayı çalıştırma

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

dotnet run

Başvuru belgeleri | Kitaplık kaynak kodu | Yapıt (Maven) | Örnekler

Önkoşullar

İpucu

  • Java uygulama örneklerini Ölçüm Danışmanı üzerinde bulabilirsiniz GitHub.
  • Kaynak kaynağınız için bir hizmet Ölçüm Danışmanı dağıtmanız 10-30 dakika sürebilir. Başarıyla dağıtıldıktan sonra Kaynağa git'e tıklayın. Dağıtımdan sonra, hem web portalı hem Ölçüm Danışmanı web portalı ile REST API.
  • Kaynağın URL'sini, REST API genel Azure portal bölümünde bulabilirsiniz. Şu şekilde görünür:
    • https://<instance-name>.cognitiveservices.azure.com/

Ayarlama

Yeni bir Gradle projesi oluşturma

Bu hızlı başlangıçta Gradle bağımlılık yöneticisi 2. Maven Central Repository hakkında daha fazla istemci kitaplığı bilgisi bulabilirsiniz.

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

mkdir myapp && cd myapp

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

gradle init --type basic

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

İstemci kitaplığını yükleme

build.gradle.kts'yi bulun ve tercih ettiğiniz IDE veya metin düzenleyicisiyle açın. Ardından bu derleme yapılandırmasına kopyalayın. Proje bağımlılıklarını dahil etmek için emin olun.

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

Java dosyası oluşturma

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

mkdir -p src/main/java

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

İpucu

Hızlı başlangıç kod dosyasının tamamını aynı anda görüntülemek ister misiniz? Bu hızlı başlangıçtaki GitHubörneklerini içeren dosyada bulabilirsiniz.

Uygulamanın MetricsAdvisorQuickstarts sınıfında, kaynağınız anahtarı ve uç noktası için değişkenler oluşturun.

Önemli

Azure portala gidin. Önkoşullar Ölçüm Danışmanı oluşturduğunuz kaynak başarıyla dağıtılırsa, Sonraki Adımlar'ın altındaki Kaynağa Git düğmesine tıklayın. Abonelik anahtarlarınızı ve uç noktanızı kaynağın Anahtar ve Uç Nokta sayfasında, Kaynak Yönetimi altında bulabilirsiniz.

API anahtarınızı almak için'e https://metricsadvisor.azurewebsites.net gitebilirsiniz. Kaynağınız için uygun dizini, Abonelikler ve Çalışma Alanı'Kullanmaya başlayın. Ardından API anahtarlarınızı 'den https://metricsadvisor.azurewebsites.net/api-key aabileceksiniz.

Bitiren kodundan anahtarı kaldırmayı unutmayın ve hiçbir zaman herkese açık şekilde yayınlayamayabilirsiniz. Üretim için kimlik bilgilerinizi depolamak ve erişmek için güvenli bir yol kullanmayı göz önünde bulundurarak. Daha fazla bilgi için Bilişsel Hizmetler güvenliği makalesine bakın.

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

Uygulamanın Main() yönteminde, bu hızlı başlangıçta kullanılan yöntemler için çağrılar ekleyin. Bunları daha sonra oluşturacağız.

static void Main(string[] args){

    // You will create the below methods later in the quickstart
    exampleTask1();
}

Nesne modeli

Aşağıdaki sınıflar, Java SDK'sı için Ölçüm Danışmanı ele almaktadır.

Ad Açıklama
MetricsClient için kullanılır:
- Anomali olaylarını listeleme
- Olayın kök nedenini listeleme
- Hizmet tarafından zenginleştirilmiş özgün zaman serisi verilerini ve zaman serisi verilerini alma.
- Uyarıları listeleme
- Modelinizi ayarlamak için geri bildirim ekleme
MetricsClientAdministrationClient Şunları sağlar:
- Veri akışlarını yönetme
- Anomali algılama yapılandırmalarını yapılandırma
- Anomali uyarı yapılandırmalarını yapılandırma
- Kancaları yönetme
DataFeed Veri Ölçüm Danışmanı neleri içerir? , DataFeed şu satırları içerir:
- Zaman Damgası
- Sıfır veya daha fazla boyut
- Bir veya daha fazla ölçü
DataFeedMetric , DataFeedMetric belirli bir iş sürecinin durumunu izlemek ve değerlendirmek için kullanılan ölçülebilir bir ölçüdür. Boyutlara bölünmüş birden çok zaman serisi değeri birleşimi olabilir. Örneğin bir web durumu ölçümü, kullanıcı sayısı ve en-us pazarı için boyutlar içerebilir.

Kod örnekleri

Bu kod parçacıkları Java için istemci kitaplığını kullanarak aşağıdaki Ölçüm Danışmanı nasıl gerçekleştirebilirsiniz?

İstemcinin kimliğini doğrulama

MetricsIserKeyCredential kullanarak Ölçüm Danışmanı istemci oluşturma

MetricsAdvisorKeyCredential credential = new MetricsAdvisorKeyCredential(SUBSCRIPTION_KEY, API_KEY);
MetricsAdvisorClient metricsAdvisorClient = new MetricsAdvisorClientBuilder()
    .endpoint(ENDPOINT)
    .credential(credential)
    .buildClient();

MetricsIserKeyCredential kullanarak Ölçüm Yönetimi istemcisi oluşturma

MetricsAdvisorKeyCredential credential = new MetricsAdvisorKeyCredential(SUBSCRIPTION_KEY, API_KEY);
MetricsAdvisorAdministrationClient metricsAdvisorAdministrationClient =
    new MetricsAdvisorAdministrationClientBuilder()
        .endpoint(ENDPOINT)
        .credential(credential)
        .buildClient();

Veri akışı ekleme

yerine kendi sunucu SQL dizenizi, yerine de tek bir zaman damgasında verilerinizi sql_server_connection_string query döndüren bir sorgu girin. Ayrıca ve değerlerini özel DataFeedMetric DataFeedDimension verilerinize göre ayarlamanız da gerekir.

Önemli

Sorgu, her boyut birleşimi için her zaman damgasında en fazla bir kayıt dönüşletir. Sorgu tarafından döndürülen tüm kayıtların aynı zaman damgasına sahip olması gerekir. Ölçüm Danışmanı verilerinizi alan her zaman damgası için bu sorguyu çalıştırabilirsiniz. Daha fazla bilgi ve örnekler için Öğretici: Geçerli bir sorgu yazma'ya bakın.

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

Alımın durumunu denetleme

Bu örnek, önceden sağlanan bir veri akışı kaynağının veri alımı durumunu denetler.

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

Anomali algılamayı yapılandırma

Bu örnekte, kullanıcının verileri için anomali algılama yapılandırmasını nasıl yapılandırabilirsiniz?

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

Kanca oluşturma

Bu örnek, anomali olay uyarılarını alan bir e-posta kancası oluşturur.

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

Uyarı yapılandırması oluşturma

Bu örnekte, bir kullanıcının verilerinde algılanan anomaliler için uyarı yapılandırmasını nasıl yapılandırabilirsiniz?

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

Uyarıyı sorgulama

Bu örnek, bir kullanıcının uyarı algılama yapılandırması için tetiklenen uyarıları nasıl sorgulay ve bu uyarı için anomalileri nasıl ala olduğunu gösterir.

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

Uygulamayı ile oluşturabilirsiniz:

gradle build

Uygulamayı çalıştırma

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

gradle run

Başvuru belgeleri | Kitaplık kaynak kodu | Paket (NPM) | Örnekler

Önkoşullar

  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • Node.js geçerli sürümü
  • Azure aboneliğiniz olduktan sonra, ölçüm Danışmanı örneğinizi dağıtmak için Azure Portal ölçüm Danışmanı kaynağı oluşturun.
  • zaman serisi verileriyle kendi SQL veritabanınız.

İpucu

  • JavaScript ölçüm Danışmanı örneklerini GitHubbulabilirsiniz.
  • Ölçüm Danışmanı kaynağınızın kullanabilmeniz için bir hizmet örneği dağıtması 10 ila 30 dakika sürebilir. Başarılı bir şekilde dağıtıldıktan sonra Kaynağa Git ' e tıklayın. Dağıtımdan sonra, ölçüm Danışmanı örneğinizi hem Web portalı hem de REST API kullanmaya başlayabilirsiniz.
  • Azure portal REST API URL 'sini kaynağınızın genel bakış bölümünde bulabilirsiniz. Şu şekilde görünür:
    • https://<instance-name>.cognitiveservices.azure.com/

Ayarlanıyor

Yeni bir Node.js uygulaması oluşturma

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

mkdir myapp && cd myapp

npm initBir dosya ile bir düğüm uygulaması oluşturmak için komutunu çalıştırın package.json .

npm init

İstemci kitaplığını yükler

@azure/ai-metrics-advisorNPM paketini yüklerken:

npm install @azure/ai-metrics-advisor

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

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

İpucu

Tüm hızlı başlangıç kodu dosyasını aynı anda görüntülemek mi istiyorsunuz? bu hızlı başlangıçta kod örneklerini içeren GitHubüzerinde bulabilirsiniz.

Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun.

Önemli

Azure portala gidin. Önkoşullar bölümünde oluşturduğunuz ölçüm Danışmanı kaynağı başarıyla dağıtılırsa, sonraki adımlar altında Kaynağa Git düğmesine tıklayın. Kaynak yönetimi altında, kaynağın anahtar ve uç nokta sayfasında abonelik Anahtarlarınızı ve uç noktanızı bulabilirsiniz.

API anahtarınızı almak için adresine gitmeniz gerekir https://metricsadvisor.azurewebsites.net . Kaynağınız için uygun: Dizin, abonelikler ve çalışma alanını seçin ve kullanmaya başlayın ' ı seçin. Bundan sonra API anahtarlarınızı adresinden alabilirsiniz https://metricsadvisor.azurewebsites.net/api-key .

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Daha fazla bilgi için bilişsel Hizmetler güvenlik makalesine bakın.

subscriptionKey = "<paste-your-metrics-advisor-key-here>";
apiKey ="<paste-your-metrics-advisor-api-key-here>";
endpoint = "<paste-your-metrics-advisor-endpoint-here>";

Nesne modeli

Aşağıdaki sınıflar ve arabirimler, ölçüm Danışmanı JavaScript SDK 'sının önemli özelliklerinden bazılarını işler.

Ad Açıklama
MetricsAdvisorClient Kullanım için:
-Olayları listeleme
-Olayların temel nedenini listeleme
-Özgün zaman serisi verileri ve zaman serisi verilerinin hizmet tarafından zenginleştirerek elde alınması.
-Uyarılar listeleniyor
-Modelinizi ayarlamak için geri bildirim ekleme
MetricsAdvisorAdministrationClient Şunları yapmanıza olanak sağlar:
-Veri akışlarını yönetme
-Anomali uyarı yapılandırması oluşturma, yapılandırma, alma, listeleme ve silme
-Kancaları Yönet
Veri akışı Veri kaynağından alınan ölçüm danışmanı. Şu DataFeed satırları içerir:
-Zaman damgaları
-Sıfır veya daha fazla boyut
-Bir veya daha fazla ölçü
DataFeedMetric , DataFeedMetric Belirli bir iş sürecinin durumunu izlemek ve değerlendirmek için kullanılan, ölçülebilir bir ölçüdür. Bu, boyutlara bölünen birden çok zaman serisi değerinin bir birleşimi olabilir. Örneğin, bir Web durumu ölçümü Kullanıcı sayısı ve en-US pazarında boyut içerebilir.

Kod örnekleri

Bu kod parçacıkları, JavaScript için ölçüm Danışmanı istemci kitaplığı ile aşağıdakilerin nasıl yapılacağını gösterir:

İstemcinin kimliğini doğrulama

İki anahtara ve uç nokta adresine sahip olduktan sonra, istemcilerin kimliğini doğrulamak için MetricsAdvisorKeyCredential sınıfını aşağıdaki şekilde kullanabilirsiniz:

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

Veri akışı Ekle

Ölçüm Danışmanı, farklı türlerde veri kaynaklarına bağlanmayı destekler. SQL Server verileri almak için bir örnek aşağıda verilmiştir.

sql_server_connection_stringkendi SQL server bağlantı dizeniz ile değiştirin ve query tek bir zaman damgasında verilerinizi döndüren bir sorguyla değiştirin. Ayrıca, metric ve dimension değerlerini özel verilerinize göre ayarlamanız gerekir.

Önemli

Sorgu her bir zaman damgasında her bir boyut birleşimi için en çok bir kayıt döndürmelidir. Ve sorgu tarafından döndürülen tüm kayıtlar aynı zaman damgalarına sahip olmalıdır. Ölçüm Danışmanı, verilerinizi almak için bu sorguyu her zaman damgası için çalıştırır. Daha fazla bilgi ve örnekler için öğreticiye bakın: geçerli bir sorgu yazın .

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

Alma durumunu denetle

Veri alımı başladıktan sonra, alma durumunu kontrol edebilirsiniz.

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

Anomali algılamayı yapılandırma

Zaman serisinde bir noktanın bir anomali olup olmadığını saptamak için anomali algılama yapılandırmasına ihtiyacımız var. Varsayılan algılama yapılandırması her ölçüm için otomatik olarak uygulanırken, özelleştirilmiş bir anomali algılama yapılandırması oluşturarak verilerinizde kullanılan algılama modlarını ayarlayabilirsiniz.

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

Kanca oluşturma

Gerçek zamanlı Uyarılara abone olmak için kancalar kullanıyoruz. Bu örnekte, uyarının NAKLEDILECEĞI ölçüm Danışmanı hizmeti için bir Web kancası oluşturacağız.


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

Uyarı yapılandırması oluşturma

Bu örnek, bir uyarının tetiklenmesi gerektiğini ve bir uyarı için hedef olarak hangi kancaların kullanılacağını nasıl yapılandıracağınızı gösterir.

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

Uyarıyı sorgulama

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

Uygulamayı çalıştırma

Uygulamayı node hızlı başlangıç dosyanızdaki komutla çalıştırın.

node index.js

Başvuru belgeleri | Kitaplık kaynak kodu | Paket (PiPy) | Örnekler

Önkoşullar

  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • Python 3.x
  • Azure aboneliğiniz olduktan sonra, ölçüm Danışmanı örneğinizi dağıtmak için Azure Portal ölçüm Danışmanı kaynağı oluşturun.
  • zaman serisi verileriyle kendi SQL veritabanınız.

İpucu

  • GitHubüzerinde Python ölçümleri Danışmanı örneklerini bulabilirsiniz.
  • Ölçüm Danışmanı kaynağınızın kullanabilmeniz için bir hizmet örneği dağıtması 10 ila 30 dakika sürebilir. Başarılı bir şekilde dağıtıldıktan sonra Kaynağa Git ' e tıklayın. Dağıtımdan sonra, ölçüm Danışmanı örneğinizi hem Web portalı hem de REST API kullanmaya başlayabilirsiniz.
  • Azure portal REST API URL 'sini kaynağınızın genel bakış bölümünde bulabilirsiniz. Şu şekilde görünür:
    • https://<instance-name>.cognitiveservices.azure.com/

Ayarlanıyor

İstemci kitaplığını yükler

Python yükledikten sonra, ile istemci kitaplığını yükleyebilirsiniz:

pip install azure-ai-metricsadvisor --pre

Yeni bir Python uygulaması oluşturma

Yeni bir Python dosyası oluşturun ve aşağıdaki kitaplıkları içeri aktarın.

import os
import datetime

Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun.

Önemli

Azure portala gidin. Önkoşullar bölümünde oluşturduğunuz ölçüm Danışmanı kaynağı başarıyla dağıtılırsa, sonraki adımlar altında Kaynağa Git düğmesine tıklayın. Kaynak yönetimi altında, kaynağın anahtar ve uç nokta sayfasında abonelik Anahtarlarınızı ve uç noktanızı bulabilirsiniz.

API anahtarınızı almak için adresine gitmeniz gerekir https://metricsadvisor.azurewebsites.net . Kaynağınız için uygun: Dizin, abonelikler ve çalışma alanını seçin ve kullanmaya başlayın ' ı seçin. Bundan sonra API anahtarlarınızı adresinden alabilirsiniz https://metricsadvisor.azurewebsites.net/api-key .

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün. Daha fazla bilgi için bilişsel Hizmetler güvenlik makalesine bakın.

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

Nesne modeli

Aşağıdaki sınıflar, ölçüm Danışmanı Python SDK 'sının önemli özelliklerinden bazılarını işler.

Ad Açıklama
MetricsAdvisorClient Kullanım için:
-Olayları listeleme
-Olayların temel nedenini listeleme
-Özgün zaman serisi verileri ve zaman serisi verilerinin hizmet tarafından zenginleştirerek elde alınması.
-Uyarılar listeleniyor
-Modelinizi ayarlamak için geri bildirim ekleme
MetricsAdvisorAdministrationClient Şunları yapmanıza olanak sağlar:
-Veri akışlarını yönetme
-Anomali algılama yapılandırması oluşturma, yapılandırma, alma, listeleme ve silme
-Anomali uyarı yapılandırması oluşturma, yapılandırma, alma, listeleme ve silme
-Kancaları Yönet
Veri akışı Veri kaynağından alınan ölçüm danışmanı. Şu DataFeed satırları içerir:
-Zaman damgaları
-Sıfır veya daha fazla boyut
-Bir veya daha fazla ölçü
DataFeedMetric , DataFeedMetric Belirli bir iş sürecinin durumunu izlemek ve değerlendirmek için kullanılan, ölçülebilir bir ölçüdür. Bu, boyutlara bölünen birden çok zaman serisi değerinin bir birleşimi olabilir. Örneğin, bir Web durumu ölçümü Kullanıcı sayısı ve en-US pazarında boyut içerebilir.

Kod örnekleri

Bu kod parçacıkları, Python için ölçüm Danışmanı istemci kitaplığı ile aşağıdakileri nasıl yapılacağını gösterir:

İstemcinin kimliğini doğrulama

Bu örnekteki istemci, MetricsAdvisorAdministrationClient uç noktanızı ve anahtarlarınızı içeren bir nesneyi kullanan bir nesnedir MetricsAdvisorKeyCredential . Bu kod örneğini kopyalamanız gerekmez. Daha sonra oluşturduğunuz Yöntemler istemcisini örneklendirilecek. Diğer istemci, MetricsAdvisorClient Bu istemci hakkında daha fazla bilgi olarak, başvuru belgelerindebulunabilir.

client = MetricsAdvisorAdministrationClient(service_endpoint,
                                MetricsAdvisorKeyCredential(subscription_key, api_key))

Veri akışı Ekle

Yeni bir yöntemde, aşağıdaki örnekte olduğu gibi içeri aktarma deyimleri oluşturun. sql_server_connection_stringkendi SQL server bağlantı dizeniz ile değiştirin ve query tek bir zaman damgasında verilerinizi döndüren bir sorguyla değiştirin. Ayrıca, DataFeedmetric ve DataFeedDimension değerlerini özel verilerinize göre ayarlamanız gerekir.

Önemli

Sorgu her bir zaman damgasında her bir boyut birleşimi için en çok bir kayıt döndürmelidir. Ve sorgu tarafından döndürülen tüm kayıtlar aynı zaman damgalarına sahip olmalıdır. Ölçüm Danışmanı, verilerinizi almak için bu sorguyu her zaman damgası için çalıştırır. Daha fazla bilgi ve örnek için öğreticiye bakın: geçerli bir sorgu yazın .

Anahtarlarınız ve uç noktanızla bir istemci oluşturun ve client.create_data_feed() ad, kaynak, ayrıntı düzeyi ve şemayı yapılandırmak için kullanın. Alma süresini, toplama ayarlarını ve daha fazlasını da ayarlayabilirsiniz.

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

Alma durumunu denetleme

Yeni bir yöntemde, aşağıdaki örnekte olduğu gibi bir içeri aktarma açıklaması oluşturun. data_feed_idOluşturduğunuz veri akışı kimliğiyle değiştirin. Anahtarlarınız ve uç noktanız ile bir istemci oluşturun ve client.list_data_feed_ingestion_status() alma ilerlemesini almak için kullanın. Son etkin ve başarılı zaman damgaları gibi ayrıntıları yazdırın.

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

Anomali algılamayı yapılandırma

Yeni bir yöntemde, aşağıdaki örnekte olduğu gibi içeri aktarma deyimleri oluşturun. metric_idYapılandırmak istediğiniz ölçümün kimliğiyle değiştirin. Anahtarlarınız ve uç noktanızla bir istemci oluşturun ve client.create_detection_configuration Yeni bir algılama yapılandırması oluşturmak için kullanın. Eşik koşulları anomali algılama için parametreleri belirtir.

    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

Kanca oluşturma

Yeni bir yöntemde, aşağıdaki örnekte olduğu gibi içeri aktarma deyimleri oluşturun. Anahtarlarınız ve uç noktanızla bir istemci oluşturun ve client.create_hook() bir kanca oluşturmak için kullanın. Bir açıklama, uyarının gönderileceği e-postaların bir listesini ve uyarıda görünecek bir dış bağlantıyı girin.

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

Uyarı yapılandırması oluşturma

Yeni bir yöntemde, aşağıdaki örnekte olduğu gibi içeri aktarma deyimleri oluşturun. detection_configuration_idAnomali algılama YAPıLANDıRMANıZıN kimliğiyle değiştirin ve öğesini hook_id daha önce oluşturduğunuz kanca ile değiştirin. Anahtarlarınız ve uç noktanızla bir istemci oluşturun ve client.create_alert_configuration() bir uyarı yapılandırması oluşturmak için kullanın.

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

Uyarıyı sorgulama

Yeni bir yöntemde, aşağıdaki örnekte olduğu gibi bir içeri aktarma açıklaması oluşturun. alert_idUyarınız için olan kimlikle değiştirin ve alert_config_id uyarı yapılandırma kimliğiyle değiştirin. Anahtarlarınız ve uç noktanız ile bir istemci oluşturun ve client.list_anomalies bir uyarının anorlarını listelemek için kullanın.

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

Uygulamayı çalıştırma

Uygulamayı python hızlı başlangıç dosyanızdaki komutla çalıştırın.

python quickstart-file.py

Önkoşullar

  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • Azure aboneliğiniz olduktan sonra, ölçüm Danışmanı örneğinizi dağıtmak için Azure Portal ölçüm Danışmanı kaynağı oluşturun.
  • Geçerli kıvrınsürümü. Bu makalede, kıvrımlı belgelerdebelirtilen birkaç komut satırı anahtarı kullanılır.
    • Aşağıdaki BASH örnekleri, \ satır devamlılık karakterini kullanır. Konsol veya Terminal farklı bir satır devamlılık karakteri kullanıyorsa, bu karakteri kullanın.

İpucu

  • GitHubREST API çağıran bir Python örneği bulabilirsiniz.
  • Ölçüm Danışmanı kaynağınızın kullanmanız için bir hizmet örneği dağıtması 10 ila 30 dakika olabilir. Başarılı bir şekilde dağıtıldıktan sonra Kaynağa Git ' e tıklayın. Dağıtımdan sonra, ölçüm Danışmanı örneğinizi hem Web portalı hem de REST API kullanmaya başlayabilirsiniz.
  • Azure portal REST API URL 'sini kaynağınızın genel bakış bölümünde bulabilirsiniz. şöyle görünür:
    • https://<instance-name>.cognitiveservices.azure.com/

REST API kullanmaya başlamak için iki anahtara ihtiyacınız olacaktır:

  • Ölçüm Danışmanı kaynağınızın anahtarı. Bunu, Azure portal kaynağınızın anahtarlar ve uç nokta bölümünde bulabilirsiniz.
    • Daha sonra Ocp-Apim-Subscription-Key örneklerde bu anahtarla değiştirirsiniz.
  • Ölçüm Danışmanı örneğiniz için API anahtarı. Bunu, ölçüm Danışmanı için web portalında, sol gezinti menüsündeki API tuşları bölümünde bulabilirsiniz.
    • Daha sonra x-api-key örneklerde bu anahtarla değiştirirsiniz.

Örnek veya veri kaynağından veri akışı ekleme

Zaman serisi verilerinizi izlemeye başlamak için bir veri akışı eklemeniz gerekir. Veri akışı eklemek için veri kaynağı türü ve parametrelerine göre bir veri şeması sağlamanız gerekir. Aşağıdaki JSON istek gövdesini üzerindebody.js adlı bir dosyaya kaydedin ve kıvrımlı komutunu çalıştırın.

{
        "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": ""
}

Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla ve JSON değerlerinizle düzenleyin.

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

Örnek yanıt

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

Yukarıdaki yanıtta, konum üstbilgisi oluşturduğunuz veri akışı URL 'Sidir ve Datafeedid'yi içerir.

Yukarıdaki URL 'yi kullanarak, önceki adımda oluşturduğunuz veri akışı hakkında ayrıntılı bilgileri sorgulayabilirsiniz. (Aşağıdaki adımlarda, veri akışı bilgilerinde metricID kullanacağız)

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"

Örnek yanıt

{
   "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"
   }
}

Alma durumunu denetle

Veri akışı eklendikten sonra, bir alım işinin ilerlemesini denetlemek isterseniz, onun durumunu kontrol edebilirsiniz. Aşağıdaki JSON istek gövdesini üzerindebody.js adlı bir dosyaya kaydedin ve kıvrımlı komutunu çalıştırın.

{
  "startTime": "2020-01-01T00:00:00.0000000+00:00",
  "endTime": "2020-01-04T00:00:00.0000000+00:00"
}

Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla, JSON değerlerinizle ve JSON boyutunda düzenleyin.

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

Örnek yanıt

{
  "@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"
    }
  ]
}

Anomali algılama yapılandırmasını Yapılandır

Varsayılan yapılandırma her ölçüm için otomatik olarak uygulandığında, verilerinizde kullanılan algılama modlarını ayarlayabilirsiniz. Aşağıdaki JSON istek gövdesini üzerindebody.js adlı bir dosyaya kaydedin ve kıvrımlı komutunu çalıştırın.

{
        "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": [
        ]
}

Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla, JSON değerlerinizle ve JSON boyutunda düzenleyin.

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

Örnek yanıt

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

Yukarıdaki konum üst bilgisinde, yeni oluşturulan kaynağın (algılama yapılandırması) URL 'sini içerir.

Konum üst bilgisinde yukarıdaki URL 'yi kullanarak, oluşturduğunuz algılama yapılandırmasını sorgulayabilir (aşağıdaki adımlarda yanıt Içeriği için anomalyDetectionConfigurationId kullanacağız)

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"

Örnek yanıt

{
   "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":[
      
   ]
}

Uyarı yapılandırmasını Yapılandır

Uyarıyı yapılandırmadan önce, uyarıyı bilgilendirmek için kullanılacak bir kanca oluşturmanız gerekir. Web kancası ve e-posta olan bir uyarı tetiklendiğinde bildirim almanın iki yolu vardır. Kanca oluştururken kanca türü olarak bu bunlardan birini kanca içinde belirtebilirsiniz.

Aşağıdaki JSON istek gövdesini üzerindebody.js adlı bir dosyaya kaydedin ve kıvrımlı komutunu çalıştırın.

{
        "hookType": "Webhook",
        "hookName": "test_web_hook000001",
        "description": "",
        "externalLink": "",
        "hookParameter": {
            "endpoint": "https://www.xxx.com/aaa",
            "username": "",
            "password": ""
        }
}

Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla, JSON değerlerinizle ve JSON boyutunda düzenleyin.

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

Örnek yanıt

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

Konum üst bilgisinde yukarıdaki URL 'yi kullanarak, oluşturduğunuz Web kancasını sorgulayabilirsiniz.

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"

Örnek yanıt

{
   "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":""

   }
}

Uyarı yapılandırmasını yapılandırarak, uyarının tetiklenmesi için kullanılabilecek algılama koşulu belirtebilirsiniz. Aşağıdaki JSON istek gövdesini üzerindebody.js adlı bir dosyaya kaydedin ve kıvrımlı komutunu çalıştırın.

{
        "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
                },
            }
        ]
}

Kıvral komutu bir BASH kabuğundan yürütülür. Bu komutu kendi kaynak adınızla, kaynak anahtarınızla, JSON değerlerinizle ve JSON boyutunda düzenleyin.

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

Örnek yanıt

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

Yukarıdaki konum üst bilgisinde, yeni oluşturulan kaynağın (algılama yapılandırması) URL 'sini içerir.

Konum üst bilgisinde yukarıdaki URL 'yi kullanarak, oluşturduğunuz uyarı yapılandırmasını sorgulayabilirsiniz. (Aşağıdaki adımlarda, uyarı yapılandırmasında Anoyalertingconfigurationıd kullanacağız)

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"

Örnek yanıt

{
   "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
         }
      }
   ]
}

Sorgu anomali algılama sonuçları

Algılama sonucunu almanın farklı yolları vardır. Örneğin, algılama işlemini oluşturduğunuz algılama yapılandırmasını kullanarak düzenli aralıklarla etkin bir şekilde sorgulayabilir veya uyarı aracılığıyla size bildirimde bulunabilir ve ardından bu uyarıyı kullanarak ilgili bozukluklar sorgulayabilirsiniz.

Aşağıdaki örnekte, uyarının nasıl sorgulandığından ve Bu uyarıyla ilgili anormallikleri sorgulamak için bu uyarının nasıl kullanılacağı gösterilmektedir.

Sorgu uyarısı

Uyarıyı sorgulamak için yukarıdaki adımda oluşturulan uyarı yapılandırması ' nı kullanabilirsiniz.

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"

Örnek yanıt

{
   "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
}

Yukarıdaki yanıtta bir uyarı aldık. Bu AlertId'yi kullanarak, ilgili tüm anormallikleri bu uyarıya neden olacak şekilde sorgulayabilir.

(Uyarı almanın başka bir yolu da Web kancasını yapılandırmaktır ve bulunduğunda kapsamlı olarak Uyarı alındı)

AlertId kullanarak anomali sorgula

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"

Örnek yanıt

{
   "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
}

Kaynakları temizleme

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

Sonraki adımlar