dedup 명령

dedup 명령

dedup 명령은 지정된 필드로 정의된 중복 문서를 검색 결과에서 제거해요.

출처: 문서

본문

구문(Syntax)

dedup 명령은 다음과 같은 구문을 가져요.

dedup [int] <field-list> [keepempty=<bool>] [consecutive=<bool>]

매개변수(Parameters)

dedup 명령은 다음 매개변수를 지원해요.

Parameter Required/Optional Description
<field-list> Required 중복 제거에 사용할 쉼표로 구분된 필드 목록. 최소한 하나의 필드가 필요해요.
<int> Optional 각 조합에 대해 유지할 중복 문서 수. 0보다 커야 해요. 기본값은 1이에요.
keepempty Optional true로 설정하면 필드 목록의 필드 중 하나라도 NULL 값이거나 누락된 문서를 유지해요. 기본값은 false예요.
consecutive Optional true로 설정하면 연속된 중복 문서만 제거해요. 기본값은 false예요. 레거시 SQL 엔진(plugins.calcite.enabled=false)이 필요해요.

예시 1: 단일 필드를 기준으로 중복 제거

다음 쿼리는 서비스 이름으로 중복을 제거하여 서비스별로 오류 샘플 하나를 얻어요. 시스템에서 무엇이 실패하고 있는지 빠르게 확인할 수 있어요.

source=otellogs
| where severityText IN ('ERROR', 'WARN')
| dedup `resource.attributes.service.name`
| sort `resource.attributes.service.name`
| fields `resource.attributes.service.name`, severityText, body

이 쿼리는 다음과 같은 결과를 반환해요.

resource.attributes.service.name severityText body
checkout ERROR NullPointerException in CheckoutService.placeOrder at line 142
frontend-proxy ERROR [2024-02-01T09:20:00.456Z] “POST /api/checkout HTTP/1.1” 503 - 0 30000 checkout-8d4f7b-mk2p9
payment ERROR Payment failed: connection timeout to payment gateway after 30000ms
product-catalog WARN Slow query detected: SELECT * FROM products WHERE category = ‘electronics’ took 3200ms
recommendation ERROR Failed to process recommendation request: invalid product ID from 203.0.113.50

예시 2: 여러 중복 문서 유지하기

다음 쿼리는 심각도 수준별로 최대 두 개의 로그를 유지하여 각 수준의 다양한 문제 유형을 파악할 수 있는 더 넓은 샘플을 제공해요.

source=otellogs
| dedup 2 severityText
| sort severityNumber
| fields severityText, severityNumber
| head 6

이 쿼리는 다음과 같은 결과를 반환해요.

severityText severityNumber
DEBUG 5
DEBUG 5
INFO 9
INFO 9
WARN 13
WARN 13

예시 3: 빈 필드 값이 있는 문서 처리하기

다음 쿼리는 계측 범위(instrumentation scope) 이름으로 중복을 제거하여 어떤 OTel SDK가 보고 중인지 확인해요. 기본적으로 null 값이 있는 레코드는 제거돼요.

source=otellogs
| dedup instrumentationScope.name
| fields instrumentationScope.name
| sort instrumentationScope.name

이 쿼리는 다음과 같은 결과를 반환해요.

instrumentationScope.name
@opentelemetry/instrumentation-http
Microsoft.Extensions.Hosting
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc

예시 4: 연속 문서 중복 제거

다음 쿼리는 연속된 중복 문서를 제거해요. 로그가 심각도별로 정렬되면 이는 심각도 수준 간의 전환을 보여주며, 상승 패턴을 파악하는 데 도움이 돼요.

source=otellogs
| sort severityNumber, `resource.attributes.service.name`
| dedup severityText consecutive=true
| fields severityText, `resource.attributes.service.name`

이 쿼리는 다음과 같은 결과를 반환해요.

severityText resource.attributes.service.name
DEBUG cart
INFO cart
WARN frontend-proxy
ERROR checkout

더 알아보기 (Learn more)