Monitoramento de aplicativos para o Serviço de Aplicativo do Azure e Java

O monitoramento de seus aplicativos Web Java em execução nos Serviços de Aplicativos do Azure não exige nenhuma modificação no código. Este artigo orienta você na habilitação do monitoramento do Application Insights do Azure Monitor e oferece diretrizes preliminares para automatizar o processo para implantações em grande escala.

Observação

Com os aplicativos Spring Boot Native Image, use o projeto Azure Monitor OpenTelemetry Distro/Application Insights no aplicativo Java de imagem nativa do Spring Boot em vez da solução de agente Java do Application Insights descrita abaixo.

Habilitar o Application Insights

A maneira recomendada de habilitar o monitoramento de aplicativos para aplicativos Java em execução nos Serviços de Aplicativos do Azure é por meio de portal do Azure. A ativação do monitoramento de aplicativos no portal do Azure habilitará automaticamente o Application Insights para o seu aplicativo e não exige nenhuma alteração de código. Você pode aplicar outras configurações e, em seguida, com base em seu cenário específico, adicionar a sua telemetria personalizada se necessário.

Instrumentação automática por meio do portal do Azure

Você pode ativar o monitoramento para seus aplicativos Java em execução no Serviço de Aplicativo do Azure apenas com uma seleção, nenhuma alteração de código é necessária. A integração adiciona o Application Insights Java 3.x e coleta automaticamente a telemetria.

Para obter uma lista completa dos cenários de autoinstrumentação suportados, confira Ambientes, linguagens e provedores de recursos suportados.

  1. Selecione o Application Insights no painel de controle do Azure do seu serviço de aplicativo, seguido de Habilitar.

    Captura de tela da guia Application Insights com a opção Habilitar selecionada.

  2. Opte por criar um recurso, a menos que você já tenha configurado um recurso do Application Insights para este aplicativo.

    Observação

    Ao selecionar OK para criar o recurso, você será solicitado a Aplicar configurações de monitoramento. Se você selecionar Continuar, vinculará seu novo recurso do Application Insights ao seu serviço de aplicativo. Fazer isso também disparará uma reinicialização do seu serviço de aplicativo.

    Captura de tela do menu suspenso Alterar seu recurso.

  3. Esta última etapa é opcional. Depois de especificar qual recurso usar, você pode configurar o agente Java. Se você não configurar o agente Java, as configurações padrão serão aplicadas.

    O conjunto de configurações completo está disponível, você só precisa colar um arquivo json válido. Exclua a cadeia de conexão e as configurações que estão na versão prévia – você pode adicionar itens que estejam em versão prévia à medida que entrarem em disponibilidade geral.

    Depois de modificar as configurações por no portal do Azure, a variável de ambiente APPLICATIONINSIGHTS_CONFIGURATION_FILE será preenchida automaticamente e aparecerá no painel de configurações do Serviço de Aplicativo. Essa variável contém o conteúdo JSON completo que você colou na caixa de texto de configuração do portal do Azure para o seu aplicativo Java.

    Captura de tela da instrumentação do seu aplicativo.

Habilitar monitoramento do lado do cliente

Para habilitar o monitoramento do lado do cliente para seu aplicativo Java, você precisa adicionar manualmente o SDK JavaScript do lado do cliente ao seu aplicativo.

Automatizar monitoramento

Para habilitar a coleta de telemetria com o Application Insights, somente as seguintes configurações do aplicativo precisam ser definidas:

Captura de tela das Configurações de Aplicativo do Serviço de Aplicativo com configurações do Application Insights disponíveis.

Definições de configurações do aplicativo

Nome da configuração do aplicativo Definição Valor
ApplicationInsightsAgent_EXTENSION_VERSION Extensão principal, que controla o monitoramento do tempo de execução. ~2 no Windows ou ~3 no Linux.
XDT_MicrosoftApplicationInsights_Java Sinalizador para controlar se o agente Java está incluído. 0 ou 1 (aplicável somente no Windows).

Observação

O Profiler e o Depurador de Instantâneos não estão disponíveis para aplicativos Java

Configurações de aplicativo do Serviço de Aplicativo com o Azure Resource Manager

As configurações de aplicativo do Serviço de Aplicativo do Azure podem ser gerenciadas e configuradas com os modelos do Azure Resource Manager. Você pode usar esse método ao implantar novos recursos de Serviço de Aplicativo com a automação do Resource Manager ou modificar as configurações dos recursos existentes.

A estrutura básica das configurações do aplicativo JSON para um recurso do Serviço de Aplicativo:

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

Para ver um exemplo de um modelo do Resource Manager com configurações de aplicativo definidas para o Application Insights, esse modelo pode ser útil. Especificamente, confira a seção que começa na linha 238.

Para criar um modelo do Resource Manager com as configurações do Application Insights padrão, inicie o processo como se estivesse criando um novo aplicativo Web com o Application Insights habilitado.

  1. Crie um novo recurso do Serviço de Aplicativo com as informações desejadas do aplicativo Web. Habilite o Application Insights na guia Monitoramento.

  2. Selecione Examinar + criar. Em seguida, selecione Baixar um modelo para automação.

    Captura de tela que mostra o menu de criação do aplicativo Web do Serviço de Aplicativo.

    Essa opção gera o modelo do Resource Manager mais recente com todas as configurações necessárias definidas.

    Captura de tela que mostra um modelo de aplicativo Web Serviço de Aplicativo.

No exemplo a seguir, substitua todas as instâncias de AppMonitoredSite pelo nome do seu site:

