다음을 통해 공유


구성 옵션: Java용 Azure Monitor Application Insights

이 문서에서는 Java용 Azure Monitor Application Insights를 구성하는 방법을 보여 줍니다.

연결 문자열 및 역할 이름

시작하는 데 필요한 가장 일반적인 설정은 연결 문자열 및 역할 이름입니다.

{
  "connectionString": "...",
  "role": {
    "name": "my cloud role name"
  }
}

연결 문자열이 필요합니다. 다른 애플리케이션의 데이터를 동일한 Application Insights 리소스로 보낼 때마다 역할 이름이 중요합니다.

자세한 정보와 구성 옵션은 다음 섹션에서 제공됩니다.

구성 파일 경로

기본적으로 Application Insights Java 3.x는 구성 파일의 이름을 applicationinsights.json으로 지정하고 applicationinsights-agent-3.5.3.jar와 동일한 디렉터리에 위치하도록 합니다.

다음 두 가지 옵션 중 하나를 사용하여 고유한 구성 파일 경로를 지정할 수 있습니다.

  • APPLICATIONINSIGHTS_CONFIGURATION_FILE환경 변수
  • applicationinsights.configuration.file Java 시스템 속성

상대 경로를 지정하면 applicationinsights-agent-3.5.3.jar이 있는 디렉터리를 기준으로 확인됩니다.

또는 구성 파일을 사용하는 대신 환경 변수 APPLICATIONINSIGHTS_CONFIGURATION_CONTENT를 통해 JSON 구성의 전체 콘텐츠를 지정할 수 있습니다.

Connection string

연결 문자열이 필요합니다. Application Insights 리소스에서 연결 문자열을 찾을 수 있습니다.

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

{
  "connectionString": "..."
}

환경 변수 APPLICATIONINSIGHTS_CONNECTION_STRING를 사용하여 연결 문자열을 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 연결 문자열보다 우선합니다.

또는 Java 시스템 속성 applicationinsights.connection.string을 사용하여 연결 문자열을 설정할 수 있습니다. 또한 JSON 구성에 지정된 연결 문자열보다 우선합니다.

연결 문자열을 로드할 파일을 지정하여 연결 문자열을 설정할 수도 있습니다.

상대 경로를 지정하면 applicationinsights-agent-3.5.3.jar이 있는 디렉터리를 기준으로 확인됩니다.

{
  "connectionString": "${file:connection-string-file.txt}"
}

파일에는 연결 문자열만 포함되어야 합니다.

연결 문자열을 설정하지 않으면 Java 에이전트가 사용되지 않습니다.

동일한 JVM(Java Virtual Machine)에 여러 애플리케이션이 배포되어 있고 서로 다른 연결 문자열로 원격 분석을 보내도록 하려면 연결 문자열 재정의(미리 보기)를 참조하세요.

클라우드 역할 이름

클라우드 역할 이름은 애플리케이션 맵의 구성 요소에 레이블을 적용하는 데 사용됩니다.

클라우드 역할 이름을 설정하려면 다음을 수행합니다.

{
  "role": {   
    "name": "my cloud role name"
  }
}

클라우드 역할 이름이 설정되지 않은 경우 Application Insights 리소스의 이름을 사용하여 애플리케이션 맵의 구성 요소에 레이블을 지정할 수 있습니다.

환경 변수 APPLICATIONINSIGHTS_ROLE_NAME을 사용하여 클라우드 역할 이름을 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 클라우드 역할 이름보다 우선합니다.

또는 Java 시스템 속성 applicationinsights.role.name을 사용하여 클라우드 역할 이름을 설정할 수 있습니다. 또한 JSON 구성에 지정된 클라우드 역할 이름보다 우선합니다.

동일한 JVM에 배포된 애플리케이션이 여러 개 있고 다른 클라우드 역할 이름으로 원격 분석을 보내도록 하려면 클라우드 역할 이름 재정의(미리 보기)를 참조하세요.

클라우드 역할 인스턴스

