Azure App Service 및 Java에 대한 애플리케이션 모니터링

Azure App Services에서 실행되는 Java 웹 애플리케이션 모니터링에는 코드를 수정할 필요가 없습니다. 이 문서에서는 Azure Monitor Application Insights 모니터링을 사용하도록 설정하는 과정을 안내하고 대규모 배포 프로세스를 자동화하기 위한 예비 지침을 제공합니다.

참고 항목

Spring Boot 네이티브 이미지 애플리케이션에서는 아래에 설명된 Application Insights Java 에이전트 솔루션 대신 Java 애플리케이션 프로젝트에서 Azure Monitor OpenTelemetry Distro/Application Insights를 사용합니다.

Application Insights 사용

Azure App Services에서 실행되는 Java 애플리케이션에 대한 애플리케이션 모니터링을 사용하도록 설정하는 권장 방법은 Azure Portal을 사용하는 것입니다. Azure Portal에서 애플리케이션 모니터링을 켜면 Application Insights로 애플리케이션이 자동으로 계측되며 코드를 변경할 필요가 없습니다. 추가 구성을 적용한 다음, 특정 시나리오에 따라 필요한 경우 자체 사용자 지정 원격 분석을 추가할 수 있습니다.

Azure Portal을 통한 자동 계측

코드를 변경할 필요 없이 한 번 선택만으로 Azure App Service에서 실행되는 Java 앱에 대한 모니터링을 켤 수 있습니다. 통합은 Application Insights Java 3.x를 추가하고 원격 분석을 자동으로 수집합니다.

지원되는 자동 계측 시나리오의 전체 목록은 지원되는 환경, 언어 및 리소스 공급자를 참조하세요.

  1. App Service의 Azure 제어판에서 Application Insights를 선택한 다음 사용을 선택합니다.

    사용이 선택된 Application Insights 탭의 스크린샷.

  2. 새 리소스를 만들도록 선택하거나 이 애플리케이션에 대한 기존 Application Insights 리소스를 선택합니다.

    참고 항목

    확인을 선택하여 새 리소스를 만들면 모니터링 설정 적용 메시지가 표시됩니다. 계속을 선택하면 새 Application Insights 리소스가 App Service에 연결됩니다. 또한 이로 인해 App Service 다시 시작이 트리거됩니다.

    리소스 변경 드롭다운의 스크린샷.

  3. 이 마지막 단계는 선택 사항입니다. 사용할 리소스를 지정한 후 Java 에이전트를 구성할 수 있습니다. Java 에이전트를 구성하지 않으면 기본 구성이 적용됩니다.

    전체 구성 집합을 사용할 수 있으며 유효한 json 파일을 붙여넣기만 하면 됩니다. 미리 보기에 있는 연결 문자열 및 구성 제외 - 현재 미리 보기에 있는 항목이 일반 공급되면 추가할 수 있습니다.

    Azure Portal을 통해 구성을 수정하면 APPLICATIONINSIGHTS_CONFIGURATION_FILE 환경 변수가 자동으로 채워지고 App Service 설정 패널에 나타납니다. 이 변수에는 Java 앱의 Azure Portal 구성 텍스트 상자에 붙여넣은 전체 json 콘텐츠가 포함됩니다.

    애플리케이션 계측의 스크린샷.

클라이언트 쪽 모니터링 사용

Java 애플리케이션의 클라이언트 쪽 모니터링을 사용하려면 클라이언트 쪽 JavaScript SDK를 애플리케이션에 수동으로 추가해야 합니다.

모니터링 자동화

Application Insights로 원격 분석 컬렉션을 사용하려면 다음 애플리케이션 설정만 설정하면 됩니다.

사용 가능한 Application Insights 설정을 사용한 App Service 애플리케이션 설정의 스크린샷.

애플리케이션 설정 정의

