Criar programaticamente um monitor de trabalho do Stream Analytics

Este artigo demonstra como habilitar o monitoramento para um trabalho do Stream Analytics. Os trabalhos do Stream Analytics criados por meio de APIs REST, SDK do Azure ou PowerShell não têm o monitoramento habilitado por padrão. Você pode habilitá-lo manualmente no portal do Azure acessando a página Monitor do trabalho e clicando no botão Habilitar ou pode automatizar esse processo seguindo as etapas neste artigo. Os dados de monitoramento aparecerão na área Métricas do portal do Azure para seu trabalho do Stream Analytics.

Pré-requisitos

Antes de iniciar esse processo, você deve ter os seguintes pré-requisitos:

  • Visual Studio 2019 ou 2015
  • SDK do Azure .NET baixado e instalado
  • Um trabalho existente do Stream Analytics que precisa ter o monitoramento habilitado

Criar um projeto

  1. Crie um aplicativo de console do Visual Studio C# .NET.

  2. No Console do Gerenciador de Pacotes, execute os seguintes comandos para instalar os pacotes NuGet. O primeiro é o SDK .NET do Azure Stream Analytics Management. O segundo é o SDK do Azure Monitor que será usado para habilitar o monitoramento. O último é o cliente Microsoft Entra que será usado para autenticação.

    Install-Package Microsoft.Azure.Management.StreamAnalytics
    Install-Package Microsoft.Azure.Insights -Pre
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  3. Adicione a seguinte seção appSettings ao arquivo 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>
    

    Substitua valores para SubscriptionId e ActiveDirectoryTenantId por sua assinatura do Azure e IDs de locatário. Você pode obter esses valores executando o seguinte cmdlet do PowerShell:

    Get-AzureAccount
    
  4. Adicione o seguinte ao utilizar instruções para o ficheiro de origem (Program.cs) no projeto.

      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. Adicione um método auxiliar de autenticação.

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

Criar clientes de gestão

O código a seguir configurará as variáveis necessárias e os clientes de gerenciamento.

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

Habilitar o monitoramento para um trabalho existente do Stream Analytics

O código a seguir permite o monitoramento de um trabalho existente do Stream Analytics. A primeira parte do código executa uma solicitação GET no serviço Stream Analytics para recuperar informações sobre o trabalho específico do Stream Analytics. Ele usa a propriedade ID (recuperada da solicitação GET) como um parâmetro para o método Put na segunda metade do código, que envia uma solicitação PUT para o serviço Insights para habilitar o monitoramento do trabalho do Stream Analytics.

Aviso

Se você habilitou anteriormente o monitoramento para um trabalho diferente do Stream Analytics, por meio do portal do Azure ou programaticamente por meio do código abaixo, recomendamos que forneça o mesmo nome de conta de armazenamento que usou quando habilitou o monitoramento anteriormente.

A conta de armazenamento está vinculada à região na qual você criou o trabalho do Stream Analytics, não especificamente ao trabalho em si.

Todos os trabalhos do Stream Analytics (e todos os outros recursos do Azure) nessa mesma região compartilham essa conta de armazenamento para armazenar dados de monitoramento. Se você fornecer uma conta de armazenamento diferente, isso poderá causar efeitos colaterais não intencionais no monitoramento de seus outros trabalhos do Stream Analytics ou outros recursos do Azure.

O nome da conta de armazenamento que você usa para substituir <YOUR STORAGE ACCOUNT NAME> no código a seguir deve ser uma conta de armazenamento que esteja na mesma assinatura do trabalho do Stream Analytics para o qual você está habilitando o monitoramento.

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

Obter suporte

Para obter mais assistência, experimente a nossa página de perguntas e respostas da Microsoft para o Azure Stream Analytics.

Próximos passos