SORT 명령어

SORT 명령어

sort 명령어는 검색 결과를 지정한 필드에 따라 정렬해요. 접두(prefix) 표기법과 접미(suffix) 표기법 두 가지를 지원해요.

출처: 문서

본문

sort 명령어는 검색 결과를 지정한 필드에 따라 정렬해요.

구문 (Syntax)

sort 명령어는 두 가지 구문 표기법을 지원해요. 하나의 sort 명령어 안에서는 한 가지 표기법만 일관되게 사용해야 해요.

접두 표기법 (Prefix notation)

sort 명령어의 접두 표기법 구문은 다음과 같아요:

sort [<count>] [+|-] <field> [, [+|-] <field>]...

접미 표기법 (Suffix notation)

sort 명령어의 접미 표기법 구문은 다음과 같아요:

sort [<count>] <field> [asc|desc|a|d] [, <field> [asc|desc|a|d]]...

매개변수 (Parameters)

sort 명령어는 다음 매개변수를 지원해요.

매개변수 필수/선택 설명
<field> 필수 정렬에 사용할 필드예요. 필드 값 해석 방식을 지정하려면 auto(field), str(field), ip(field), num(field)를 사용해요. 여러 필드는 쉼표로 구분해 지정할 수 있어요.
<count> 선택 반환할 결과의 개수예요. 0 이하의 값이면 모든 결과를 반환해요. 기본값은 0이에요.
`[+ -]` 선택
[asc|desc|a|d] 선택 접미 표기법 전용이에요. 정렬 순서를 지정해요. asc/a는 오름차순, desc/d는 내림차순이에요. 기본값은 오름차순이에요.

예제 1: 하나의 필드로 정렬하기

다음 쿼리는 로그를 심각도(severity) 숫자 기준 오름차순으로 정렬해 가장 덜 심각한 항목부터 보여줘요:

source=otellogs
| sort severityNumber
| fields severityText, severityNumber, `resource.attributes.service.name`
| head 4

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

severityText | severityNumber | resource.attributes.service.name
DEBUG | 5 | cart
DEBUG | 5 | product-catalog
DEBUG | 5 | cart
INFO | 9 | frontend

예제 2: 하나의 필드를 내림차순으로 정렬하기

다음 쿼리는 로그를 심각도 기준 내림차순으로 정렬해 가장 중요한 문제를 먼저 보여줘요. 접두 표기법(- severityNumber)이나 접미 표기법(severityNumber desc)을 사용할 수 있어요:

source=otellogs
| dedup severityText
| sort - severityNumber
| fields severityText, severityNumber

이 쿼리는 다음 쿼리와 동일해요:

source=otellogs
| dedup severityText
| sort severityNumber desc
| fields severityText, severityNumber

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

severityText | severityNumber
ERROR | 17
WARN | 13
INFO | 9
DEBUG | 5

예제 3: 여러 필드로 정렬하기

다음 쿼리는 오류를 심각도 내림차순, 서비스 이름 오름차순으로 정렬해 가장 중요한 문제가 먼저 나오고, 각 심각도 수준 안에서는 서비스를 알파벳순으로 보여줘요. 접두 표기법(+/-)이나 접미 표기법(asc/desc)을 사용할 수 있어요:

source=otellogs
| dedup severityText, `resource.attributes.service.name`
| sort + severityNumber, - `resource.attributes.service.name`
| fields severityText, severityNumber, `resource.attributes.service.name`
| head 5

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

severityText | severityNumber | resource.attributes.service.name
DEBUG | 5 | product-catalog
DEBUG | 5 | cart
INFO | 9 | frontend
INFO | 9 | checkout
INFO | 9 | cart

접미 표기법을 사용한 동일한 쿼리는 다음과 같아요:

source=otellogs
| dedup severityText, `resource.attributes.service.name`
| sort severityNumber asc, `resource.attributes.service.name` desc
| fields severityText, severityNumber, `resource.attributes.service.name`
| head 5

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

severityText | severityNumber | resource.attributes.service.name
DEBUG | 5 | product-catalog
DEBUG | 5 | cart
INFO | 9 | frontend
INFO | 9 | checkout
INFO | 9 | cart

예제 4: null 값을 가진 필드 정렬하기

기본 오름차순 정렬에서는 null 값이 먼저 나와요. 다음 쿼리는 instrumentationScope.name 필드로 정렬해, 계측(instrumentation) 메타데이터가 없는 로그가 계측된 로그보다 먼저 나타나는 것을 보여줘요:

source=otellogs
| sort instrumentationScope.name
| fields instrumentationScope.name, severityText
| head 6

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

instrumentationScope.name | severityText
null | DEBUG
null | ERROR
null | INFO
null | ERROR
null | WARN
null | INFO

예제 6: 반환할 정렬 문서 수 지정하기

다음 쿼리는 모든 로그를 심각도별로 정렬하고 가장 덜 심각한 3개 항목만 반환해요:

source=otellogs
| sort 3 severityNumber
| fields severityText, severityNumber

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

severityText | severityNumber
DEBUG | 5
DEBUG | 5
DEBUG | 5

예제 7: 필드 타입을 지정해 정렬하기

다음 쿼리는 str()을 사용해 심각도 숫자를 숫자 기준이 아니라 사전순(lexicographically)으로 정렬해요. 문자열 정렬은 문자 하나씩 비교하므로 5와 9가 21 뒤에 오는 점을 확인할 수 있어요:

source=otellogs
| dedup severityText
| sort str(severityNumber)
| fields severityText, severityNumber

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

severityText | severityNumber
WARN | 13
ERROR | 17
DEBUG | 5
INFO | 9

더 알아보기 (Learn more)