Share via


Java 2.x용 Application Insights

주의

이 문서는 Application Insights Java 2.x에 적용되며 더 이상 권장되지 않습니다.

최신 버전에 대한 문서는 Application Insights Java 3.x에서 찾을 수 있습니다.

이 문서에서는 Application Insights Java 2.x를 사용하는 방법을 알아봅니다. 이 아티클에서는 다음을 수행하는 방법을 보여줍니다.

  • 시작 및 요청을 계측하고, 종속성을 추적하고, 성능 카운터를 수집하고, 성능 문제 및 예외를 진단하고, 사용자가 앱에서 수행하는 작업을 추적하는 코드를 작성하는 방법을 알아봅니다.
  • Application Insights 포털을 사용하여 Application Insights에 추적 로그를 보내고 탐색합니다.
  • Java 웹앱에서 종속성, catch된 예외 및 메서드 실행 시간을 모니터링합니다.
  • Java 웹앱에서 원격 분석을 필터링합니다.
  • 을 사용하여 collectdApplication Insights에서 Linux 시스템 성능 메트릭을 탐색합니다.
  • JVM(Java 가상 머신) 기반 애플리케이션 코드에 대한 메트릭을 측정합니다. 마이크로미터 애플리케이션 모니터링을 사용하여 즐겨 찾는 모니터링 시스템으로 데이터를 내보냅니다.

참고

2025년 3월 31일에 계측 키 수집에 대한 지원이 종료됩니다. 계측 키 수집은 계속 작동하지만 더 이상 기능에 대한 업데이트 또는 지원을 제공하지 않습니다. 연결 문자열로 전환하여 새로운 기능을 활용합니다.

Java 웹 프로젝트에서 Application Insights 시작하기

이 섹션에서는 Application Insights SDK를 사용하여 요청을 계측하고, 종속성을 추적하고, 성능 카운터를 수집하고, 성능 문제 및 예외를 진단하고, 사용자가 앱에서 수행하는 작업을 추적하는 코드를 작성합니다.

Application Insights는 라이브 애플리케이션의 성능 및 사용을 이해하는 데 도움이 되는 확장 가능한 분석 서비스입니다. Application Insights는 Linux, Unix 또는 Windows에서 실행되는 Java 앱을 지원합니다.

사전 요구 사항

다음 작업을 수행해야 합니다.

Application Insights 계측 키 가져오기

  1. Azure Portal에 로그인합니다.

  2. Azure Portal에서 Application Insights 리소스를 만듭니다. Java 웹 애플리케이션에 대한 애플리케이션 종류를 설정합니다.

  3. 새 리소스의 계측 키를 찾습니다. 코드 프로젝트에 이 키를 곧바로 붙여넣어야 합니다.

    계측 키가 강조 표시된 Azure Portal Application Insights 리소스에 대한 개요 창의 스크린샷

프로젝트에 Java용 Aplication Insights SDK 추가

프로젝트 형식 선택

빌드에 Maven을 사용하도록 프로젝트가 이미 설정된 경우 pom.xml 파일에 다음 코드를 병합합니다. 그런 다음 프로젝트 종속성을 새로 고쳐 다운로드한 이진을 가져옵니다.

    <dependencies>
      <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-web-auto</artifactId>
        <!-- or applicationinsights-web for manual web filter registration -->
        <!-- or applicationinsights-core for bare API -->
        <version>2.6.4</version>
      </dependency>
    </dependencies>

질문과 대답

  • , -web-core 구성 요소 간의 -web-auto관계는 무엇인가요?

    • applicationinsights-web-auto 는 런타임에 Application Insights 서블릿 필터를 자동으로 등록하여 HTTP 서블릿 요청 수 및 응답 시간을 추적하는 메트릭을 제공합니다.
    • applicationinsights-web HTTP 서블릿 요청 수 및 응답 시간을 추적하는 메트릭도 제공합니다. 그러나 애플리케이션에서 Application Insights 서블릿 필터를 수동으로 등록해야 합니다.
    • applicationinsights-core 는 애플리케이션이 서블릿 기반이 아닌 경우와 같이 베어 API를 제공합니다.
  • SDK를 최신 버전으로 업데이트하려면 어떻게 해야 하나요?

    • 2020년 11월부터 Java 애플리케이션을 모니터링하려면 Application Insights Java 3.x를 사용하는 것이 좋습니다. 시작하는 방법에 대한 자세한 내용은 Application Insights Java 3.x를 참조하세요.

ApplicationInsights.xml 파일 추가

ApplicationInsights.xml을 프로젝트의 리소스 폴더에 추가하거나 프로젝트의 배포 클래스 경로에 추가되었는지 확인합니다. 다음 XML을 복사합니다.

해당 계측 키를 Azure Portal에서 가져온 계측 키와 바꿉니다.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">

   <!-- The key from the portal: -->
   <InstrumentationKey>** Your instrumentation key **</InstrumentationKey>

   <!-- HTTP request component (not required for bare API) -->
   <TelemetryModules>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebRequestTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebSessionTrackingTelemetryModule"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebUserTrackingTelemetryModule"/>
   </TelemetryModules>

   <!-- Events correlation (not required for bare API) -->
   <!-- These initializers add context data to each event -->
   <TelemetryInitializers>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationIdTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationNameTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebSessionTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserTelemetryInitializer"/>
      <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserAgentTelemetryInitializer"/>
   </TelemetryInitializers>

</ApplicationInsights>