클라우드 역할 인스턴스는 기본적으로 머신 이름으로 설정됩니다.

클라우드 역할 인스턴스를 머신 이름이 아닌 다른 항목으로 설정하려면 다음을 수행합니다.

{
  "role": {
    "name": "my cloud role name",
    "instance": "my cloud role instance"
  }
}

환경 변수 APPLICATIONINSIGHTS_ROLE_INSTANCE를 사용하여 클라우드 역할 인스턴스를 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 클라우드 역할 인스턴스보다 우선합니다.

또는 Java 시스템 속성 applicationinsights.role.instance을 사용하여 클라우드 역할 인스턴스를 설정할 수 있습니다. 또한 JSON 구성에 지정된 클라우드 역할 인스턴스보다 우선합니다.

샘플링

참고 항목

샘플링은 Application Insights의 비용을 줄이는 좋은 방법이 될 수 있습니다. 샘플링 구성은 사용 사례에 맞게 적절하게 설정해야 합니다.

샘플링은 요청을 기준으로 합니다. 즉, 요청이 캡처(샘플링)되면 종속성, 로그 및 예외도 캡처됩니다.

또한 샘플링은 추적 ID를 기준으로 하므로 다양한 서비스에서 일관된 샘플링 결정을 내릴 수 있습니다.

샘플링은 요청 내부의 로그에만 적용됩니다. 요청 내부에 없는 로그(예: 시작 로그)는 기본적으로 항상 수집됩니다. 해당 로그를 샘플링하려면 샘플링 재정의를 사용할 수 있습니다.

속도 제한 샘플링

3.4.0부터 속도 제한 샘플링을 사용할 수 있으며 이제 기본값입니다.

샘플링이 구성되지 않은 경우 기본값은 해당 요청에 대한 모든 종속성 및 로그와 함께 이제 초당 최대(약) 5개의 요청을 캡처하도록 구성된 속도 제한 샘플링입니다.

이 구성은 모든 요청을 캡처하는 이전 기본값을 대체합니다. 여전히 모든 요청을 캡처하려면 고정 백분율 샘플링을 사용하고 샘플링 비율을 100으로 설정합니다.

참고 항목

속도 제한 샘플링은 근사치입니다. 내부적으로 각 원격 분석 레코드에서 정확한 항목 수를 내보내려면 시간이 지남에 따라 "고정" 샘플링 백분율을 조정해야 하기 때문입니다. 내부적으로 속도 제한 샘플링은 새 애플리케이션 로드에 빠르게 적응(0.1초)되도록 조정됩니다. 이러한 이유로 구성된 속도를 많이 또는 너무 오랫동안 초과하지 않아야 합니다.

이 예제에서는 초당 최대(대략) 1개 요청을 캡처하도록 샘플링을 설정하는 방법의 예를 보여 줍니다.

{
  "sampling": {
    "requestsPerSecond": 1.0
  }
}

requestsPerSecond는 소수일 수 있으므로 원하는 경우 초당 요청 1개 미만을 캡처하도록 구성할 수 있습니다. 예를 들어, 0.5 값은 2초마다 최대 1개의 요청을 캡처함을 의미합니다.

환경 변수 APPLICATIONINSIGHTS_SAMPLING_REQUESTS_PER_SECOND를 사용하여 샘플링 비율을 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 속도 제한보다 우선합니다.

고정 백분율 샘플링

이 예제에서는 모든 요청의 약 3분의 1을 캡처하도록 샘플링을 설정하는 방법의 예를 보여 줍니다.

{
  "sampling": {
    "percentage": 33.333
  }
}

환경 변수 APPLICATIONINSIGHTS_SAMPLING_PERCENTAGE를 사용하여 샘플링 비율을 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 샘플링 비율보다 우선합니다.

참고 항목

샘플링 비율의 경우 100/N(여기서 N은 정수)에 가까운 백분율을 선택합니다. 현재 샘플링은 다른 값을 지원하지 않습니다.

샘플링 재정의

