Programowe tworzenie monitora zadań usługi Stream Analytics

W tym artykule pokazano, jak włączyć monitorowanie zadania usługi Stream Analytics. Zadania usługi Stream Analytics tworzone za pośrednictwem interfejsów API REST, zestawu Azure SDK lub programu PowerShell nie mają domyślnie włączonego monitorowania. Możesz ją włączyć ręcznie w witrynie Azure Portal, przechodząc do strony Monitorowanie zadania i klikając przycisk Włącz. Możesz też zautomatyzować ten proces, wykonując kroki opisane w tym artykule. Dane monitorowania będą wyświetlane w obszarze Metryki witryny Azure Portal dla zadania usługi Stream Analytics.

Wymagania wstępne

Przed rozpoczęciem tego procesu należy spełnić następujące wymagania wstępne:

  • Visual Studio 2019 lub 2015
  • Pobrany i zainstalowany zestaw SDK platformy Azure .NET
  • Istniejące zadanie usługi Stream Analytics, które musi mieć włączone monitorowanie

Tworzenie projektu

  1. Utwórz aplikację konsolową programu Visual Studio C# .NET.

  2. W konsoli Menedżer pakietów uruchom następujące polecenia, aby zainstalować pakiety NuGet. Pierwszy z nich to zestaw SDK platformy .NET do zarządzania usługą Azure Stream Analytics. Drugi to zestaw SDK usługi Azure Monitor, który będzie używany do włączania monitorowania. Ostatnim z nich jest klient Firmy Microsoft Entra, który będzie używany do uwierzytelniania.

    Install-Package Microsoft.Azure.Management.StreamAnalytics
    Install-Package Microsoft.Azure.Insights -Pre
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  3. Dodaj następującą sekcję app Ustawienia do pliku App.config.

    <appSettings>
      <!--CSM Prod related values-->
      <add key="ResourceGroupName" value="RESOURCE GROUP NAME" />
      <add key="JobName" value="YOUR JOB NAME" />
      <add key="StorageAccountName" value="YOUR STORAGE ACCOUNT"/>
      <add key="ActiveDirectoryEndpoint" value="https://login.microsoftonline.com/" />
      <add key="ResourceManagerEndpoint" value="https://management.azure.com/" />
      <add key="WindowsManagementUri" value="https://management.core.windows.net/" />
      <add key="AsaClientId" value="1950a258-227b-4e31-a9cf-717495945fc2" />
      <add key="RedirectUri" value="urn:ietf:wg:oauth:2.0:oob" />
      <add key="SubscriptionId" value="YOUR AZURE SUBSCRIPTION ID" />
      <add key="ActiveDirectoryTenantId" value="YOUR TENANT ID" />
    </appSettings>
    

    Zastąp wartości SubscriptionId i ActiveDirectoryTenantId swoimi identyfikatorami subskrypcji i dzierżawy platformy Azure. Te wartości można uzyskać, uruchamiając następujące polecenie cmdlet programu PowerShell:

    Get-AzureAccount
    
  4. Dodaj następujące instrukcje using do pliku źródłowego (Program.cs) w projekcie.

      using System;
      using System.Configuration;
      using System.Threading;
      using Microsoft.Azure;
      using Microsoft.Azure.Management.Insights;
      using Microsoft.Azure.Management.Insights.Models;
      using Microsoft.Azure.Management.StreamAnalytics;
      using Microsoft.Azure.Management.StreamAnalytics.Models;
      using Microsoft.IdentityModel.Clients.ActiveDirectory;
    
  5. Dodaj metodę pomocnika uwierzytelniania.

    public static string GetAuthorizationHeader()
    {
       AuthenticationResult result = null;
       var thread = new Thread(() =>
       {
          try
          {
              var context = new AuthenticationContext(
                 ConfigurationManager.AppSettings["ActiveDirectoryEndpoint"] +
                 ConfigurationManager.AppSettings["ActiveDirectoryTenantId"]);
              result = context.AcquireToken(
                  resource: ConfigurationManager.AppSettings["WindowsManagementUri"],
                  clientId: ConfigurationManager.AppSettings["AsaClientId"],
                  redirectUri: new Uri(ConfigurationManager.AppSettings["RedirectUri"]),
                  promptBehavior: PromptBehavior.Always);
          }
          catch (Exception threadEx)
          {
              Console.WriteLine(threadEx.Message);
          }
      });
    
      thread.SetApartmentState(ApartmentState.STA);
      thread.Name = "AcquireTokenThread";
      thread.Start();
      thread.Join();
    
      if (result != null)
      {
          return result.AccessToken;
      }
          throw new InvalidOperationException("Failed to acquire token");
    }
    