앱 설정 이름 정의
ApplicationInsightsAgent_EXTENSION_VERSION 런타임 모니터링을 제어하는 기본 확장입니다. ~2 Windows 또는 ~3 Linux
XDT_MicrosoftApplicationInsights_Java Java 에이전트 포함 여부를 제어하는 플래그입니다. 0 또는 1(Windows에만 해당).

참고 항목

프로파일러 및 스냅샷 디버거는 Java 애플리케이션에 사용할 수 없습니다.

Azure Resource Manager를 사용한 App Service 애플리케이션 설정

Azure App Service에 대한 애플리케이션 설정은 Azure Resource Manager 템플릿으로 관리 및 구성할 수 있습니다. Resource Manager 자동화를 사용하여 새 App Service 리소스를 배포하거나 기존 리소스의 설정을 수정할 때 이 방법을 사용할 수 있습니다.

App Service 리소스에 대한 애플리케이션 설정 JSON의 기본 구조:

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

Application Insights에 대해 구성된 애플리케이션 설정이 포함된 Resource Manager 템플릿의 예제에서는 이 템플릿이 유용할 수 있습니다. 특히 238행에서 시작하는 섹션을 참조하세요.

기본 Application Insights 설정을 사용하여 Resource Manager 템플릿을 만들려면 Application Insights를 사용하도록 설정하여 새 웹앱을 만들려는 것처럼 프로세스를 시작합니다.

  1. 원하는 웹앱 정보로 새 App Service 리소스를 만듭니다. 모니터링 탭에서 Application Insights를 사용하도록 설정합니다.

  2. 검토 + 만들기를 선택합니다. 그런 다음 자동화용 템플릿 다운로드를 선택합니다.

    App Service 웹앱 만들기 메뉴를 보여 주는 스크린샷

    이 옵션은 모든 필수 설정이 구성된 최신 Resource Manager 템플릿을 생성합니다.

    App Service 웹앱 템플릿을 보여 주는 스크린샷.

다음 샘플에서 AppMonitoredSite의 모든 인스턴스를 사이트 이름으로 바꿉니다.

참고 항목

Windows를 사용하는 경우 ApplicationInsightsAgent_EXTENSION_VERSION을(를) ~2(으)로 설정합니다. Linux를 사용하는 경우 ApplicationInsightsAgent_EXTENSION_VERSION을(를) ~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"
}

PowerShell을 통해 사용

PowerShell을 통해 애플리케이션 모니터링을 사용하도록 설정하려면 기본 애플리케이션 설정만 변경해야 합니다. 다음 샘플은 리소스 그룹 AppMonitoredRG에서 AppMonitoredSite라는 웹 사이트에 대한 애플리케이션 모니터링을 사용하도록 설정합니다. 012345678-abcd-ef01-2345-6789abcd 계측 키로 전송되는 데이터를 구성합니다.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

참고 항목

Windows를 사용하는 경우 ApplicationInsightsAgent_EXTENSION_VERSION을 ~2(으)로 설정합니다. Linux를 사용하는 경우 ApplicationInsightsAgent_EXTENSION_VERSION을 ~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

문제 해결

