PPL 구문

PPL 구문 (Syntax)

모든 PPL 쿼리는 search 명령어로 시작해요. 이 명령어는 검색할 인덱스와 문서를 조회할 대상을 지정해요. PPL은 쿼리당 정확히 하나의 search 명령어를 지원하며, 항상 첫 번째 명령어이에요.

출처: 문서

본문

모든 PPL 쿼리는 search 명령어로 시작해요. 이 명령어는 검색할 인덱스와 문서를 조회할 대상을 지정해요.

PPL은 PPL 쿼리당 정확히 하나의 search 명령어를 지원하며, 항상 첫 번째 명령어예요. search라는 단어는 생략할 수 있어요.

이어지는 명령어들은 어떤 순서로든 사용할 수 있어요.

구문 (Syntax)

search source=<index> [boolean-expression]
source=<index> [boolean-expression]

매개변수 (Parameters)

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

매개변수 필수/선택 설명
<index> 필수 쿼리할 인덱스를 지정해요.
<boolean-expression> 선택 불리언 값으로 평가되는 표현식을 지정해요.

구문 표기 규칙 (Syntax notation conventions)

PPL 명령어 구문은 다음 표기 규칙을 사용해요.

자리 표시자 (Placeholders)

자리 표시자는 꺾쇠괄호( < > )로 표시돼요. 이들을 실제 값으로 바꿔야 해요.

예: <field>는 age나 firstname 같은 실제 필드 이름을 지정해야 한다는 뜻이에요.

선택 요소 (Optional elements)

선택 요소는 대괄호( [ ] )로 감싸요. 명령어에서 생략할 수 있어요.

예:

  • [+|-]는 더하기 또는 빼기 기호가 선택적이라는 뜻이에요.
  • [<alias>]는 alias 자리 표시자가 선택적이라는 뜻이에요.

필수 선택 (Required choices)

대안 사이의 필수 선택은 괄호로 표시하고 파이프 구분자로 나눠요 ( (option1 | option2) ). 지정된 옵션 중 정확히 하나를 선택해야 해요.

예: (on | where)는 on 또는 where 중 하나는 반드시 사용해야 하며, 둘 다 사용할 수는 없다는 뜻이에요.

선택 선택 (Optional choices)

대안 사이의 선택 선택은 파이프 구분자가 있는 대괄호로 표시해요 ( [option1 | option2] ). 옵션 중 하나를 선택하거나 전부 생략할 수 있어요.

예: [asc | desc]는 asc, desc 중 하나를 지정하거나 아무것도 지정하지 않을 수 있다는 뜻이에요.

반복 (Repetition)

생략 부호( ... )는 앞의 요소를 여러 번 반복할 수 있음을 나타내요.

예:

  • <field>...는 쉼표 없는 하나 이상의 필드를 뜻해요: field1 field2 field3
  • <field>, ...는 쉼표로 구분된 반복을 뜻해요: field1, field2, field3

예제 (Examples)

예제 1: 인덱스 검색하기

다음 쿼리에서 search 명령어는 otellogs 인덱스를 source로 참조하고, 조건에는 fields 및 where 명령어를 사용해요:

search source=otellogs
| where severityText = 'ERROR'
| fields severityText, `resource.attributes.service.name`

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

severityText | resource.attributes.service.name
ERROR | payment
ERROR | checkout
ERROR | payment
ERROR | frontend-proxy
ERROR | recommendation
ERROR | product-catalog
ERROR | checkout

예제 2: 모든 문서 가져오기

otellogs 인덱스에서 모든 문서를 가져오려면 그것을 source로 지정해요. 다음 예제는 head를 사용해 출력을 5행으로 제한해요:

source=otellogs
| head 5
| fields severityText, `resource.attributes.service.name`, body

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

severityText | resource.attributes.service.name | body
INFO | frontend | [2024-02-01T09:10:00.123Z] "GET /api/products HTTP/1.1" 200 - 1024 45 frontend-6b7b4c9f-x2kl9
INFO | cart | Order #1234 placed successfully by user U100
WARN | product-catalog | Slow query detected: SELECT * FROM products WHERE category = 'electronics' took 3200ms
ERROR | payment | Payment failed: connection timeout to payment gateway after 30000ms
DEBUG | cart | Cache miss for key user:session:U200 in Valkey cluster

예제 3: 조건에 맞는 문서 가져오기

otellogs 인덱스에서 severityText가 ERROR이고 resource.attributes.service.name이 payment인 모든 문서를 가져오려면 다음 쿼리를 사용해요:

source=otellogs severityText = 'ERROR' AND `resource.attributes.service.name` = 'payment'
| fields severityText, `resource.attributes.service.name`, body

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

severityText | resource.attributes.service.name | body
ERROR | payment | Payment failed: connection timeout to payment gateway after 30000ms
ERROR | payment | Out of memory: Java heap space - shutting down pod payment-6f8d4b-ht7q3

더 알아보기 (Learn more)