DataPrime 쿼리에서 쿼리 매개변수 사용
IBM® Cloud Logs DataPrime $p 변수를 사용하면 사용자 지정 대시보드 및 시간 관련 매개변수에 대한 DataPrime 쿼리에 변수를 통합할 수 있습니다.
이 기능은 변수를 쿼리에 직접 작성한 것처럼 외부화합니다. 이를 통해 사용자 정의 입력과 상황에 맞는 데이터 처리가 가능해져 필터링, 계산, 시각화의 유연성이 향상됩니다.
$p 어떻게 작동하나요?
-
$p는 위젯, 쿼리 및 대시보드 시간 선택기와 같은 외부 필터에서 사용할 수 있는 쿼리 매개변수를 나타냅니다. -
$p를 사용하면 수동으로 쿼리를 수정할 필요 없이 동적 필터링 및 기타 작업을 수행할 수 있습니다. -
사용자는 대시보드에서 이러한 매개변수를 전달하고 조작할 수 있습니다.
쿼리 매개변수 정의
사용자 지정 대시보드를 구성할 때와 로그 보기에서 쿼리를 만들 때 $p 변수를 사용할 수 있습니다.
사용자 정의 대시보드
사용자 지정 대시보드에서 변수가 만들어지면 사용자가 선택한 변수 값은 $p.<variable_name> 을 사용하여 DataPrime 쿼리의 쿼리 매개 변수로 반영됩니다.
사용자 지정 대시보드의 변수는 문자열 또는 다중 문자열 값으로 취급되므로 숫자 변수를 직접 정의할 수 없습니다. 쿼리에는 숫자 변수를 사용할 수 있습니다(예: filter duration > $p.minDuration).
로그
로그 보기에서 $p.timeRange.* 을 사용하여 DataPrime 쿼리에서 시간 계산을 수행할 수 있으며, $p 을 사용하면 UI 시간 선택기에서 결정한 시간 창에서 데이터를 소싱할 수 있습니다.
시간 관련 매개변수
시간 관련 매개변수가 자동으로 생성됩니다. 사용자 지정 대시보드 및 로그 보기에서 timeRange 을 사용하여 UI 시간 선택기로 결정한 시간 창에서 데이터를 소싱할 수 있습니다.
시간 관련 매개변수에는 다음이 포함됩니다:
$p.timeRange.startTime- UI 시간 선택기의 시작 시간(예: 2024-03-06T08:00:00Z )
$p.timeRange.endTime- UI 시간 선택기의 종료 시간(예: 2024-03-06T12:00:00Z )
쿼리 매개변수 사용 예
다음 섹션에서는 $p 사용 예시를 제공합니다.
단일값 변수로 작업하기
다음 쿼리 예제에서는 == 을 사용하여 단일 값 변수를 통합합니다.
source logs
| filter cluster_name == $p.cluster
cluster_name 이 사용자 정의 단일 값 변수 $p.cluster 와 일치하는 로그를 필터링합니다.
사용자는 사용자 지정 대시보드 UI를 사용하여 이 값을 동적으로 수정할 수 있습니다.
다중 선택 변수로 작업하기
다중 선택 변수를 사용하면 단일 매개변수에 여러 개의 잠재적 값을 전달할 수 있습니다.
'모든 값' 선택 처리
사용자가 '임의의 값'을 선택하면 시스템에서는 이를 null 으로 처리하여 필터가 무시됩니다.
source logs
| filter $p.clusters == null || $p.clusters.arrayContains($d.clusterId)
사용자가 $p.clusters 에 대해 '임의의 값'을 선택하면 필터가 제거되어 null로 처리됩니다. 그렇지 않으면 필터는 $p.clusters 의 선택된 값 내에 $d.clusterId 이 존재하도록 합니다.
정적 값 목록
정적 값 목록(예: 1, 5, 10, 30, 60)이 있는 minDurationSeconds 변수를 만듭니다. 이러한 값은 문자열로 처리되지만 다음과 같이 쿼리 내에서 숫자로 사용할 수 있습니다:
source logs
| filter duration ≥ $p.minDuration:number
변수를 사용하여 동적 groupby 필드 정의하기
groupby 에서는 동적 변수를 사용하여 사용자가 정의한 기준에 따라 쿼리가 조정되므로 보다 유연한 데이터 집계 및 분석이 가능합니다. 다음 쿼리는 $p.myGroupByVar 변수에 지정된 필드를 기준으로 데이터를 그룹화한 다음 각 그룹에서 발생 횟수를 계산하여 결과를 집계합니다.
groupby $d[$p.myGroupByVar] calculate count()
이는 groupby $p.my_group_by_variable calculate count() 과 다릅니다. 변수가 문자열이므로 이 쿼리를 실행하는 것은 groupby 'my_value' calculate count() 과 사실상 동일하며, 이는 정적 문자열에 대해 groupby 을 수행하여 모든 결과를 my_value 이라는 단일 그룹으로
집계한다는 의미입니다.
특정 시간 범위 내에서 로그 필터링
이렇게 하면 기간 필드가 $p.minDuration 보다 크거나 같도록 하면서 지정된 시간 범위 내의 로그를 필터링합니다.
source logs between $p.timeRange.startTime and $p.timeRange.endTime
| filter duration >= $p.minDuration
가장 가까운 시간으로 반올림
이 예에서는 기간에 따라 로그를 필터링하기 전에 시간 범위를 가장 가까운 1시간으로 조정합니다. 시간 계산은 $p.timeRange.* 을 사용하여 수행할 수 있습니다.
source logs between $p.timeRange.startTime/1h and $p.timeRange.endTime/1h+1h
| filter duration >= $p.minDuration
동일한 기간의 지난 주 데이터 조인하기
다음 쿼리는 join 명령을 사용하여 오늘부터 정확히 1주일 전까지의 하위 시스템별 로그 수를 조인하고 비교합니다.
source logs
| groupby $l.subsystemname calculate count() as cnt
| join (source logs timeshifted -7d
| groupby $l.subsystemname calculate count() as cnt) using subsystemname into a_week_before
이 자세한 예는 필요한 경우 시간 범위를 더 잘 제어할 수 있는 방법을 제공합니다.
source logs
| groupby $l.subsystemname calculate count() as cnt
| join (source logs between $p.timeRange.startTime-7d and $p.timeRange.endTime-7d
| groupby $l.subsystemname calculate count() as cnt) using subsystemname into a_week_before