단계별 가이드를 사용하여 Azure App Services에서 실행되는 Java 기반 애플리케이션의 문제를 해결합니다.

  1. ApplicationInsightsAgent_EXTENSION_VERSION 앱 설정이 Windows의 경우 "~2", Linux의 경우 "~3" 값으로 설정되어 있는지 확인합니다.

  2. 로그 파일을 검사하여 에이전트가 성공적으로 시작되었는지 확인합니다. `https://yoursitename.scm.azurewebsites.net/로 이동하여 SSH 변경 루트 디렉터리의 LogFiles/ApplicationInsights 아래에서 로그 파일을 확인합니다.

    결과 페이지 위에 있는 링크의 스크린샷.

  3. Java 앱에 대한 애플리케이션 모니터링을 사용하도록 설정한 후 라이브 메트릭을 보고 에이전트가 작동하는지 유효성 검사할 수 있습니다. App Service에 배포하고 앱을 배포하기 전에도 환경의 일부 요청이 표시됩니다. 전체 원격 분석 세트는 앱을 배포하고 실행하는 경우에만 사용할 수 있습니다.

  4. 오류가 표시되지 않고 원격 분석이 없는 경우 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL 환경 변수를 '디버그'로 설정합니다.

Application Insights의 표준 메트릭과 Azure App Service 메트릭의 차이점은 무엇인가요?

Application Insights는 애플리케이션에 대한 요청에 대한 원격 분석을 수집합니다. WebApps/WebServer에서 오류가 발생했고 요청이 사용자 애플리케이션에 도달하지 못한 경우 Application Insights는 이에 대한 원격 분석을 하지 않습니다.

Application Insights에서 계산한 serverresponsetime의 기간은 Web Apps에서 관찰한 서버 응답 시간과 반드시 일치하지는 않습니다. 이 동작은 Application Insights가 요청이 실제로 사용자 애플리케이션에 도달하는 기간만 계산하기 때문입니다. 요청이 WebServer에서 멈추거나 대기 중인 경우 대기 시간은 Web Apps 메트릭에 포함되지만 Application Insights 메트릭에는 포함되지 않습니다.

애플리케이션 호스트와 수집 서비스 간의 연결 테스트

Application Insights SDK 및 에이전트는 수집 엔드포인트에 대한 REST 호출로 수집하기 위해 원격 분석을 보냅니다. PowerShell 또는 curl 명령의 원시 REST 클라이언트를 사용하여 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트로의 연결을 테스트할 수 있습니다. Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.

최신 Application Insights Java 버전 수동 배포

Application Insights Java 버전은 App Services 업데이트의 일부로 자동으로 업데이트됩니다.

최신 버전의 Application Insights Java에서 해결된 문제가 발생하는 경우 수동으로 업데이트할 수 있습니다.

수동으로 업데이트하려면 다음 단계를 따릅니다.

  1. Java 에이전트 jar 파일을 App Service에 업로드

    a. 먼저 여기의 지침에 따라 최신 버전의 Azure CLI를 가져옵니다.

    b. 다음으로, 여기의 지침에 따라 최신 버전의 Application Insights Java 에이전트를 가져옵니다.

    c. 그런 다음, 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} 명령을 사용하여 Java 에이전트 jar 파일을 App Service에 배포합니다. 또는 이 가이드를 사용하여 Maven 플러그 인을 통해 에이전트를 배포할 수 있습니다.

  2. Azure Portal의 Application Insights 탭을 통해 Application Insights를 사용하지 않도록 설정합니다.

  3. 에이전트 jar 파일이 업로드되면 App Service 구성으로 이동합니다. Linux용 시작 명령을 사용해야 하는 경우 jvm 인수를 포함하세요.

    시작 명령의 스크린샷

    시작 명령은 JavaSE의 경우 JAVA_OPTS 또는 Tomcat의 경우 CATALINA_OPTS에 적용되지 않습니다.

    시작 명령을 사용하지 않는 경우 값 -javaagent:{PATH_TO_THE_AGENT_JAR}/applicationinsights-agent-{VERSION_NUMBER}.jar를 사용하여 JavaSE의 경우 JAVA_OPTS, Tomcat의 경우 CATALINA_OPTS의 새 환경 변수를 만듭니다.

  4. 앱을 다시 시작하여 변경 내용을 적용합니다.

참고 항목

JavaSE 환경 변수로 JAVA_OPTS, Tomcat 환경 변수로 CATALINA_OPTS를 설정하는 경우 포털에서 Application Insights를 사용하지 않도록 설정해야 합니다. 또는 포털에서 Application Insights를 사용하도록 설정하려는 경우 App Service 구성 설정에서 JavaSE 변수로 JAVA_OPTS, Tomcat 변수로 CATALINA_OPTS를 설정하지 않았는지 확인합니다.

릴리스 정보

최신 업데이트 및 버그 수정에 대해서는 릴리스 정보를 참조하세요.

다음 단계