필요에 따라 애플리케이션에 액세스할 수 있는 위치에 구성 파일이 있을 수 있습니다. -Dapplicationinsights.configurationDirectory 시스템 속성은 ApplicationInsights.xml을 포함하는 디렉터리를 지정합니다. 예를 들어 E:\myconfigs\appinsights\ApplicationInsights.xml 있는 구성 파일은 속성을 -Dapplicationinsights.configurationDirectory="E:\myconfigs\appinsights"사용하여 구성됩니다.

  • 계측 키는 원격 분석의 모든 항목과 함께 전송되며 리소스에서 표시하도록 Application Insights에 알려줍니다.
  • HTTP 요청 구성 요소는 선택 사항입니다. 자동으로 포털에 요청 및 응답 시간에 대한 원격 분석을 보냅니다.
  • 이벤트 상관 관계는 HTTP 요청 구성 요소에 추가됩니다. 서버에서 받은 각 요청에 식별자를 할당합니다. 그런 다음 이 식별자를 속성으로 원격 분석의 모든 항목에 속성 Operation.Id으로 추가합니다. 진단 검색에서 필터를 설정하여 각 요청과 연결된 원격 분석의 상관 관계를 지정할 수 있습니다.

계측 키를 설정하는 다른 방법

Application Insights SDK는 다음 순서로 키를 찾습니다.

  • 시스템 속성: -DAPPINSIGHTS_INSTRUMENTATIONKEY=your_ikey
  • 환경 변수: APPINSIGHTS_INSTRUMENTATIONKEY
  • 구성 파일: ApplicationInsights.xml

또한 코드로 설정할 수 있습니다.

    String instrumentationKey = "00000000-0000-0000-0000-000000000000";

    if (instrumentationKey != null)
    {
        TelemetryConfiguration.getActive().setInstrumentationKey(instrumentationKey);
    }

에이전트 추가

Java 에이전트를 설치 하여 나가는 HTTP 호출, JDBC 쿼리, 애플리케이션 로깅 및 더 나은 작업 명명을 캡처합니다.

애플리케이션 실행

개발 컴퓨터에서 디버그 모드로 실행하거나 서버에 게시합니다.

Application Insights에서 원격 분석 보기

Azure Portal Application Insights 리소스로 돌아갑니다.

HTTP 요청 데이터가 개요 창에 나타납니다. 없는 경우 몇 초 정도 기다린 다음 새로 고침을 선택합니다.

개요 샘플 데이터를 보여 주는 스크린샷

메트릭에 대해 자세히 알아봅니다.

차트를 클릭하면 더 자세한 집계된 메트릭을 볼 수 있습니다.

차트가 있는 Application Insights 실패 창을 보여 주는 스크린샷

인스턴스 데이터

특정 요청 유형을 클릭하여 개별 인스턴스를 확인합니다.

특정 샘플 보기로 드릴링하는 방법을 보여 주는 스크린샷.

Log Analytics: 강력한 쿼리 언어

더 많은 데이터를 누적할 때 쿼리를 실행하여 데이터를 집계하고 개별 인스턴스를 찾을 수 있습니다. Log Analytics 는 성능 및 사용량을 이해하고 진단 목적으로 사용할 수 있는 강력한 도구입니다.

Azure Portal Log Analytics의 예를 보여 주는 스크린샷

서버에 앱 설치

이제 서버에 앱을 게시하고, 사용자가 사용할 수 있도록 하고, 포털에 원격 분석이 표시되는 것을 볼 수 있습니다.

  • 방화벽에서 애플리케이션이 다음 포트에 원격 분석을 보내도록 허용하는지 확인합니다.

    • dc.services.visualstudio.com:443
    • f5.services.visualstudio.com:443
  • 나가는 트래픽이 방화벽을 통해 라우팅되어야 하는 경우 시스템 속성 http.proxyHosthttp.proxyPort를 정의합니다.

  • Windows 서버에 다음을 설치합니다.

Azure App Service, Azure Kubernetes Service, VM 구성

모든 Azure 리소스 공급자에서 실행되는 애플리케이션을 모니터링하는 가장 쉬운 방법은 Application Insights Java 3.x를 사용하는 것입니다.

예외 및 요청 실패

처리되지 않은 예외 및 요청 오류는 Application Insights 웹 필터에 의해 자동으로 수집됩니다.

다른 예외에 대한 데이터를 수집하기 위해 코드에서 trackException()에 대한 호출을 삽입할 수 있습니다.

메서드 호출 및 외부 종속성 모니터링

JDBC를 통해 수행된 로그 지정 내부 메서드 및 호출에 타이밍 데이터 및 자동 작업 이름 지정을 위해 Java 에이전트를 설치합니다.

W3C 분산 추적

Application Insights Java SDK는 이제 W3C 분산 추적을 지원합니다.

들어오는 SDK 구성은 Application Insights의 원격 분석 상관 관계에 자세히 설명되어 있습니다.

발신 SDK 구성은 Ai-agent.xml 파일에서 정의됩니다.

성능 카운터

메트릭조사를> 선택하여 다양한 성능 카운터를 확인합니다.

프로세스 프라이빗 바이트가 선택된 Azure Portal Application Insights 리소스에 대한 메트릭 창을 보여 주는 스크린샷

성능 카운터 수집 사용자 지정

성능 카운터의 표준 집합 컬렉션을 사용하지 않으려면 ApplicationInsights.xml 파일의 루트 노드 아래에 다음 코드를 추가합니다.

    <PerformanceCounters>
       <UseBuiltIn>False</UseBuiltIn>
    </PerformanceCounters>

더 많은 성능 카운터 수집

수집할 더 많은 성능 카운터를 지정할 수 있습니다.