샘플링 재정의를 사용하면 기본 샘플링 백분율을 재정의할 수 있습니다. 이렇게 시작할 수 있는 작업의 예는 다음과 같습니다.

  • 잡음 상태 검사에 대한 샘플링 백분율을 0이나 작은 값으로 설정합니다.
  • 잡음 종속성 호출에 대한 샘플링 백분율을 0이나 작은 값으로 설정합니다.
  • 중요한 요청 유형에 대한 샘플링 비율을 100으로 설정합니다. 예를 들어 기본 샘플링이 더 낮은 값으로 구성되어 있더라도 /login을 사용할 수 있습니다.

자세한 내용은 샘플링 재정의 설명서를 참조하세요.

Java Management Extensions 메트릭

다른 JMX(Java Management Extensions) 메트릭을 수집하려는 경우:

{
  "jmxMetrics": [
    {
      "name": "JVM uptime (millis)",
      "objectName": "java.lang:type=Runtime",
      "attribute": "Uptime"
    },
    {
      "name": "MetaSpace Used",
      "objectName": "java.lang:type=MemoryPool,name=Metaspace",
      "attribute": "Usage.used"
    }
  ]
}

앞의 구성 예제에서 다음이 적용됩니다.

  • name은 이 JMX 메트릭에 할당된 메트릭 이름입니다(무엇이든 가능).
  • objectName은 수집하려는 JMX MBean개체 이름입니다. 와일드카드 문자 별표(*)가 지원됩니다.
  • attribute는 수집하려는 JMX MBean의 특성 이름입니다.

숫자 및 부울 JMX 메트릭 값이 지원됩니다. 부울 JMX 메트릭은 false의 경우 0에, true의 경우 1에 매핑됩니다.

자세한 내용은 JMX 메트릭 설명서를 참조하세요.

사용자 지정 차원

모든 원격 분석에 사용자 지정 차원을 추가하려면 다음을 수행합니다.

{
  "customDimensions": {
    "mytag": "my value",
    "anothertag": "${ANOTHER_VALUE}"
  }
}

${...}를 사용하여 시작 시 지정된 환경 변수에서 값을 읽을 수 있습니다.

참고 항목

버전 3.0.2부터 service.version이라는 사용자 지정 차원을 추가하는 경우 값은 사용자 지정 차원이 아닌 Application Insights Logs 테이블의 application_Version 열에 저장됩니다.

상속된 특성(미리 보기)

버전 3.2.0부터 요청 원격 분석에서 프로그래밍 방식으로 사용자 지정 차원을 설정할 수 있습니다. 종속성 및 로그 원격 분석을 통해 상속을 보장합니다. 모두 해당 요청의 컨텍스트에서 캡처됩니다.

{
  "preview": {
    "inheritedAttributes": [
      {
        "key": "mycustomer",
        "type": "string"
      }
    ]
  }
}

그런 다음, 각 요청이 시작될 때 다음을 호출합니다.

Span.current().setAttribute("mycustomer", "xyz");

범위에 사용자 지정 속성 추가도 참조하세요.

연결 문자열 재정의(미리 보기)

이 기능은 3.4.0부터 미리 보기 상태입니다.

연결 문자열 재정의를 사용하면 기본 연결 문자열을 재정의할 수 있습니다. 이렇게 시작할 수 있는 작업의 예는 다음과 같습니다.

  • 하나의 HTTP 경로 접두사 /myapp1에 대해 하나의 연결 문자열을 설정합니다.
  • 또 다른 HTTP 경로 접두사 /myapp2/에 대해 또 다른 연결 문자열을 설정합니다.
{
  "preview": {
    "connectionStringOverrides": [
      {
        "httpPathPrefix": "/myapp1",
        "connectionString": "..."
      },
      {
        "httpPathPrefix": "/myapp2",
        "connectionString": "..."
      }
    ]
  }
}

클라우드 역할 이름 재정의(미리 보기)

이 기능은 3.3.0부터 미리 보기 상태입니다.

