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