JMX 카운터(Java 가상 머신에 의해 노출됨)
    <PerformanceCounters>
      <Jmx>
        <Add objectName="java.lang:type=ClassLoading" attribute="TotalLoadedClassCount" displayName="Loaded Class Count"/>
        <Add objectName="java.lang:type=Memory" attribute="HeapMemoryUsage.used" displayName="Heap Memory Usage-used" type="composite"/>
      </Jmx>
    </PerformanceCounters>
  • displayName: Application Insights 포털에 표시되는 이름입니다.
  • objectName: JMX 개체 이름입니다.
  • attribute: 가져올 JMX 개체 이름의 특성입니다.
  • type (선택 사항): JMX 개체의 특성 유형입니다.
    • 기본값: int 또는 long과 같은 간단한 형식입니다.
    • composite: 성능 카운터 데이터는 형식입니다 Attribute.Data.
    • tabular: 성능 카운터 데이터는 테이블 행의 형식입니다.
Windows 성능 카운터

Windows 성능 카운터 는 한 범주의 구성원입니다(필드가 클래스의 구성원인 것과 동일한 방식). 범주는 전역이거나 번호가 매겨진 인스턴스 또는 명명된 인스턴스일 수 있습니다.

    <PerformanceCounters>
      <Windows>
        <Add displayName="Process User Time" categoryName="Process" counterName="%User Time" instanceName="__SELF__" />
        <Add displayName="Bytes Printed per Second" categoryName="Print Queue" counterName="Bytes Printed/sec" instanceName="Fax" />
      </Windows>
    </PerformanceCounters>
  • displayName: Application Insights 포털에 표시되는 이름입니다.
  • categoryName: 이 성능 카운터가 연결된 성능 카운터 범주(성능 개체)입니다.
  • counterName: 성능 카운터의 이름입니다.
  • instanceName: 범주에 단일 인스턴스가 포함된 경우 성능 카운터 범주 인스턴스의 이름 또는 빈 문자열("")입니다. 가 Process 이고 수집하려는 성능 카운터가 앱이 실행 중인 현재 JVM 프로세스에서 온 경우 categoryName 를 지정합니다"__SELF__".

Unix 성능 카운터

Application Insights 플러그 인을 사용하여 수집된 를 설치 하여 다양한 시스템 및 네트워크 데이터를 가져옵니다.

사용자 및 세션 데이터 가져오기

이제 웹 서버에서 원격 분석을 보내고 있습니다. 애플리케이션의 전체 360도 보기를 얻으려면 모니터링을 더 추가할 수 있습니다.

사용자 고유의 원격 분석 전송

이제 SDK를 설치했으므로 API를 사용하여 고유한 원격 분석을 보낼 수 있습니다.

가용성 웹 테스트

Application Insights는 일정한 간격으로 웹 사이트를 테스트하여 잘 실행되며 제대로 응답하는지 확인할 수 있습니다.

가용성 웹 테스트를 설정하는 방법에 대해 자세히 알아봅니다.

문제 해결

전용 문제 해결 문서를 참조하세요.

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

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

Application Insights에서 Java 추적 로그 탐색

추적에 Logback 또는 Log4J(v1.2 또는 v2.0)를 사용하는 경우 추적 로그를 살펴보고 검색할 수 있는 Application Insights에 추적 로그를 자동으로 전송할 수 있습니다.

애플리케이션에 대해 Application Insights 계측 키를 한 번만 설정해야 합니다. Java Spring과 같은 프레임워크를 사용하는 경우 앱 구성의 다른 곳에서 키를 이미 등록했을 수 있습니다.

Application Insights Java 에이전트 사용

기본적으로 Application Insights Java 에이전트는 수준 이상에서 수행된 로깅을 WARN 자동으로 캡처합니다.

AI-Agent.xml 파일을 사용하여 캡처된 로깅 임계값을 변경할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging threshold="info"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

AI-Agent.xml 파일을 사용하여 Java 에이전트의 로깅 캡처를 사용하지 않도록 설정할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn>
         <Logging enabled="false"/>
      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

대안

Java 에이전트를 사용하는 대신 다음 지침을 따를 수 있습니다.

Java SDK 설치

아직 설치하지 않은 경우 지침에 따라 Java용 Application Insights SDK를 설치합니다.

프로젝트에 로깅 라이브러리 추가

프로젝트에 적합한 방법을 선택합니다.

Maven

프로젝트가 빌드에 Maven을 사용하도록 이미 설정된 경우 다음 코드 조각 중 하나를 pom.xml 파일에 병합합니다. 그런 다음 프로젝트 종속성을 새로 고쳐 다운로드한 이진을 가져옵니다.

Logback


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-logback</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J v2.0


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>

Log4J v1.2


    <dependencies>
       <dependency>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>applicationinsights-logging-log4j1_2</artifactId>
          <version>[2.0,)</version>
       </dependency>
    </dependencies>
Gradle

프로젝트가 빌드에 Gradle을 사용하도록 이미 설정된 경우 build.gradle 파일의 그룹에 다음 줄 dependencies 중 하나를 추가합니다. 그런 다음 프로젝트 종속성을 새로 고쳐 다운로드한 이진을 가져옵니다.

Logback


    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-logback', version: '2.0.+'

Log4J v2.0

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j2', version: '2.0.+'

Log4J v1.2

    compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j1_2', version: '2.0.+'

지침에 따라 Application Insights Java SDK를 수동으로 설치하고 jar를 다운로드합니다. Maven Central 페이지에서 적절한 부록에 jar 대한 다운로드 섹션의 링크를 선택합니다. 다운로드한 부록 jar을 프로젝트에 추가합니다.

로거 다운로드 라이브러리
Logback Logback 어펜더 Jar applicationinsights-logging-logback
Log4J v2.0 Log4J v2 어펜더 Jar applicationinsights-logging-log4j2
Log4J v1.2 Log4J v1.2 어펜더 Jar applicationinsights-logging-log4j1_2

