DataPrime 표현식 언어(DPXL) 참조

DataPrime 표현식 언어 또는 DPXL은 DataPrime 표현식 syntax.You는 이를 사용하여 스트리밍 설정 시 등 풍부한 표현식 기반 필터를 정의하는 데 사용할 수 있습니다.

DPXL 표현식은 필터 연산자에 사용되는 것과 같은 DataPrime 표현식의 하위 집합입니다.

DPXL 표현식은 예측 가능성과 안정성을 유지하기 위해 버전이 관리됩니다. 버전 관리를 통해 기존 표현식의 의미를 변경하지 않고도 시간이 지남에 따라 DPXL을 개선할 수 있습니다.

각 DPXL 표현식은 버전 식별자 <vX>(현재는 <v1>)로 시작됩니다. 그 다음에는 리터럴, 논리 및 비교 구문, 키 경로 액세스, 함수를 포함한 실제 부울 표현식이 이어집니다.

<v1> <boolean-expression>

<v> 접두사는 UI를 사용할 때 자동으로 포함되므로 지정할 필요가 없습니다. 그러나 API에서 사용되는 DPXL 표현식은 <v1> 접두사로 시작해야 합니다.

# A filter that returns true if my_text field has the value 'example'
<v1> $d.my_text == 'example'

# A filter that returns true if the event's timestamp is before the beginning of the year 2024
<v1> $m.timestamp < @'2024-01-01T00:00:00'

# A filter that returns true if the application name starts with 'dev-'
<v1> $l.applicationname.startsWith('dev-')

# A filter that returns true if the field region_id is us-east-1 or us-east-2
<v1> region_id:string.in('us-east-1', 'us-west-2')

데이터 유형

DPXL은 다양한 데이터 유형을 지원합니다.

데이터 유형
데이터 유형
문자열 'us-east-1’
’dev-’
23
-12.32
bool true
false
시간소인 @(’2023-01-01T00:00Z’)
@’now’
정규식 /H.*o$/
/^prod-.*/
severity VERBOSE
DEBUG
INFO
WARNING
ERROR
CRITICAL

또한 다른 모든 유형과 함께 사용할 수 있는 null 리터럴도 있습니다.

연산자

DPXL은 여러 사업자를 지원합니다.

연산자
운영자 의미 설명 예시
&& 논리 AND country == ‘us’ && region == ‘us-south’ countryus 이고 regionus-south 인 경우 true를 반환합니다.
|| 논리 OR age > 40 || country == ‘us’ age 이 40보다 크거나 countryus 인 경우 true를 반환합니다.
! 논리 NOT !region.contains(’us-’) regionus- 가 포함되지 않은 경우 true를 반환합니다

순서 지정

괄호를 사용하여 표현식 내부의 평가 순서를 제어할 수 있습니다. 예를 들어, 다음과 같습니다.

region.startsWith('us-') &&
(country == 'us' && (age > 40 || age < 10)) || (country == 'il' && age > 25)

비교 연산자

DPXL은 여러 비교 연산자를 지원합니다.

비교 연산자
운영자 의미 예제
> 초과 duration > 40.5
$m.timestamp > @(’2023-01-01T00:00:00’)
>= 이상 duration >= 40.5
< 미만 age < 20
<= 이하 age <= 20
lastName <= ‘Smith’
== 같음 region == 'us-south'
!= 같지 않음 first_name != 'joe'

키 경로

키 경로는 각각 별도의 접두사가 있는 세 가지 부분으로 나뉩니다:

$m
메타데이터
$l
applicationname 또는 subsystemName 와 같은 레이블이 있습니다
$d
사용자 데이터(기본 접두사)

$m- 메타데이터 키 경로

메타데이터 키 경로
키 경로 데이터 유형 설명
$m.timestamp 시간소인 이벤트의 타임스탬프를 포함합니다
$m.severity severity 이벤트의 심각도를 포함합니다

$l- 키 경로에 레이블 지정

로그의 키 경로에 레이블 지정
키 경로 데이터 유형
$l.applicationname 문자열
$l.subsystemname 문자열

$d- 사용자 데이터 키 경로

중첩된 키 경로를 포함하여 모든 사용자 키 경로는 $d.<keypath> 을 사용하여 액세스할 수 있습니다.

$d 이 기본 접두사입니다. 접두사가 포함되지 않은 모든 키 경로는 사용자 데이터 필드로 간주됩니다.

함수

함수는 DPXL 표현식 내에서 추가 기능을 제공합니다.

함수
기능 설명
<s>.startsWith(<substr>):bool 문자열 <s> 이 지정된 하위 문자열 <substr> 로 시작하는지 확인합니다 region.startsWith('us-')
<s>.endsWith(<substr>):bool 문자열 <s> 이 지정된 하위 문자열 <substr> 로 끝나는지 확인합니다 firstName.endsWith(’Jo’)
<s>.contains(<substr>):bool 문자열 <s> 에 지정된 하위 문자열 <substr> 이 포함되어 있는지 확인합니다 stream.contains(’err’)
<s>.matches(<regex>):bool <s> 문자열이 <regex> 에서 제공한 지정된 패턴과 일치하는지 확인합니다 hostname.matches(/prod-.*/)
<value>.in(<value1>,<value2>,...) 값이 제공된 값 중 하나인지 확인합니다 value1-valueN region.in(’us-east’,’us-south’)

데이터 유형 추론하기

DPXL은 키 경로의 예상 데이터 유형을 추론하려고 시도합니다. 예를 들어 age > 50 을 처리할 때 age 가 숫자로 예상되는 것으로 추론합니다. DPXL이 키 경로의 데이터 유형을 유추할 수 없는 경우 유형에 대한 필요한 정보가 필요합니다. 예를 들어, 다음과 같습니다.

'123':number

region1:string == region2

my_key:number > my_other_key

예제

다음은 자체 DPXL 표현식의 기초로 사용할 수 있는 DPXL 예제입니다.

# Allow access only to logs where the application name is "production"
<v1> $l.applicationname == 'production'
# Allow access only to logs in which app name starts with dev, or the field "region_id" in the data is us-east
<v1> $l.applicationname.startsWith('dev-') && region_id == 'us-east'
# Allow access only to logs in which the field "country" is not one of the listed below.
<v1> !$d.country:string.in('us','il','gr')
# Allow access only to logs where the pod name matches the regex provided
<v1> kubernetes.pod_name.matches(/^kafka-[0-9]+/)
# Allow access only to logs that don't have a DEBUG severity
<v1> $m.severity != DEBUG
# Allow access only to logs in which some query duration is very large
<v1> query_duration_seconds > 100
# Allow access only to logs up to the beginning of the year 2024
<v1> $m.timestamp < @'2024-01-01T00:00:00'
# Disallow access to all logs entirely
<v1> false

추론 제한 사항

in 함수는 예상되는 키 경로 유형을 자동으로 추론할 수 없습니다. in 함수를 사용하려면 유형을 표시해야 합니다. 예를 들어, 다음과 같습니다.

<v1> !$d.country:string.in('us','il','gr')