클라우드 역할 이름 재정의를 사용하면 기본 클라우드 역할 이름을 재정의할 수 있습니다. 이렇게 시작할 수 있는 작업의 예는 다음과 같습니다.

  • 하나의 HTTP 경로 접두사 /myapp1에 대해 하나의 클라우드 역할 이름을 설정합니다.
  • 다른 HTTP 경로 접두사 /myapp2/에 대해 다른 클라우드 역할 이름을 설정합니다.
{
  "preview": {
    "roleNameOverrides": [
      {
        "httpPathPrefix": "/myapp1",
        "roleName": "Role A"
      },
      {
        "httpPathPrefix": "/myapp2",
        "roleName": "Role B"
      }
    ]
  }
}

런타임에 구성된 연결 문자열

버전 3.4.8부터 런타임에 연결 문자열을 구성하는 기능이 필요한 경우 json 구성에 이 속성을 추가합니다.

{
  "connectionStringConfiguredAtRuntime": true
}

애플리케이션에 applicationinsights-core을 추가합니다.

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>applicationinsights-core</artifactId>
  <version>3.5.3</version>
</dependency>

클래스 com.microsoft.applicationinsights.connectionstring.ConnectionString의 정적 configure(String) 메서드를 사용합니다.

참고 항목

연결 문자열을 구성하기 전에 캡처된 모든 원격 분석은 삭제되므로 애플리케이션 시작 시 가능한 한 빨리 구성하는 것이 가장 좋습니다.

InProc 종속성 자동 수집(미리 보기)

버전 3.2.0부터 컨트롤러 "InProc" 종속성을 캡처하려면 다음 구성을 사용합니다.

{
  "preview": {
    "captureControllerSpans": true
  }
}

브라우저 SDK 로더(미리 보기)

이 기능은 적절한 연결 문자열 구성을 포함하여 애플리케이션의 HTML 페이지에 브라우저 SDK 로더를 자동으로 삽입합니다.

예를 들어, Java 애플리케이션이 다음과 같은 응답을 반환하는 경우:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Title</title>
  </head>
  <body>
  </body>
</html>

다음을 반환하도록 자동으로 수정합니다.

<!DOCTYPE html>
<html lang="en">
  <head>
    <script type="text/javascript">
    !function(v,y,T){var S=v.location,k="script"
    <!-- Removed for brevity -->
    connectionString: "YOUR_CONNECTION_STRING"
    <!-- Removed for brevity --> }});
    </script>
    <title>Title</title>
  </head>
  <body>
  </body>
</html>

이 스크립트는 고객이 웹 사용자 데이터를 추적할 수 있도록 돕는 것을 목표로 하고 수집된 서버 쪽 원격 분석을 사용자의 Azure Portal로 다시 보냅니다. 자세한 내용은 ApplicationInsights-JS에서 확인할 수 있습니다.

이 기능을 사용하도록 설정하려면 아래 구성 옵션을 추가합니다.

{
  "preview": {
    "browserSdkLoader": {
      "enabled": true
    }
  }
}

원격 분석 프로세서(미리 보기)

원격 분석 프로세서를 사용하여 요청, 종속성 및 추적 원격 분석에 적용되는 규칙을 구성할 수 있습니다. 이렇게 시작할 수 있는 작업의 예는 다음과 같습니다.

  • 중요한 데이터를 마스크합니다.
  • 조건부로 사용자 지정 차원을 추가합니다.
  • Azure Portal에서 유사한 원격 분석을 집계하는 데 사용되는 범위 이름을 업데이트합니다.
  • 수집 비용을 제어하기 위해 특정 범위 특성을 삭제합니다.

자세한 내용은 원격 분석 프로세서 설명서를 확인하세요.

참고 항목

수집 비용을 제어하기 위해 특정(전체) 범위를 삭제하려는 경우 샘플링 재정의를 참조하세요.

사용자 지정 계측(미리 보기)

버전 3.3.1부터 애플리케이션의 메서드에 대한 범위를 캡처할 수 있습니다.