로깅 프레임워크에 어펜더 추가

추적 가져오기를 시작하려면 관련 코드 조각을 Logback 또는 Log4J 구성 파일에 병합합니다.

Logback


    <appender name="aiAppender" 
      class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender">
        <instrumentationKey>[APPLICATION_INSIGHTS_KEY]</instrumentationKey>
    </appender>
    <root level="trace">
      <appender-ref ref="aiAppender" />
    </root>

Log4J v2.0


    <Configuration packages="com.microsoft.applicationinsights.log4j.v2">
      <Appenders>
        <ApplicationInsightsAppender name="aiAppender" instrumentationKey="[APPLICATION_INSIGHTS_KEY]" />
      </Appenders>
      <Loggers>
        <Root level="trace">
          <AppenderRef ref="aiAppender"/>
        </Root>
      </Loggers>
    </Configuration>

Log4J v1.2


    <appender name="aiAppender" 
         class="com.microsoft.applicationinsights.log4j.v1_2.ApplicationInsightsAppender">
        <param name="instrumentationKey" value="[APPLICATION_INSIGHTS_KEY]" />
    </appender>
    <root>
      <priority value ="trace" />
      <appender-ref ref="aiAppender" />
    </root>

Application Insights appenders는 이전 코드 샘플과 같이 구성된 로거에서 참조할 수 있으며 반드시 루트 로거가 참조할 필요는 없습니다.

Application Insights 포털에서 추적 탐색

이제 Application Insights에 추적을 보내도록 프로젝트를 구성했으므로 검색 창의 Application Insights 포털에서 이러한 추적을 보고 검색 할 수 있습니다.

로거를 통해 제출된 예외는 포털에 예외 원격 분석으로 표시됩니다.

Azure Portal Application Insights 리소스에 대한 검색 창을 보여 주는 스크린샷

종속성, 예외 포착 및 Java 웹앱에서의 메서드 실행 시간 모니터링

Application Insights SDK를 사용하여 Java 웹앱을 계측한 경우 Java 에이전트를 사용하여 코드를 변경하지 않고도 심층 인사이트를 얻을 수 있습니다.

  • 종속성: 애플리케이션이 다음을 포함하여 다른 구성 요소에 대해 만드는 호출에 대한 데이터입니다.

    • 나가는 HTTP 호출: , 및 OkHttpjava.net.HttpURLConnection 을 통해 Apache HttpClient수행된 호출이 캡처됩니다.
    • Redis 호출: Jedis 클라이언트를 통해 수행된 호출이 캡처됩니다.
    • JDBC 쿼리: MySQL 및 PostgreSQL의 경우 호출이 10초보다 오래 걸리면 에이전트가 쿼리 계획을 보고합니다.
  • 애플리케이션 로깅: HTTP 요청 및 기타 원격 분석을 사용하여 애플리케이션 로그를 캡처하고 상관 관계를 지정합니다.

    • Log4j 1.2
    • Log4j2
    • Logback
  • 더 나은 작업 명명: 포털에서 요청을 집계하는 데 사용됩니다.

    • Spring: 기반입니다 @RequestMapping.
    • JAX-RS: 를 기반으로 합니다 @Path.

Java 에이전트를 사용하려면 사용자의 서버에 설치합니다. Application Insights Java SDK를 사용하여 웹앱을 계측해야 합니다.

Java용 Application Insights 에이전트 설치

  1. Java 서버를 실행하는 머신에서 2.x 에이전트를 다운로드합니다. 사용하는 2.x Java 에이전트 버전이 사용하는 2.x Application Insights Java SDK 버전과 일치하는지 확인합니다.

  2. 애플리케이션 서버 시작 스크립트를 편집하고 다음 JVM 인수를 추가합니다.

    -javaagent:<full path to the agent JAR file>

    예를 들어 Linux 컴퓨터의 Tomcat에서:

    export JAVA_OPTS="$JAVA_OPTS -javaagent:<full path to agent JAR file>"

  3. 애플리케이션 서버를 다시 시작합니다.

에이전트 구성

AI-Agent.xml 파일을 만들고 에이전트 jar 파일과 동일한 폴더에 배치합니다.

XML 파일의 내용을 설정합니다. 다음 예제를 편집하여 원하는 기능을 포함 또는 생략합니다.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsightsAgent>
   <Instrumentation>
      <BuiltIn enabled="true">

         <!-- capture logging via Log4j 1.2, Log4j2, and Logback, default is true -->
         <Logging enabled="true" />

         <!-- capture outgoing HTTP calls performed through Apache HttpClient, OkHttp,
              and java.net.HttpURLConnection, default is true -->
         <HTTP enabled="true" />

         <!-- capture JDBC queries, default is true -->
         <JDBC enabled="true" />

         <!-- capture Redis calls, default is true -->
         <Jedis enabled="true" />

         <!-- capture query plans for JDBC queries that exceed this value (MySQL, PostgreSQL),
              default is 10000 milliseconds -->
         <MaxStatementQueryLimitInMS>1000</MaxStatementQueryLimitInMS>

      </BuiltIn>
   </Instrumentation>
</ApplicationInsightsAgent>

더 많은 구성(Spring Boot)

java -javaagent:/path/to/agent.jar -jar path/to/TestApp.jar

