Java 응용 프로그램용 Azure Monitor OpenTelemetry 기반 자동 계측

이 문서에서는 OpenTelemetry 기반 Azure Monitor Java 제품을 사용 하도록 설정 하 고 구성 하는 방법을 설명 합니다. 이 문서의 지침을 완료 한 후에는 Azure Monitor Application Insights를 사용 하 여 응용 프로그램을 모니터링할 수 있습니다.

시작하기

코드를 변경 하지 않고 Java 자동 계측을 사용 하도록 설정할 수 있습니다.

전제 조건

Azure Monitor Application Insights 사용

이 섹션에서는 자동 계측 jar 파일을 다운로드 하는 방법을 보여 줍니다.

Jar 파일 다운로드

Applicationinsights-agent-3.2.3 파일을 다운로드 합니다.

경고

3.0 Preview에서 업그레이드 하는 경우:

  • 모든 구성 옵션 을 신중 하 게 검토 합니다. JSON 구조가 완전히 변경 되었습니다. 이제 파일 이름은 모두 소문자입니다.

3.0. x에서 업그레이드 하는 경우:

  • 작업 이름 및 요청 원격 분석 이름에는 이제 및와 같은 HTTP 메서드가 접두사로 추가 GET 됩니다 POST . 이러한 변경 내용은 이전 값에 의존 하는 경우 사용자 지정 대시보드 또는 경고에 영향을 줄 수 있습니다. 자세한 내용은 3.1.0 릴리스 정보를 참조 하세요.

3.1. x에서 업그레이드 하는 경우:

  • 이제 필드에 남아 있는 전체 (삭제 된) 쿼리를 사용 하 여 데이터베이스 종속성 이름이 더 간결 합니다 data . 이제 HTTP 종속성 이름이 더 설명적입니다. 이러한 변경 내용은 이전 값에 의존 하는 경우 사용자 지정 대시보드 또는 경고에 영향을 줄 수 있습니다. 자세한 내용은 3.2.0 릴리스 정보를 참조 하세요.

JVM에서 jar 파일을 가리키도록 합니다.

애플리케이션의 JVM 인수에 -javaagent:path/to/applicationinsights-agent-3.2.3.jar 추가

애플리케이션의 JVM 인수 구성에 관한 도움말은 JVM 인수 업데이트를 위한 팁을 참조하세요.

Application Insights 연결 문자열 설정

  1. 다음 두 가지 방법으로 jar 파일을 Application Insights 리소스를 가리킬 수 있습니다.

    • 환경 변수를 설정할 수 있습니다.

      APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...
      
    • 또는 이라는 구성 파일을 만들 수 있습니다 applicationinsights.json . 다음 내용과 동일한 디렉터리에 저장 합니다 applicationinsights-agent-3.2.3.jar .

      {
        "connectionString": "InstrumentationKey=..."
      }
      
  2. Application Insights 리소스에서 연결 문자열을 찾습니다.

    Application Insights 연결 문자열을 보여 주는 스크린샷

데이터 흐름 확인

응용 프로그램을 실행 하 고 Azure Portal에서 Application Insights 리소스 탭을 엽니다. 데이터가 포털에 표시 되는 데 몇 분 정도 걸릴 수 있습니다.

참고

응용 프로그램을 실행할 수 없거나 예상 대로 데이터를 얻지 못하는 경우 문제 해결 섹션을 참조 하세요.

서버 요청 및 서버 응답 시간이 강조 표시 된 Application Insights 개요 탭을 보여 주는 스크린샷

중요

동일한 Application Insights 리소스에 원격 분석을 내보내는 서비스가 둘 이상 있는 경우 응용 프로그램 맵에 올바르게 표시 되도록 클라우드 역할 이름을 설정 해야 합니다.

Application Insights 계측 사용의 일부로 Microsoft에 진단 데이터를 수집 하 여 보냅니다. 이 데이터는 Application Insights를 실행 하 고 개선 하는 데 도움이 됩니다. 불필요 한 데이터 수집을 사용 하지 않도록 설정할 수 있는 옵션이 있습니다. 자세한 내용은 Azure 애플리케이션 Insights에서 Statsbeat를 참조 하세요.

구성 옵션

파일에서 applicationinsights.json 다음과 같은 설정을 구성할 수도 있습니다.

  • 클라우드 역할 이름
  • 클라우드 역할 인스턴스
  • 샘플링
  • JMX 메트릭
  • 사용자 지정 차원
  • 원격 분석 프로세서(미리 보기)
  • 자동 수집 된 로깅
  • 스프링 부트 발동기 메트릭을 포함 하는 자동 수집 된 마이크로 측정기 메트릭
  • 하트비트
  • HTTP 프록시
  • 자체 진단

