샘플링 재정의 - Java용 Azure Monitor Application Insights

참고 항목

샘플링 재정의 기능은 3.5.0부터 GA로 제공됩니다.

샘플링 재정의를 사용하면 기본 샘플링 백분율을 재정의할 수 있습니다. 예를 들면 다음과 같습니다.

  • 잡음 상태 검사에 대한 샘플링 백분율을 0이나 작은 값으로 설정합니다.
  • 잡음 종속성 호출에 대한 샘플링 백분율을 0이나 작은 값으로 설정합니다.
  • 기본 샘플링이 더 낮은 것으로 구성된 경우에도 중요한 요청 형식(예: /login)에 대해 샘플링 백분율을 100으로 설정합니다.

용어

샘플링 재정의에 관해 알아보기 전에 ‘범위’라는 용어를 이해해야 합니다. 범위는 다음에 대한 일반적인 용어입니다.

  • 들어오는 요청.
  • 나가는 종속성(예: 다른 서비스에 대한 원격 호출).
  • In-process 종속성(예: 서비스의 하위 구성 요소에 의해 수행되는 작업).

샘플링 재정의의 경우 다음 범위 구성 요소가 중요합니다.

  • 특성

범위 특성은 지정된 요청 또는 종속성의 표준 및 사용자 지정 속성을 둘 다 나타냅니다.

시작하기

시작하려면 applicationinsights.json이라는 구성 파일을 만듭니다. 이를 동일한 디렉터리에 applicationinsights-agent-*.jar로 저장합니다. 다음 템플릿을 사용합니다.

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 0
      },
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 100
      }
    ]
  }
}

작동 방식

telemetryType(Application Insights 3.4.0의 경우 telemetryKind)은 request, dependency, trace(로그) 또는 exception 중 하나여야 합니다.

범위가 시작될 때 해당 시간에 범위에 있는 범위 형식 및 특성을 사용하여 샘플링 재정의가 일치하는지 확인합니다.

일치 항목은 strict 또는 regexp 중 하나일 수 있습니다. 정규식 일치는 전체 특성 값에 대해 수행되므로 abc를 포함한 값을 일치시키려면 .*abc.*를 사용해야 합니다. 샘플링 재정의는 여러 특성 조건을 지정할 수 있습니다. 이 경우 샘플링 재정의에 대해 모두 일치해야 합니다.

샘플링 재정의 중 하나가 일치하는 경우 해당 샘플링 백분율을 사용하여 범위를 샘플링할지 여부를 결정합니다.

일치하는 첫 번째 샘플링 재정의만 사용됩니다.

샘플링 재정의가 일치하지 않는 경우:

  • 추적의 첫 번째 범위인 경우 최상위 샘플링 구성이 사용됩니다.
  • 추적의 첫 번째 범위가 아닌 경우 부모 샘플링 결정이 사용됩니다.

예: 상태 검사에 대한 원격 분석 수집 안 함

이 예제는 /health-checks에 대한 모든 요청의 원격 분석을 수집하지 않습니다.

이 예제는 또한 일반적으로 /health-checks에서 수집되는 다운스트림 범위(종속성)도 수집하지 않습니다.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/health-check",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

예: 노이즈 종속성 호출에 대한 원격 분석 수집 안 함

이 예제는 모든 GET my-noisy-key Redis 호출에 대한 원격 분석을 수집하지 않습니다.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "dependency",
        "attributes": [
          {
            "key": "db.system",
            "value": "redis",
            "matchType": "strict"
          },
          {
            "key": "db.statement",
            "value": "GET my-noisy-key",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

예: 중요한 요청 유형에 대한 원격 분석의 100% 수집

이 예제에서는 /login에 대한 원격 분석의 100%를 수집합니다.

다운스트림 범위(종속성)는 부모의 샘플링 결정(해당 다운스트림 범위에 대한 샘플링 재정의 제외)을 준수하므로 모든 ‘/login’ 요청에 대해서도 수집됩니다.

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
  },
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/login",
            "matchType": "strict"
          }
        ],
        "percentage": 100
      }
    ]
  }
}

샘플링에 사용할 수 있는 범위 특성

범위 특성 이름은 OpenTelemetry 의미 체계 규칙에 기반합니다. (HTTP, 메시징, 데이터베이스, RPC)

https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md

참고 항목

Application Insights Java에서 애플리케이션용으로 캡처한 정확한 특성 집합을 보려면 자체 진단 수준을 디버그로 설정하고 "내보내기 범위" 텍스트로 시작하는 디버그 메시지를 찾습니다.

참고 항목

범위의 시작 부분에 설정된 특성만 샘플링에 사용할 수 있으므로 나중에 캡처되는 http.response.status_code 같은 특성 또는 요청 기간은 OpenTelemetry Java 확장을 통해 필터링할 수 있습니다. 다음은 요청 기간에 따라 범위를 필터링하는샘플 확장입니다.

문제 해결

regexp을(를) 사용하여 샘플링 재정의가 작동하지 않는 경우 .* 정규식을 사용해 보세요. 이제 샘플링이 작동하면 첫 번째 정규식에 문제가 있다는 의미이므로 이 정규식 설명서를 읽습니다.

.*이(가) 작동하지 않는 경우 application-insights.json file에 구문 문제가 있을 수 있습니다. Application Insights 로그를 살펴보고 경고 메시지가 표시되는지 확인하세요.