Azure App Service 경우 다음 단계를 수행합니다.

  1. 설정>애플리케이션 설정을 선택합니다.

  2. 앱 설정에서 새 키 값 쌍을 추가합니다.

    • : JAVA_OPTS
    • : -javaagent:D:/home/site/wwwroot/applicationinsights-agent-2.6.4.jar

    에이전트가 D:/home/site/wwwroot/ 디렉터리로 끝나도록 프로젝트에서 리소스로 패키지되어야 합니다. 에이전트가 올바른 App Service 디렉터리에 있는지 확인하려면 개발 도구>고급 도구>디버그 콘솔로 이동하여 사이트 디렉터리의 내용을 확인합니다.

  3. 설정을 저장하고 앱을 다시 시작합니다. 이러한 단계는 Windows에서 실행되는 앱 서비스에만 적용됩니다.

참고

AI-Agent.xml 에이전트 jar 파일은 동일한 폴더에 있어야 합니다. 프로젝트의 /resources 폴더에 함께 배치되는 경우가 많습니다.

W3C 분산 추적 사용

AI-Agent.xml다음 코드 조각을 추가합니다.

<Instrumentation>
   <BuiltIn enabled="true">
      <HTTP enabled="true" W3C="true" enableW3CBackCompat="true"/>
   </BuiltIn>
</Instrumentation>

참고

이전 버전과의 호환 모드는 기본적으로 사용하도록 설정됩니다. 매개 변수는 enableW3CBackCompat 선택 사항이며 끄려는 경우에만 사용해야 합니다.

이상적으로는 모든 서비스가 W3C 프로토콜을 지원하는 최신 버전의 SDK로 업데이트된 경우입니다. 가능한 한 빨리 W3C 지원을 사용하여 최신 버전의 SDK로 이동하는 것이 좋습니다.

들어오는 구성과 나가는(에이전트) 구성이 정확히 동일한지 확인합니다.

데이터 보기

Application Insights 리소스에서 원격 종속성과 메서드 실행 시간의 합계는 성능 타일 아래에 나타납니다.

종속성의 개별 인스턴스, 예외 및 메서드 보고서를 찾으려면 검색을 엽니다.

종속성 문제를 진단하는 방법에 대해 자세히 알아봅니다.

질문 또는 문제?

다음 리소스를 사용합니다.

Java 웹앱에서 원격 분석 필터링

필터는 Java 웹앱이 Application Insights로 보내는 원격 분석을 선택하는 방법을 제공합니다. 사용할 수 있는 몇 가지 기본 제공 필터가 있습니다. 사용자 지정 필터를 직접 작성할 수도 있습니다.

기본 필터는 다음과 같습니다.

  • 추적 심각도 수준입니다.
  • 특정 URL, 키워드 또는 응답 코드.
  • 빠른 응답. 즉, 앱이 신속하게 응답한 요청입니다.
  • 특정 이벤트 이름입니다.

참고

필터는 앱 메트릭의 타이밍 스큐를 발생합니다. 예를 들어 느린 응답을 진단하기 위해 빠른 응답 시간을 삭제하도록 필터를 설정할 수 있습니다. 하지만 Application Insights에서 보고한 평균 응답 시간은 실제 속도보다 느려집니다. 또한 요청 수는 실제 개수보다 작습니다.

이것이 문제가 될 경우 대신 샘플링을 사용합니다.

필터 설정

ApplicationInsights.xml에서 다음 예제와 같은 섹션을 TelemetryProcessors 추가합니다.


    <ApplicationInsights>
      <TelemetryProcessors>

        <BuiltInProcessors>
           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>

           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="100"/>
                  <Add name="NotNeededResponseCodes" value="200-400"/>
           </Processor>

           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="100"/>
                  <Add name="NotNeededNames" value="home,index"/>
                  <Add name="NotNeededUrls" value=".jpg,.css"/>
           </Processor>

           <Processor type="TelemetryEventFilter">
                  <!-- Names of events we don't want to see -->
                  <Add name="NotNeededNames" value="Start,Stop,Pause"/>
           </Processor>

           <!-- Exclude telemetry from availability tests and bots -->
           <Processor type="SyntheticSourceFilter">
                <!-- Optional: specify which synthetic sources,
                     comma-separated
                     - default is all synthetics -->
                <Add name="NotNeededSources" value="Application Insights Availability Monitoring,BingPreview"
           </Processor>

        </BuiltInProcessors>

        <CustomProcessors>
          <Processor type="com.fabrikam.MyFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>

      </TelemetryProcessors>
    </ApplicationInsights>

기본 제공 프로세서의 전체 집합을 검사합니다.

기본 제공 필터

이 섹션에서는 사용할 수 있는 기본 제공 필터에 대해 설명합니다.

메트릭 원격 분석 필터


           <Processor type="MetricTelemetryFilter">
                  <Add name="NotNeeded" value="metric1,metric2"/>
           </Processor>
  • NotNeeded: 사용자 지정 메트릭 이름의 쉼표로 구분된 목록

페이지 보기 원격 분석 필터


           <Processor type="PageViewTelemetryFilter">
                  <Add name="DurationThresholdInMS" value="500"/>
                  <Add name="NotNeededNames" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>
  • DurationThresholdInMS: 기간은 페이지를 로드하는 데 걸린 시간을 나타냅니다. 이 매개 변수를 설정하면 이 시간보다 빠르게 로드된 페이지는 보고되지 않습니다.
  • NotNeededNames: 쉼표로 구분된 페이지 이름 목록입니다.
  • NotNeededUrls: URL 조각의 쉼표로 구분된 목록입니다. 예를 들어 "home"은 URL에 "home"이 포함된 모든 페이지를 필터링합니다.

원격 분석 필터 요청


           <Processor type="RequestTelemetryFilter">
                  <Add name="MinimumDurationInMS" value="500"/>
                  <Add name="NotNeededResponseCodes" value="page1,page2"/>
                  <Add name="NotNeededUrls" value="url1,url2"/>
           </Processor>

가상 원본 필터