자세한 내용은 구성 옵션을 참조 하세요.

계측 라이브러리

Java 3.x에는 다음과 같은 계측 라이브러리가 포함 되어 있습니다.

Autocollected 된 요청

  • JMS 소비자
  • Kafka 소비자
  • Netty/WebFlux
  • 서블릿
  • 스프링 예약

자동 수집 된 종속성

자동 수집 된 종속성 및 다운스트림 분산 추적 전파:

  • Apache HttpClient
  • Apache HttpAsyncClient
  • AsyncHttpClient
  • Google HttpClient
  • gRPC
  • java.net.HttpURLConnection
  • Java 11 HttpClient
  • JAX-RS-RS 클라이언트
  • Jetty HttpClient
  • JMS
  • Kafka
  • Netty 클라이언트
  • OkHttp

다운스트림 분산 추적 전파가 없는 자동 수집 된 종속성:

  • Cassandra
  • JDBC
  • MongoDB(비동기 및 동기)
  • Redis(Lettuce 및 Jedis)

Autocollected 된 로그

  • java.util.logging
  • MDC 속성을 포함 하는 Log4j
  • MDC 속성을 포함 하는 SLF4J/Logback

자동 수집 된 메트릭

  • Spring Boot Actuator 메트릭을 포함하는 마이크로미터
  • JMX 메트릭

Azure SDK

이러한 Azure SDK에서 내보낸 원격 분석은 기본적으로 자동으로 수집됩니다.

원격 분석 수정

이 섹션에서는 원격 분석을 수정하는 방법을 설명합니다.

범위 특성 추가

를 사용하여 범위에 특성을 추가할 수 opentelemetry-api 있습니다. 이러한 특성에는 원격 분석용 사용자 지정 비즈니스 차원 추가가 포함될 수 있습니다. 특성을 사용하여 애플리케이션 Insights 스키마에서 사용자 ID 또는 클라이언트 IP와 같은 선택적 필드를 설정할 수도 있습니다.

사용자 지정 차원 추가

하나 이상의 사용자 지정 차원을 추가하면 요청, 의존성 또는 예외 테이블의 customDimensions 필드가 채워집니다.

참고

이 기능은 3.2.0 이상에만 있습니다.

  1. 애플리케이션에 를 opentelemetry-api-1.6.0.jar 추가합니다.

    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-api</artifactId>
      <version>1.6.0</version>
    </dependency>
    
  2. 코드에 사용자 지정 차원을 추가합니다.

    import io.opentelemetry.api.trace.Span;
    
    Span.current().setAttribute("mycustomdimension", "myvalue1");
    

사용자 ID 설정

요청, 의존성 또는 예외 테이블의 사용자 ID 필드를 채웁니다.

중요

인증된 사용자 ID를 설정하기 전에 관련 개인 정보 보호법을 참조합니다.

참고

이 기능은 3.2.0 이상에만 있습니다.

  1. 애플리케이션에 를 opentelemetry-api-1.6.0.jar 추가합니다.

    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-api</artifactId>
      <version>1.6.0</version>
    </dependency>
    
  2. user_Id코드에서 다음을 설정합니다.

    import io.opentelemetry.api.trace.Span;
    
    Span.current().setAttribute("enduser.id", "myuser");
    

추적 ID 또는 범위 ID를 얻습니다.

를 사용하여 추적 ID 또는 범위 ID를 얻을 수 opentelemetry-api 있습니다. 이 작업을 수행하여 문제를 디버그하고 진단할 때 상관 관계를 개선하기 위해 이러한 식별자를 기존 로깅 원격 분석 에 추가할 수 있습니다.

참고

이 기능은 3.2.0 이상에만 있습니다.

  1. 애플리케이션에 를 opentelemetry-api-1.6.0.jar 추가합니다.

    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-api</artifactId>
      <version>1.6.0</version>
    </dependency>
    
  2. 코드에서 요청 추적 ID 및 범위 ID를 확인합니다.

    import io.opentelemetry.api.trace.Span;
    
    String traceId = Span.current().getSpanContext().getTraceId();
    String spanId = Span.current().getSpanContext().getSpanId();
    

사용자 지정 원격 분석

Application Insights Java 3.x의 목표는 표준 API를 사용하여 사용자 지정 원격 분석을 보낼 수 있도록 하는 것입니다.