Observação

Se estiver usando o Windows, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~2. Se estiver usando o Linux, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~3.

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

Ativar através do Powershell

Para habilitar o monitoramento de aplicativos por meio do PowerShell, somente as configurações de aplicativo subjacentes devem ser alteradas. O exemplo a seguir habilita o monitoramento de aplicativos para um site chamado AppMonitoredSite no grupo de recursos AppMonitoredRG. Ele configura os dados a serem enviados para a chave de instrumentação 012345678-abcd-ef01-2345-6789abcd.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Observação

Se estiver usando o Windows, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~2. Se estiver usando o Linux, defina ApplicationInsightsAgent_EXTENSION_VERSION como ~3.

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Solução de problemas

Use o guia de solução de problemas passo a passo para aplicativos baseados em Java em execução nos Serviços de Aplicativos do Azure.

  1. Verifique se a configuração do aplicativo ApplicationInsightsAgent_EXTENSION_VERSION está definida em um valor de "~ 2" no Windows ou "~3" no Linux

  2. Examine o arquivo de log para ver se o agente foi iniciado com êxito: navegue até `https://yoursitename.scm.azurewebsites.net/ e, em SSH, acesse o diretório raiz. O arquivo de log está localizado em LogFiles/ApplicationInsights.

    Captura de tela do link acima da página de resultados.

  3. Depois de habilitar o monitoramento de aplicativos em seu aplicativo Java, valide se o agente está funcionando por meio da observação das métricas ao vivo – mesmo antes de implantar um aplicativo no Serviço de Aplicativo, você verá algumas solicitações do ambiente. Lembre-se de que o conjunto completo de telemetria só fica disponível quando o aplicativo está implantado e em execução.

  4. Defina a variável de ambiente APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL como "debug" se você não vir erros e não houver telemetria

Qual a diferença entre as métricas padrão das métricas do serviço Application Insights vs Aplicativo do Azure?

O Application Insights coleta a telemetria das solicitações que chegaram no aplicativo. Se a falha ocorreu no WebApps/WebServer e a solicitação não chegou ao aplicativo do usuário, o Application Insights não terá telemetrias sobre ele.

A duração da serverresponsetime calculada pelo Application Insights não corresponderá necessariamente ao tempo de resposta do servidor observado pelos aplicativos Web. Esse comportamento ocorre porque o Application Insights só conta a duração quando a solicitação realmente chega ao aplicativo do usuário. Se a solicitação estiver presa ou enfileirada no WebServer, o tempo de espera será incluído nas métricas dos aplicativos Web, mas não nas métricas do Application Insights.

Testar a conectividade entre o host do aplicativo e o serviço de ingestão

Os SDKs e agentes do Application Insights enviam telemetria para serem ingeridos como chamadas REST para nossos pontos de extremidade de ingestão. Você pode testar a conectividade do servidor Web ou do computador host do aplicativo para os pontos de extremidade do serviço de ingestão usando clientes REST brutos do PowerShell ou comandos curl. Confira Solucionar problemas de telemetria de aplicativo ausente no Application Insights do Azure Monitor.

Implantar manualmente a versão mais recente do Java do Application Insights

A versão Java do Application Insights é atualizada automaticamente como parte das atualizações dos Serviços de Aplicativo.

Se você encontrar um problema que foi corrigido na versão mais recente do Java do Application Insights, atualize-o manualmente.

Para atualizar manualmente, siga estas etapas:

  1. Carregar o arquivo JAR do agente Java para o Serviço de Aplicativo

    a. Primeiro, obtenha a versão mais recente da CLI do Azure seguindo estas instruções.

    b. Em seguida, obtenha a versão mais recente do agente Java do Application Insights seguindo estas instruções.

    c. Em seguida, implante o arquivo jar do agente do Java do Serviço de Aplicativo usando o seguinte comando: az webapp deploy --src-path applicationinsights-agent-{VERSION_NUMBER}.jar --target-path java/applicationinsights-agent-{VERSION_NUMBER}.jar --type static --resource-group {YOUR_RESOURCE_GROUP} --name {YOUR_APP_SVC_NAME}. Você também pode usar este guia para implantar o agente por meio do plug-in do Maven.

  2. Desabilite o Application Insights por meio da guia Application Insights no portal do Azure.

  3. Depois que o arquivo jar do agente for carregado, acesse as configurações do Serviço de Aplicativo. Se precisar usar o Comando de Inicialização para o Linux, inclua argumentos jvm:

    Captura de tela da saída do comando.

    O Comando de Inicialização não é válido JAVA_OPTS para o JavaSE ou CATALINA_OPTS para o Tomcat.

    Se você não usar o Comando de Inicialização, crie uma nova variável de ambiente, JAVA_OPTS para JavaSE ou CATALINA_OPTS para Tomcat, com o valor -javaagent:{PATH_TO_THE_AGENT_JAR}/applicationinsights-agent-{VERSION_NUMBER}.jar.

  4. Reinicie o aplicativo para aplicar as alterações.

Observação

Se você definir a variável de ambiente JAVA_OPTS para JavaSE ou CATALINA_OPTS para Tomcat, será preciso desabilitar o Application Insights no portal. Como alternativa, se você preferir habilitar o Application Insights no portal, não defina a variável JAVA_OPTS para JavaSE ou CATALINA_OPTS para Tomcat nas definições de configurações do Serviço de Aplicativo.

Notas de versão

Para obter as atualizações e as correções de bugs mais recentes, confira as notas sobre a versão.

Próximas etapas