속성에 값 SyntheticSource 이 있는 모든 원격 분석을 필터링합니다. 봇, 거미 및 가용성 테스트의 요청이 포함됩니다.

모든 가상 요청에 대한 원격 분석을 필터링합니다.


           <Processor type="SyntheticSourceFilter" />

특정 가상 원본에 대한 원격 분석을 필터링합니다.


           <Processor type="SyntheticSourceFilter" >
                  <Add name="NotNeeded" value="source1,source2"/>
           </Processor>
  • NotNeeded: 가상 소스 이름의 쉼표로 구분된 목록

원격 분석 이벤트 필터

TrackEvent()를 사용하여 기록된 사용자 지정 이벤트를 필터링합니다.


           <Processor type="TelemetryEventFilter" >
                  <Add name="NotNeededNames" value="event1, event2"/>
           </Processor>
  • NotNeededNames: 쉼표로 구분된 이벤트 이름 목록

추적 원격 분석 필터

TrackTrace() 또는 로깅 프레임워크 수집기를 사용하여 기록된 로그 추적을 필터링합니다.


           <Processor type="TraceTelemetryFilter">
                  <Add name="FromSeverityLevel" value="ERROR"/>
           </Processor>
  • 유효한 값은 FromSeverityLevel 다음과 같습니다.

    • OFF: 모든 추적을 필터링합니다.
    • TRACE: 필터링이 없습니다. TRACE 수준과 같습니다.
    • 정보: TRACE 수준을 필터링합니다.
    • 경고: 추적 및 정보를 필터링합니다.
    • 오류: WARN, INFO 및 TRACE를 필터링합니다.
    • CRITICAL: CRITICAL를 제외한 모든 것을 필터링합니다.

사용자 지정 필터

다음 섹션에서는 사용자 지정 필터를 만드는 단계를 보여 줍니다.

필터 코드

코드에서 TelemetryProcessor를 구현하는 클래스를 만듭니다.


    package com.fabrikam.MyFilter;
    import com.microsoft.applicationinsights.extensibility.TelemetryProcessor;
    import com.microsoft.applicationinsights.telemetry.Telemetry;

    public class SuccessFilter implements TelemetryProcessor {

        /* Any parameters that are required to support the filter.*/
        private final String successful;

        /* Initializers for the parameters, named "setParameterName" */
        public void setNotNeeded(String successful)
        {
            this.successful = successful;
        }

        /* This method is called for each item of telemetry to be sent.
           Return false to discard it.
           Return true to allow other processors to inspect it. */
        @Override
        public boolean process(Telemetry telemetry) {
            if (telemetry == null) { return true; }
            if (telemetry instanceof RequestTelemetry)
            {
                RequestTelemetry requestTelemetry = (RequestTelemetry)    telemetry;
                return request.getSuccess() == successful;
            }
            return true;
        }
    }

구성 파일에서 필터 호출

이제 ApplicationInsights.xml:



    <ApplicationInsights>
      <TelemetryProcessors>
        <CustomProcessors>
          <Processor type="com.fabrikam.SuccessFilter">
            <Add name="Successful" value="false"/>
          </Processor>
        </CustomProcessors>
      </TelemetryProcessors>
    </ApplicationInsights>

필터 호출(Java Spring)

Spring 프레임워크를 기반으로 하는 애플리케이션의 경우 사용자 지정 원격 분석 프로세서를 주 애플리케이션 클래스에 bean으로 등록해야 합니다. 그러면 애플리케이션이 시작될 때 자동으로 연결됩니다.

@Bean
public TelemetryProcessor successFilter() {
      return new SuccessFilter();
}

에서 고유한 필터 매개 변수를 만듭니다 application.properties. 그런 다음 Spring Boot의 외부화된 구성 프레임워크를 사용하여 해당 매개 변수를 사용자 지정 필터에 전달합니다.

문제 해결

이 섹션에서는 문제 해결 팁을 제공합니다.

필터가 작동하지 않음

유효한 매개 변수 값을 제공했는지 확인합니다. 예를 들어 기간은 정수여야 합니다. 잘못된 값을 설정하면 필터가 무시됩니다. 사용자 지정 필터가 생성자 또는 set 메서드에서 예외를 throw하는 경우 무시됩니다.

collectd: Application Insights의 Linux 성능 메트릭(사용되지 않음)

Application Insights에서 Linux 시스템 성능 메트릭을 탐색하려면 Application Insights 플러그 인과 함께 수집된 을 설치합니다. 이 오픈 소스 솔루션은 다양한 시스템 및 네트워크 통계를 수집합니다.

일반적으로 Application Insights를 사용하여 Java 웹 서비스를 이미 계측한 경우 를 사용합니다collectd. 앱의 성능을 향상시키거나 문제를 진단하는 데 도움이 되는 더 많은 데이터를 제공합니다.

계측 키 가져오기

Azure Portal 데이터를 표시할 Application Insights 리소스를 엽니다. 또는 새 리소스를 만들 수 있습니다.

리소스를 식별하는 계측 키의 복사본을 가져옵니다.

계측 키가 강조 표시된 Azure Portal Application Insights 리소스의 개요 창을 보여 주는 스크린샷

Collectd 및 플러그인을 설치합니다.

