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 |