현재 마이크로미터, 인기 있는 로깅 프레임워크 및 Application Insights Java 2.x SDK를 지원합니다. Application Insights Java 3.x는 이러한 API를 통해 전송된 원격 분석을 자동으로 캡처하고 자동 수집된 원격 분석과 상호 연결합니다.

지원되는 사용자 지정 원격 분석

다음 표에서는 Java 3.x 에이전트를 보완하기 위해 사용할 수 있는 현재 지원되는 사용자 지정 원격 분석 유형을 나타냅니다. 요약:

  • 사용자 지정 메트릭은 마이크로미터를 통해 지원됩니다.
  • 사용자 지정 예외 및 추적은 로깅 프레임워크를 통해 지원됩니다.
  • 사용자 지정 요청, 의존성 및 예외는 를 통해 opentelemetry-api 지원됩니다.
  • 모든 유형의 사용자 지정 원격 분석은 Application Insights Java 2.x SDK 를통해 지원됩니다.
사용자 지정 원격 분석 유형 마이크로미터 Log4j, logback, JUL 2.x SDK opentelemetry-api
사용자 지정 이벤트
사용자 지정 메트릭
종속성
예외
페이지 보기
요청
Traces

현재는 Application Insights 3.x를 사용하여 SDK를 릴리스할 계획이 없습니다.

Application Insights Java 3.x는 이미 Application Insights Java 2.x SDK로 전송된 원격 분석을 수신 대기하고 있습니다. 이 기능은 기존 2.x 사용자를 위한 업그레이드 스토리의 중요한 부분입니다. 또한 OpenTelemetry API가 일반화될 때까지 사용자 지정 원격 분석 지원에서 중요한 간격을 채웁니다.

마이크로미터를 사용하여 사용자 지정 메트릭 보내기

  1. 애플리케이션에 Micrometer를 추가합니다.

    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-core</artifactId>
      <version>1.6.1</version>
    </dependency>
    
  2. Micrometer 전역 레지스트리를 사용하여 미터를 만듭니다.

    static final Counter counter = Metrics.counter("test_counter");
    
  3. 카운터를 사용하여 메트릭을 기록합니다.

    counter.increment();
    

즐겨찾는 로깅 프레임워크를 사용하여 사용자 지정 추적 및 예외 보내기

Log4j, Logback 및 java.util.logging은 자동으로 계측됩니다. 이러한 로깅 프레임워크를 통해 수행되는 로깅은 추적 및 예외 원격 분석으로 자동 수집됩니다.

기본적으로 로깅은 정보 수준 이상에서 수행되는 경우에만 수집됩니다. 이 수준을 변경하려면 구성 옵션 를 참조하세요.

로그에 사용자 지정 차원을 연결하려면 Log4j 1.2 MDC,Log4j 2 MDC또는 Logback MDC를 사용합니다. Application Insights Java 3.x는 추적 및 예외 원격 분석에서 해당 MDC 속성을 사용자 지정 차원으로 자동으로 캡처합니다.

2.x SDK를 사용하여 사용자 지정 원격 분석 보내기

  1. applicationinsights-core-2.6.3.jar애플리케이션에 를 추가합니다. 모든 2.x 버전은 Application Insights Java 3.x에서 지원됩니다. 선택할 수 있는 경우 최신 버전을 사용하는 것이 좋습니다.

    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>applicationinsights-core</artifactId>
      <version>2.6.3</version>
    </dependency>
    
  2. TelemetryClient를 만듭니다.

    static final TelemetryClient telemetryClient = new TelemetryClient();
    
  3. 클라이언트를 사용하여 사용자 지정 원격 분석을 보냅니다.

    이벤트
    telemetryClient.trackEvent("WinGame");
    
    메트릭
    telemetryClient.trackMetric("queueLength", 42.0);
    
    종속성
    boolean success = false;
    long startTime = System.currentTimeMillis();
    try {
        success = dependency.call();
    } finally {
        long endTime = System.currentTimeMillis();
        RemoteDependencyTelemetry telemetry = new RemoteDependencyTelemetry();
        telemetry.setSuccess(success);
        telemetry.setTimestamp(new Date(startTime));
        telemetry.setDuration(new Duration(endTime - startTime));
        telemetryClient.trackDependency(telemetry);
    }
    
    로그
    telemetryClient.trackTrace(message, SeverityLevel.Warning, properties);
    
    예외
    try {
        ...
    } catch (Exception e) {
        telemetryClient.trackException(e);
    }
    

문제 해결

문제 해결에 대한 도움말은 문제 해결을 참조하십시오.

지원

지원을 받으려면 다음을 수행합니다.

OpenTelemetry 피드백

피드백을 제공하려면 다음을 수행합니다.

다음 단계