Linux 서버 컴퓨터에서:

  1. collectd 5.4.0 버전 또는 그 이상을 설치합니다.
  2. Application Insights 수집된 기록기 플러그 인을 다운로드합니다. 버전 번호를 메모합니다.
  3. 플러그 인 jar를 에 복사합니다 /usr/share/collectd/java.
  4. 편집 /etc/collectd/collectd.conf:
    • Java 플러그 인이 사용하도록 설정되어 있는지 확인합니다.

    • 다음 jar를 포함하도록 에 java.class.path 대한 JVMArg를 업데이트합니다. 다운로드 한 것과 일치하는 버전 번호를 업데이트합니다.

      • /usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar
    • 리소스의 계측 키를 사용하여 이 코드 조각을 추가합니다.

      
           LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
           <Plugin ApplicationInsightsWriter>
              InstrumentationKey "Your key"
           </Plugin>
      

      다음은 샘플 구성 파일의 일부입니다.

      
          ...
          # collectd plugins
          LoadPlugin cpu
          LoadPlugin disk
          LoadPlugin load
          ...
      
          # Enable Java Plugin
          LoadPlugin "java"
      
          # Configure Java Plugin
          <Plugin "java">
            JVMArg "-verbose:jni"
            JVMArg "-Djava.class.path=/usr/share/collectd/java/applicationinsights-collectd-1.0.5.jar:/usr/share/collectd/java/collectd-api.jar"
      
            # Enabling Application Insights plugin
            LoadPlugin "com.microsoft.applicationinsights.collectd.ApplicationInsightsWriter"
      
            # Configuring Application Insights plugin
            <Plugin ApplicationInsightsWriter>
              InstrumentationKey "12345678-1234-1234-1234-123456781234"
            </Plugin>
      
            # Other plugin configurations ...
            ...
          </Plugin>
          ...
      

다른 원본에서 다양한 데이터를 수집할 수 있는 다른 수집된 플러그 인을 구성합니다.

해당 설명서에 따라 다시 시작 collectd 합니다.

Application Insights에서 데이터 보기

Application Insights 리소스에서 메트릭을 열고 차트를 추가합니다. 사용자 지정 범주에서 보려는 메트릭을 선택합니다.

기본적으로 메트릭을 수집한 모든 호트스 컴퓨터의 메트릭이 집계됩니다. 호스트당 메트릭을 보려면 차트 세부 정보 창에서 그룹화 를 켜고 CollectD-Host별로 그룹화하도록 선택합니다.

특정 통계 업로드 제외

기본적으로 Application Insights 플러그 인은 사용하도록 설정된 모든 플러그 인에서 수집한 collectd read 모든 데이터를 보냅니다.

특정 플러그 인 또는 데이터 원본에서 데이터를 제외하려면 다음을 수행합니다.

  • 구성 파일을 편집합니다.

  • 에서 <Plugin ApplicationInsightsWriter>다음 표의 지시문 줄과 같은 지시문을 추가합니다.

    지시문 영향
    Exclude disk 플러그 인에서 수집한 disk 모든 데이터를 제외합니다.
    Exclude disk:read,write 플러그 인에서 diskwrite 라는 read 소스를 제외합니다.

새 줄을 포함한 별도 지시문입니다.

문제가 있습니까?

이 섹션에서는 문제 해결 팁을 제공합니다.

포털에 데이터가 표시되지 않습니다.

다음 옵션을 시도해 보세요.

  • 검색을 열고 원시 이벤트가 도착했는지 확인합니다. 때로는 메트릭 탐색기에 나타날 때 시간이 오래 걸립니다.
  • 나가는 데이터에 대한 방화벽 예외를 설정해야 할 수 있습니다.
  • Application Insights 플러그 인에서 추적을 사용하도록 설정합니다. <Plugin ApplicationInsightsWriter>에서 이 줄 추가:
    • SDKLogger true
  • 터미널을 열고 자세한 정보 표시 모드로 시작하여 collectd 보고 중인 문제를 확인합니다.
    • sudo collectd -f

알려진 문제

Application Insights 쓰기 플러그 인은 특정 읽기 플러그 인과 호환되지 않습니다. 일부 플러그 인은 때때로 를 보내 NaN지만 Application Insights 플러그 인에는 부동 소수점 번호가 예상됩니다.

  • 증상: 로그에 collectd "AI: ... SyntaxError: 예기치 않은 토큰 N."
  • 해결 방법: 문제 쓰기 플러그 인에서 수집한 데이터를 제외합니다.

Micrometer 애플리케이션 모니터링은 JVM 기반 애플리케이션 코드의 메트릭을 측정하며, 자주 사용하는 모니터링 시스템으로 데이터를 내보낼 수 있습니다. 이 섹션에서는 Spring Boot 및 비 Spring Boot 애플리케이션 모두에 Application Insights와 함께 마이크로미터를 사용하는 방법을 설명합니다.

Spring Boot 1.5x 사용

pom.xml 또는 build.gradle 파일에 다음 종속성을 추가합니다.

다음 단계를 수행합니다.

  1. Spring Boot 애플리케이션의 pom.xml 파일을 업데이트하고 여기에 다음 종속성을 추가합니다.

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-spring-boot-starter</artifactId>
        <version>2.5.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-spring-legacy</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-azure-monitor</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    
  2. 다음 속성을 사용하여 application.properties 또는 YML 파일을 Application Insights 계측 키로 업데이트합니다.

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. 애플리케이션을 빌드하고 실행합니다.

이전 단계에서는 미리 집계된 메트릭을 Azure Monitor에 자동으로 수집하여 실행해야 합니다.

Spring 2.x 사용

pom.xml 또는 build.gradle 파일에 다음 종속성을 추가합니다.

다음 단계를 수행합니다.

  1. Spring Boot 애플리케이션의 pom.xml 파일을 업데이트하고 여기에 다음 종속성을 추가합니다.

    <dependency> 
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-spring-boot-metrics-starter</artifactId>
          <version>2.0.7</version>
    </dependency>
    
  2. 다음 속성을 사용하여 application.properties 또는 YML 파일을 Application Insights 계측 키로 업데이트합니다.

    azure.application-insights.instrumentation-key=<your-instrumentation-key-here>

  3. 애플리케이션을 빌드하고 실행합니다.