{
  "preview": {
    "customInstrumentation": [
      {
        "className": "my.package.MyClass",
        "methodName": "myMethod"
      }
    ]
  }
}

수집 샘플링을 로컬로 사용하지 않도록 설정(미리 보기)

기본적으로 Java 에이전트의 유효 샘플링 비율이 100%이고 Application Insights 리소스에서 수집 샘플링 이 구성된 경우 수집 샘플링 비율이 적용됩니다.

이 동작은 100%의 고정 속도 샘플링 모두에 적용되며, 요청 속도가 속도 제한을 초과하지 않을 때(연속 슬라이딩 기간 동안 100% 효과적으로 캡처) 속도 제한 샘플링에도 적용됩니다.

3.5.3부터 이 동작을 사용하지 않도록 설정하고 Application Insights 리소스에서 수집 샘플링이 구성된 경우에도 원격 분석의 100%를 유지할 수 있습니다.

{
  "preview": {
    "sampling": {
      "ingestionSamplingEnabled": false
    }
  }
}

자동 수집된 로깅

Log4j, Logback, JBoss Logging 및 java.util.logging은 자동 계측됩니다. 이러한 로깅 프레임워크를 통해 수행된 로깅은 자동 수집됩니다.

로깅은 다음과 같은 경우에만 캡처됩니다.

  • 로깅 프레임워크에 대해 구성된 수준을 충족합니다.
  • Application Insights에 대해 구성된 수준도 충족합니다.

예를 들어, 로깅 프레임워크가 패키지 com.example에서 WARN을 기록하도록 구성되고(또한 앞서 설명한 대로 구성) Application Insights가 INFO을 캡처하도록 구성된 경우(또한 설명한 대로 구성) Application Insights는 패키지 com.example에서 WARN(및 더 심각함)만 캡처합니다.

Application Insights에 대해 구성된 기본 수준은 INFO입니다. 이 수준을 변경하려면 다음을 수행합니다.

{
  "instrumentation": {
    "logging": {
      "level": "WARN"
    }
  }
}

환경 변수 APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL을 사용하여 수준을 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 수준보다 우선합니다.

이러한 유효한 level 값을 사용하여 applicationinsights.json 파일에 지정할 수 있습니다. 이 표에서는 서로 다른 로깅 프레임워크의 로깅 수준과 어떻게 관련되어 있는지 보여 줍니다.

수준 Log4j Logback JBoss JUL
OFF OFF OFF OFF OFF
FATAL FATAL 오류 FATAL SEVERE
ERROR(또는 SEVERE) 오류 오류 오류 SEVERE
WARN(또는 WARNING) WARN WARN WARN WARNING
INFO INFO INFO INFO INFO
CONFIG DEBUG DEBUG DEBUG CONFIG
DEBUG(또는 FINE) DEBUG DEBUG DEBUG FINE
FINER DEBUG DEBUG DEBUG FINER
TRACE(또는 FINEST) TRACE TRACE TRACE FINEST
ALL ALL ALL ALL ALL

참고 항목

예외 개체가 로거에 전달되면 로그 메시지(및 예외 개체 세부 정보)는 Azure Portal에서 traces 테이블 대신 exceptions 테이블에 표시됩니다. tracesexceptions 테이블 모두에서 로그 메시지를 보려면 로그(Kusto) 쿼리를 작성하여 둘 모두를 결합할 수 있습니다. 예시:

union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType

로그 마커(미리 보기)

3.4.2부터 Logback 및 Log4j 2에 대한 로그 마커를 캡처할 수 있습니다.

{
  "preview": {
    "captureLogbackMarker":  true,
    "captureLog4jMarker":  true
  }
}

Logback의 기타 로그 특성(미리 보기)

3.4.3부터 Logback에 대해 FileName, ClassName, MethodNameLineNumber를 캡처할 수 있습니다.

{
  "preview": {
    "captureLogbackCodeAttributes": true
  }
}

Warning

코드 특성을 캡처하면 성능 오버헤드가 추가될 수 있습니다.

사용자 지정 차원으로의 로깅 수준