Tworzenie klientów zarządzania

Poniższy kod skonfiguruje niezbędne zmienne i klientów zarządzania.

 string resourceGroupName = "<YOUR AZURE RESOURCE GROUP NAME>";
 string streamAnalyticsJobName = "<YOUR STREAM ANALYTICS JOB NAME>";

 // Get authentication token
 TokenCloudCredentials aadTokenCredentials =
     new TokenCloudCredentials(
         ConfigurationManager.AppSettings["SubscriptionId"],
         GetAuthorizationHeader());

 Uri resourceManagerUri = new
 Uri(ConfigurationManager.AppSettings["ResourceManagerEndpoint"]);

 // Create Stream Analytics and Insights management client
 StreamAnalyticsManagementClient streamAnalyticsClient = new
 StreamAnalyticsManagementClient(aadTokenCredentials, resourceManagerUri);
 InsightsManagementClient insightsClient = new
 InsightsManagementClient(aadTokenCredentials, resourceManagerUri);

Włączanie monitorowania dla istniejącego zadania usługi Stream Analytics

Poniższy kod umożliwia monitorowanie istniejącego zadania usługi Stream Analytics. Pierwsza część kodu wykonuje żądanie GET względem usługi Stream Analytics w celu pobrania informacji o konkretnym zadaniu usługi Stream Analytics. Używa właściwości ID (pobranej z żądania GET) jako parametru metody Put w drugiej połowie kodu, która wysyła żądanie PUT do usługi Szczegółowe informacje w celu włączenia monitorowania zadania usługi Stream Analytics.

Ostrzeżenie

Jeśli wcześniej włączono monitorowanie dla innego zadania usługi Stream Analytics, za pośrednictwem witryny Azure Portal lub programowo za pośrednictwem poniższego kodu, zalecamy podanie tej samej nazwy konta magazynu użytego podczas wcześniejszego włączenia monitorowania.

Konto magazynu jest połączone z regionem, w którym utworzono zadanie usługi Stream Analytics, a nie specjalnie z samym zadaniem.

Wszystkie zadania usługi Stream Analytics (i wszystkie inne zasoby platformy Azure) w tym samym regionie współdzielą to konto magazynu do przechowywania danych monitorowania. Jeśli podasz inne konto magazynu, może to spowodować niezamierzone skutki uboczne w monitorowaniu innych zadań usługi Stream Analytics lub innych zasobów platformy Azure.

Nazwa konta magazynu używana do zamiany <YOUR STORAGE ACCOUNT NAME> w poniższym kodzie powinna być kontem magazynu, które znajduje się w tej samej subskrypcji co zadanie usługi Stream Analytics, dla którego włączono monitorowanie.

// Get an existing Stream Analytics job
 JobGetParameters jobGetParameters = new JobGetParameters()
 {
     PropertiesToExpand = "inputs,transformation,outputs"
 };
 JobGetResponse jobGetResponse = streamAnalyticsClient.StreamingJobs.Get(resourceGroupName, streamAnalyticsJobName, jobGetParameters);

// Enable monitoring
ServiceDiagnosticSettingsPutParameters insightPutParameters = new ServiceDiagnosticSettingsPutParameters()
{
        Properties = new ServiceDiagnosticSettings()
       {
           StorageAccountName = "<YOUR STORAGE ACCOUNT NAME>"
       }
};
insightsClient.ServiceDiagnosticSettingsOperations.Put(jobGetResponse.Job.Id, insightPutParameters);

Uzyskiwanie pomocy technicznej

Aby uzyskać dalszą pomoc, wypróbuj stronę pytań i odpowiedzi firmy Microsoft dotyczącą usługi Azure Stream Analytics.

Następne kroki