이전 단계에서는 미리 집계된 메트릭을 Azure Monitor에 자동으로 수집하여 실행해야 합니다. Application Insights Spring Boot Starter를 미세 조정하는 방법에 대한 자세한 내용은 GitHub의 추가 정보를 참조하세요.

기본 메트릭:

  • Tomcat, JVM, Logback 메트릭, Log4J 메트릭, 작동 시간 메트릭, 프로세서 메트릭 및 FileDescriptorMetrics에 대한 메트릭을 자동으로 구성합니다.
  • 예를 들어 Netflix Hystrix가 클래스 경로에 있는 경우 이러한 메트릭도 가져옵니다.
  • 각 콩을 추가하여 다음 메트릭을 사용할 수 있습니다.
    • CacheMetrics(CaffeineCache, , GuavaCacheEhCache2, HazelcastCacheJCache)
    • DataBaseTableMetrics
    • HibernateMetrics
    • JettyMetrics
    • OkHttp3 Metrics
    • Kafka Metrics

자동 메트릭 수집 끄기:

  • JVM 메트릭:
    • management.metrics.binders.jvm.enabled=false
  • Logback 메트릭:
    • management.metrics.binders.logback.enabled=false
  • 가동 시간 메트릭:
    • management.metrics.binders.uptime.enabled=false
  • 프로세서 메트릭:
    • management.metrics.binders.processor.enabled=false
  • FileDescriptorMetrics:
    • management.metrics.binders.files.enabled=false
  • 의 라이브러리 classpath인 경우 Hystrix 메트릭
    • management.metrics.binders.hystrix.enabled=false
  • 에 라이브러리 classpath가 있는 경우 AspectJ 메트릭
    • spring.aop.enabled=false

참고

Spring Boot 애플리케이션의 application.properties 또는 application.yml 파일에서 위의 속성을 지정합니다.

Spring Boot 웹 애플리케이션이 없는 Micrometer 사용

pom.xml 또는 build.gradle 파일에 다음 종속성을 추가합니다.

다음 단계를 수행합니다.

  1. pom.xml 또는 build.gradle 파일에 다음 종속성을 추가합니다.

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-azure-monitor</artifactId>
            <version>1.1.0</version>
        </dependency>
    
        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>applicationinsights-web-auto</artifactId>
            <version>2.5.0</version>
        </dependency>
    
  2. 아직 수행하지 않은 경우 resources 폴더에ApplicationInsights.xml파일을 추가합니다. 자세한 내용은 ApplicationInsights.xml 파일 추가를 참조하세요.

  3. 샘플 Servlet 클래스(타이머 메트릭 내보냄):

        @WebServlet("/hello")
        public class TimedDemo extends HttpServlet {
    
          private static final long serialVersionUID = -4751096228274971485L;
    
          @Override
          @Timed(value = "hello.world")
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
    
            response.getWriter().println("Hello World!");
            MeterRegistry registry = (MeterRegistry) getServletContext().getAttribute("AzureMonitorMeterRegistry");
    
        //create new Timer metric
            Timer sampleTimer = registry.timer("timer");
            Stream<Integer> infiniteStream = Stream.iterate(0, i -> i+1);
            infiniteStream.limit(10).forEach(integer -> {
              try {
                Thread.sleep(1000);
                sampleTimer.record(integer, TimeUnit.MILLISECONDS);
              } catch (Exception e) {}
               });
          }
          @Override
          public void init() throws ServletException {
            System.out.println("Servlet " + this.getServletName() + " has started");
          }
          @Override
          public void destroy() {
            System.out.println("Servlet " + this.getServletName() + " has stopped");
          }
    
        }
    
    
  4. 샘플 구성 클래스:

         @WebListener
         public class MeterRegistryConfiguration implements ServletContextListener {
    
           @Override
           public void contextInitialized(ServletContextEvent servletContextEvent) {
    
         // Create AzureMonitorMeterRegistry
           private final AzureMonitorConfig config = new AzureMonitorConfig() {
             @Override
             public String get(String key) {
                 return null;
             }
            @Override
               public Duration step() {
                 return Duration.ofSeconds(60);}
    
             @Override
             public boolean enabled() {
                 return false;
             }
         };
    
      MeterRegistry azureMeterRegistry = AzureMonitorMeterRegistry.builder(config);
    
             //set the config to be used elsewhere
             servletContextEvent.getServletContext().setAttribute("AzureMonitorMeterRegistry", azureMeterRegistry);
    
           }
    
           @Override
           public void contextDestroyed(ServletContextEvent servletContextEvent) {
    
           }
         }
    

메트릭에 대한 자세한 내용은 마이크로미터 설명서를 참조하세요.

다양한 메트릭 유형을 만드는 방법에 대한 다른 샘플 코드는 공식 Micrometer GitHub 리포지토리에서 제공합니다.

더 많은 메트릭 컬렉션 바인딩

다음 섹션에서는 더 많은 메트릭을 수집하는 방법을 보여 줍니다.

SpringBoot/Spring

각 메트릭 범주의 bean을 만듭니다. 예를 들어 Guava Cache 메트릭이 필요하다고 가정합니다.

    @Bean
    GuavaCacheMetrics guavaCacheMetrics() {
        Return new GuavaCacheMetrics();
    }

여러 메트릭은 기본적으로 사용하도록 설정되지 않지만 이전 방식으로 바인딩할 수 있습니다. 전체 목록은 Micrometer GitHub 리포지토리를 참조하세요.

Spring 이외 앱

구성 파일에 다음 바인딩 코드를 추가합니다.

    New GuavaCacheMetrics().bind(registry);

다음 단계