버전 3.3.0부터 LoggingLevel은 기본적으로 Trace의 사용자 지정 차원의 일부로 캡처되지 않습니다. 해당 데이터가 SeverityLevel 필드에서 이미 캡처되어 있기 때문입니다.

필요한 경우 일시적으로 이전 동작을 다시 사용하도록 설정할 수 있습니다.

{
  "preview": {
    "captureLoggingLevelAsCustomDimension": true
  }
}

자동 수집된 마이크로미터 메트릭(Spring Boot Actuator 메트릭 포함)

애플리케이션에서 마이크로미터를 사용하는 경우 마이크로미터 글로벌 레지스트리로 전송되는 메트릭은 자동으로 수집됩니다.

또한 애플리케이션에서 Spring Boot Actuator를 사용하는 경우 Spring Boot Actuator로 구성된 메트릭도 자동으로 수집됩니다.

마이크로미터를 사용하여 사용자 지정 메트릭을 보내려면 다음을 수행합니다.

  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();
    
  4. 메트릭은 customDimensions 열에 캡처된 태그와 함께 customMetrics 테이블로 수집됩니다. 메트릭 탐색기Log-based metrics 메트릭 네임스페이스 아래에서 메트릭을 볼 수도 있습니다.

    참고 항목

    Application Insights Java는 마이크로미터 메트릭 이름에 있는 모든 영숫자가 아닌 문자(대시 제외)를 밑줄로 바꿉니다. 따라서 이전 test.counter 메트릭이 test_counter로 표시됩니다.

자동 수집된 마이크로미터 메트릭 및 Spring Boot Actuator 메트릭을 사용하지 않도록 설정하려면 다음을 수행합니다.

참고 항목

사용자 지정 메트릭은 별도로 청구되며 추가 비용이 발생할 수 있습니다. 가격 정보를 확인하세요. 마이크로미터 및 Spring Boot Actuator 메트릭을 사용하지 않도록 설정하려면 구성 파일에 다음 구성을 추가합니다.

{
  "instrumentation": {
    "micrometer": {
      "enabled": false
    }
  }
}

Java Database Connectivity 쿼리 마스킹

JDBC(Java Database Connectivity) 쿼리의 리터럴 값은 중요한 데이터를 실수로 캡처하지 않도록 기본적으로 마스킹됩니다.

3.4.0부터 이 동작을 사용하지 않도록 설정할 수 있습니다. 예시:

{
  "instrumentation": {
    "jdbc": {
      "masking": {
        "enabled": false
      }
    }
  }
}

Mongo 쿼리 마스킹

Mongo 쿼리의 리터럴 값은 중요한 데이터를 실수로 캡처하지 않도록 기본적으로 마스킹됩니다.

3.4.0부터 이 동작을 사용하지 않도록 설정할 수 있습니다. 예시:

{
  "instrumentation": {
    "mongo": {
      "masking": {
        "enabled": false
      }
    }
  }
}

HTTP 헤더

버전 3.3.0부터 서버(요청) 원격 분석에서 요청 및 응답 헤더를 캡처할 수 있습니다.

{
  "preview": {
    "captureHttpServerHeaders": {
      "requestHeaders": [
        "My-Header-A"
      ],
      "responseHeaders": [
        "My-Header-B"
      ]
    }
  }
}

헤더 이름은 대/소문자를 구분하지 않습니다.

앞의 예는 속성 이름 http.request.header.my_header_ahttp.response.header.my_header_b 아래에 캡처됩니다.

마찬가지로 클라이언트(종속성) 원격 분석에서 요청 및 응답 헤더를 캡처할 수 있습니다.

{
  "preview": {
    "captureHttpClientHeaders": {
      "requestHeaders": [
        "My-Header-C"
      ],
      "responseHeaders": [
        "My-Header-D"
      ]
    }
  }
}

다시 말하지만 헤더 이름은 대/소문자를 구분하지 않습니다. 앞의 예는 속성 이름 http.request.header.my_header_chttp.response.header.my_header_d 아래에 캡처됩니다.

HTTP 서버 4xx 응답 코드

기본적으로 4xx 응답 코드를 생성하는 HTTP 서버 요청은 오류로 캡처됩니다.

버전 3.3.0부터 성공으로 캡처하도록 이 동작을 변경할 수 있습니다.

{
  "preview": {
    "captureHttpServer4xxAsError": false
  }
}

특정 자동 수집된 원격 분석 표시 안 함

3.0.3 버전부터 다음 구성 옵션을 사용하여 자동 수집된 특정 원격 분석을 표시하지 않을 수 있습니다.

{
  "instrumentation": {
    "azureSdk": {
      "enabled": false
    },
    "cassandra": {
      "enabled": false
    },
    "jdbc": {
      "enabled": false
    },
    "jms": {
      "enabled": false
    },
    "kafka": {
      "enabled": false
    },
    "logging": {
      "enabled": false
    },
    "micrometer": {
      "enabled": false
    },
    "mongo": {
      "enabled": false
    },
    "quartz": {
      "enabled": false
    },
    "rabbitmq": {
      "enabled": false
    },
    "redis": {
      "enabled": false
    },
    "springScheduling": {
      "enabled": false
    }
  }
}

이러한 환경 변수를 false로 설정하여 이러한 계측을 표시하지 않을 수도 있습니다.

  • APPLICATIONINSIGHTS_INSTRUMENTATION_AZURE_SDK_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_CASSANDRA_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_JDBC_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_JMS_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_KAFKA_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_MICROMETER_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_MONGO_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_RABBITMQ_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_REDIS_ENABLED
  • APPLICATIONINSIGHTS_INSTRUMENTATION_SPRING_SCHEDULING_ENABLED

그러면 이러한 변수는 JSON 구성에 지정된 사용 가능한 변수보다 우선합니다.

참고 항목

더 세분화된 컨트롤을 원하는 경우(예: 모든 redis 호출이 아니라 일부 redis 호출을 표시하지 않는 경우)에는 샘플링 재정의를 참조하세요.

계측 미리 보기

버전 3.2.0부터 다음 미리 보기 계측을 사용하도록 설정할 수 있습니다.

{
  "preview": {
    "instrumentation": {
      "akka": {
        "enabled": true
      },
      "apacheCamel": {
        "enabled": true
      },
      "grizzly": {
        "enabled": true
      },
      "ktor": {
        "enabled": true
      },
      "play": {
        "enabled": true
      },
      "r2dbc": {
        "enabled": true
      },
      "springIntegration": {
        "enabled": true
      },
      "vertx": {
        "enabled": true
      }
    }
  }
}

참고 항목

Akka 계측은 버전 3.2.2부터 사용할 수 있습니다. Vertx HTTP Library 계측은 버전 3.3.0부터 사용할 수 있습니다.

메트릭 간격

기본적으로 메트릭은 60초마다 캡처됩니다.

버전 3.0.3부터 이 간격을 변경할 수 있습니다.

{
  "metricIntervalSeconds": 300
}

3.4.9 GA에서 시작하여 APPLICATIONINSIGHTS_METRIC_INTERVAL_SECONDS 환경 변수를 사용하여 metricIntervalSeconds를 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 metricIntervalSeconds보다 우선합니다.

이 설정은 다음 메트릭에 적용됩니다.

하트비트

기본적으로 Application Insights Java 3.x는 15분마다 한 번씩 하트비트 메트릭을 보냅니다. 하트비트 메트릭을 사용하여 경고를 트리거하는 경우 이 하트비트의 빈도를 늘릴 수 있습니다.

{
  "heartbeat": {
    "intervalSeconds": 60
  }
}

참고 항목

하트비트 데이터가 Application Insights 사용을 추적하는 데에도 사용되므로 간격을 15분보다 길게 늘릴 수 없습니다.

인증

참고 항목

인증 기능은 버전 3.4.17부터 GA입니다.

인증을 사용하여 Microsoft Entra 인증에 필요한 토큰 자격 증명을 생성하도록 에이전트를 구성할 수 있습니다. 자세한 내용은 인증 설명서를 참조하세요.

HTTP 프록시

애플리케이션이 방화벽 뒤에 있고 Application Insights에 직접 연결할 수 없는 경우 Application Insights에서 사용하는 IP 주소를 참조하세요.

이 문제를 해결하려면 HTTP 프록시를 사용하도록 Application Insights Java 3.x를 구성하면 됩니다.

{
  "proxy": {
    "host": "myproxy",
    "port": 8080
  }
}

https://<host>:<port> 형식을 사용하는 APPLICATIONINSIGHTS_PROXY 환경 변수를 사용하여 http 프록시를 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 프록시보다 우선합니다.

APPLICATIONINSIGHTS_PROXY 환경 변수: https://<user>:<password>@<host>:<port>를 사용하여 프록시에 대한 사용자 및 암호를 제공할 수 있습니다.

Application Insights Java 3.x는 설정된 경우 전역 https.proxyHosthttps.proxyPort 시스템 속성 http.nonProxyHosts도(필요한 경우) 적용합니다.

수집 실패에서 복구

Application Insights 서비스에 원격 분석을 보내는 데 실패하면 Application Insights Java 3.x는 원격 분석을 디스크에 저장하고 디스크에서 계속 다시 시도합니다.

디스크 지속성에 대한 기본 제한은 50Mb입니다. 원격 분석 볼륨이 높거나 더 긴 네트워크 또는 수집 서비스 중단에서 복구할 수 있어야 하는 경우 버전 3.3.0부터 이 제한을 늘릴 수 있습니다.

{
  "preview": {
    "diskPersistenceMaxSizeMb": 50
  }
}

자체 진단

“자체 진단”은 Application Insights Java 3.x의 내부 로깅을 참조합니다. 이 기능은 Application Insights 자체의 문제를 발견하고 진단하는 데 유용할 수 있습니다.

기본적으로 Application Insights Java 3.x는 다음 구성에 해당하는 applicationinsights.log 파일과 콘솔 모두에 대해 INFO 수준으로 로그를 기록합니다.

{
  "selfDiagnostics": {
    "destination": "file+console",
    "level": "INFO",
    "file": {
      "path": "applicationinsights.log",
      "maxSizeMb": 5,
      "maxHistory": 1
    }
  }
}

앞의 구성 예제에서 다음이 적용됩니다.

  • levelOFF, ERROR, WARN, INFO, DEBUG 또는 TRACE 중 하나일 수 있습니다.
  • path는 절대 또는 상대 경로일 수 있습니다. 상대 경로는 applicationinsights-agent-3.5.3.jar이 있는 디렉터리를 기준으로 확인됩니다.

버전 3.0.2부터 환경 변수 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL을 사용하여 자가 진단 level을 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 자체 진단 수준보다 우선합니다.

버전 3.0.3부터 환경 변수 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_FILE_PATH를 사용하여 자가 진단 파일 위치를 설정할 수도 있습니다. 그러면 JSON 구성에 지정된 자체 진단 파일 경로보다 우선합니다.

예제

이 예제에서는 여러 구성 요소가 있는 구성 파일이 어떻게 표시되는지를 보여 줍니다. 요구 사항에 따라 특정 옵션을 구성하세요.

{
  "connectionString": "...",
  "role": {
    "name": "my cloud role name"
  },
  "sampling": {
    "percentage": 100
  },
  "jmxMetrics": [
  ],
  "customDimensions": {
  },
  "instrumentation": {
    "logging": {
      "level": "INFO"
    },
    "micrometer": {
      "enabled": true
    }
  },
  "proxy": {
  },
  "preview": {
    "processors": [
    ]
  },
  "selfDiagnostics": {
    "destination": "file+console",
    "level": "INFO",
    "file": {
      "path": "applicationinsights.log",
      "maxSizeMb": 5,
      "maxHistory": 1
    }
  }
}