좋은 NRQL 쿼리를 작성하려면 뉴렐릭의 다양한 NRQL 절과 함수가 작동하는 방식을 이해하는 것이 도움이 됩니다. 이 문서에는 NRQL 절 및 함수의 정의가 포함되어 있으며 사용 방법에 대한 예시가 제공됩니다.
기본 NRQL 구문 규칙을 찾고 계십니까? NRQL 사용 방법을 참조하십시오. 지침서가 필요하시면 입문 NRQL 튜토리얼을 참조하십시오.
뉴렐릭이 처음 접해보고 NRQL을 얼마나 쉽게 사용할 수 있는지 알고 싶으시다면, 무료로 플랫폼을 시작하고 튜토리얼을 따라하시기 바랍니다. 해야 할 일은 다음과 같습니다.
쿼리 구성 요소
기본 NRQL 구문 문서에 명시된 바와 같이 모든 NRQL 쿼리에는 SELECT
절과 FROM
절이 포함되며 다른 모든 절은 선택 사항입니다. 아래의 절 정의에는 예시 NRQL 쿼리도 포함되어 있습니다.
필수 조항
SELECT attribute ...
SELECT function(attribute) ...
SELECT
는 속성 또는 함수를 지정하여 데이터 유형의 쿼리할 부분을 지정합니다. 그 뒤에 쉼표로 구분된 하나 이상의 인수가 옵니다. 각 인수에서 다음을 수행할 수 있습니다.
*
를 와일드카드로 사용하여 사용 가능한 모든 속성의 값을 가져옵니다. 예:SELECT * from Transaction
.- 지정된 속성 또는 쉼표로 구분된 목록에 지정된 여러 속성과 연결된 값을 가져옵니다.
- 집계 함수를 선택하여 지정된 속성에서 집계된 값을 가져옵니다.
AS
조항을 사용하여 각 인수에 반환된 결과에 레이블을 지정합니다.
기본 수학 함수와 함께 SELECT
를 사용할 수도 있습니다.
이 쿼리는 지난주 이후의 평균 응답 시간을 반환합니다.
SELECT average(duration) FROM PageView SINCE 1 week ago
옵션 조항
SELECT ... AS 'label' ...
AS
조항을 사용하여 작은따옴표로 구분된 문자열을 사용하여 속성, 집합기, 퍼널의 단계 또는 수학 함수의 결과에 레이블을 지정합니다. 레이블은 결과 차트에 사용됩니다.
이 쿼리는 세션당 페이지 뷰 수를 반환합니다.
SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session' FROM PageView
이 쿼리는 지난 주에 사이트의 메인 페이지와 채용 정보 페이지를 모두 방문한 사람들의 수를 반환합니다.
SELECT funnel(SESSION, WHERE name='Controller/about/main' AS 'Step 1', WHERE name = 'Controller/about/careers' AS 'Step 2') FROM PageView SINCE 1 week ago
SELECT ... (SINCE or UNTIL) (integer units) AGO COMPARE WITH (integer units) AGO ...
COMPARE WITH
조항을 사용하여 서로 다른 두 시간 범위의 값을 비교합니다.
COMPARE WITH
SINCE
또는 UNTIL
문이 필요합니다. COMPARE WITH
에 의해 지정된 시간은 SINCE
또는 UNTIL
에 의해 지정된 시간에 상대적입니다. 예를 들어, SINCE 1 day ago COMPARE WITH 1 day ago
는 어제와 전날을 비교합니다.
COMPARE WITH
값의 시간 범위는 항상 SINCE
또는 UNTIL
로 지정된 시간 범위와 동일합니다. 예를 들어 SINCE 2 hours ago COMPARE WITH 4 hours ago
는 오후 3시부터 오후 5시까지를 오전 11시부터 오후 1시까지 비교할 수 있습니다.
COMPARE WITH
라인 차트 또는 빌보드 형식을 지정할 수 있습니다.
TIMESERIES
를 사용하여,COMPARE WITH
는 비교가 시간에 따라 매핑된 라인 차트를 만듭니다.TIMESERIES
가 없으면 {COMPARE WITH
는 현재 값과COMPARE WITH
값의 백분율 변경으로 빌보드를 생성합니다.
예: 이 쿼리는 1주일 전의 동일한 범위와 비교하여 지난 주의 95번째 백분위수를 보여주는 선형 차트로 데이터를 반환합니다. 처음에는 단일 값으로, 그 다음에는 선형 차트로 보여줍니다.
SELECT percentile(duration, 95) FROM PageView SINCE 1 week ago COMPARE WITH 1 week AGO
SELECT percentile(duration, 95) FROM PageView SINCE 1 week ago COMPARE WITH 1 week AGO TIMESERIES AUTO
중요
COMPARE WITH
을 사용하는 FACET
쿼리의 경우, 결과로 야기되는 패싯은 비교되는 이전 시간 범위가 아니라 SINCE
및 UNTIL
을 사용하여 지정된 시간 범위를 기반으로 선택됩니다. 이전 시간 범위에 대한 FACET
쿼리의 결과에만 다른 패싯 세트가 포함될 수 있습니다.
다음 데이터 유형과 함께 이 조항을 사용할 수 있습니다.
Transaction
TransactionError
에이전트 API를 통해 보고되는 커스텀 이벤트
EXTRAPOLATE
의 목적은 쿼리 결과가 시스템의 총 활동을 더 가깝게 나타내도록 이벤트 데이터의 APM 에이전트 샘플링 효과를 수학적으로 보정하는 것입니다.이 절은 에이전트가 너무 많은 이벤트를 보고하여 종종 하베스트 주기 보고 제한을 초과하는 경우에 유용합니다. 이 경우 에이전트는 이벤트 샘플링을 시작합니다.
EXTRAPOLATE
가 사용을 지원하는 NRQL 쿼리에 사용되면 보고된 이벤트와 총 이벤트 간의 비율을 사용하여 샘플링되지 않은 총 데이터의 근사치를 외삽합니다. 사용을 지원하지 않거나 샘플링된 데이터를 사용하지 않은 NRQL 쿼리에서 사용하면 효과가 없습니다.중요
EXTRAPOLATE
는 처리량이나 오류율과 같은 동종 데이터에 가장 유용합니다. 고유한 항목의 수(예:uniqueCount()
또는uniques()
)를 외삽하려고 시도할 때는 효과적이지 않습니다.이 조항은 다음 집계 기능 중 하나를 사용하는 NRQL 쿼리에서만 작동합니다.
apdex
average
count
histogram
sum
percentage
(인수로 취하는 함수가EXTRAPOLATE
를 지원하는 경우)rate
(인수로 취하는 함수가EXTRAPOLATE
를 지원하는 경우)stddev
이름이
interestingApplication
인 서비스의 외삽 처리량을 표시하는 쿼리입니다.SELECT count(*) FROM Transaction WHERE appName='interestingApplication' SINCE 60 minutes ago EXTRAPOLATE시계열로 표시되는 트랜잭션 이름별로 이름이
interestingApplication
인 서비스의 외삽 처리량을 표시하는 쿼리입니다.SELECT count(*) FROM Transaction WHERE appName='interestingApplication'SINCE 60 minutes ago FACET name TIMESERIES 1 minute EXTRAPOLATE
SELECT ... FACET attribute ...
FACET
을 사용하여 속성 값으로 결과를 분리하고 그룹화합니다. 예를 들어 deviceType
으로 FACET
PageView
데이터를 사용하여 모바일, 태블릿 및 데스크톱 기기에서 발생하는 트래픽의 비율을 파악할 수 있습니다.
LIMIT
조항을 사용하여 표시되는 패싯 수를 지정합니다(기본값은 10). 더 복잡한 그룹화의 경우 FACET CASES
를 사용합니다. FACET
조항은 쉼표로 구분된 최대 5개의 속성을 지원합니다.
패싯은 SELECT
조항에 제공한 첫 번째 필드를 기준으로 내림차순으로 정렬됩니다. 고유 값이 2,000개가 넘는 속성을 패싯하는 경우 패싯 값의 하위 집합이 선택되고 쿼리 유형에 따라 정렬됩니다.
min()
, max()
, percentile()
, average()
또는 count()
를 선택할 때 FACET
은 이러한 함수를 사용하여 패싯을 선택하고 정렬하는 방법을 결정합니다. 다른 기능을 선택할 때 FACET
은 패싯 선택 및 정렬 방법을 결정하기 위해 패싯 대상 속성의 빈도를 사용합니다.
이 쿼리는 페이지뷰 수가 가장 높은 도시를 보여줍니다. 이 쿼리는 도시당 총 페이지뷰 수를 사용하여 패싯이 선택되고 정렬되는 방식을 결정합니다.
SELECT count(*) FROM PageView FACET city
이 쿼리는 가장 많은 수의 고유 URL에 액세스하는 도시를 보여줍니다. 이 쿼리는 결과에 특정 도시가 나타나는 총 횟수를 사용하여 패싯이 선택되고 정렬되는 방법을 결정합니다.
SELECT uniqueCount(pageUrl) FROM PageView FACET city
쿼리에서 AS
키워드를 사용하여 패싯의 이름을 지정하려면 FACET ... AS
를 사용합니다. 이 조항은 결과에서 패싯에 대해 더 명확하거나 단순화된 이름을 추가하는 데 유용합니다. 또한 중첩 집계 쿼리에서 패싯의 이름을 바꾸는 데 사용할 수도 있습니다.
FACET ... AS
쿼리는 결과의 패싯 이름을 변경하지만(예: 테이블의 헤더로 나타날 때) 실제 패싯 이름 자체는 변경하지 않습니다.
FROM Transaction SELECT count(*) FACET response.headers.contentType AS 'content type'
SELECT ... FACET CASES ( WHERE attribute operator value, WHERE attribute operator value, ... ) ...
FACET CASES
를 사용하여 FACET
에서 가능한 것보다 더 복잡한 조건으로 데이터를 분류합니다. 여러 조건을 쉼표 ,
로 구분합니다. 예를 들어, PageView 데이터 및 FACET CASES
를 1초 미만, 1-10초, 10초 초과와 같은 범주로 쿼리할 수 있습니다. 사례 내에서 여러 속성을 결합하고 AS
선택기로 사례에 레이블을 지정할 수 있습니다. 데이터 포인트는 일치하는 첫 번째 패싯 케이스인 최대 하나의 패싯 케이스에 추가됩니다.
속성과 함께 시간 함수를 사용할 수도 있고 OR
연산자를 사용하여 지정된 케이스와 일치하지 않는 결과를 패싯할 수 있습니다.
SELECT count(*) FROM PageView FACET CASES (WHERE duration < 1, WHERE duration > 1 and duration < 10, WHERE duration > 10)
이 예에서는 트랜잭션 이름에 login
이 포함된 버킷과 URL에 login
이 포함되고 사용자 지정 속성이 사용자가 유료 사용자임을 나타내는 버킷으로 결과를 그룹화합니다.
SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid')
이 예에서는 AS
선택기를 사용하여 결과에 사람이 읽을 수 있는 이름을 지정합니다.
SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%' AS 'Total Logins', WHERE name LIKE '%feature%' AND customer_type='Paid' AS 'Feature Visits from Paid Users')
이 예에서는 OR
연산자를 사용하여 사례와 일치하지 않는 결과를 패싯합니다.
SELECT count(*) FROM Transaction FACET CASES (WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid') OR name
NRQL에서 기본값은 쿼리에서 패싯 선택을 안내하는 SELECT
조항의 첫 번째 집계입니다. FACET ... ORDER BY
를 사용하면 ORDER BY 수정자와 함께 집계 함수를 추가하여 패싯 선택 방법을 지정하여 이 기본 동작을 재정의할 수 있습니다. 특히 이 조항은 LIMIT
조항에 의해 제한되기 전에 최종 결과에서 패싯이 선택되는 우선순위를 재정의합니다. 이 조항은 쿼리에 사용할 수 있지만 알림 또는 스트리밍에는 사용할 수 없습니다.
이 예에서는 FACET ... ORDER BY
를 사용하여 앱 트랜잭션의 평균 기간을 찾는 방법을 보여주며 응답 크기가 가장 높은 앱별로 상위 10개(기본 제한)의 가장 높은 기간을 보여줍니다. 이 경우 FACET ... ORDER BY
가 사용되지 않으면 쿼리 결과는 대신 가장 높은 기간별로 상위 10개를 표시하며 응답 크기는 앱 선택과 관련이 없습니다.
FROM Transaction SELECT average(duration) TIMESERIES FACET appName ORDER BY max(responseSize)
팁
작업은 LIMIT
조항이 적용되기 전에 수행되기 때문에 FACET ... ORDER BY
는 최종 쿼리 결과의 정렬에 영향을 미치지 않으며, 이는 시계열이 아닌 쿼리의 결과에서 특히 두드러집니다.
중요
이 경우 ORDER BY
수정자는 ORDER BY
조항과 다르게 작동합니다. FACET attribute1 ORDER BY attribute2
형식을 따르는 쿼리를 구문 분석할 때 뉴렐릭은 이러한 쿼리를 FACET ... ORDER BY
쿼리로 읽지만 ORDER BY
가 FACET
바로 뒤에 나타나는 경우에만 가능합니다. 그렇지 않으면 ORDER BY
는 뉴렐릭에 의해 조항로 해석됩니다.
SELECT ... LIMIT count ...
LIMIT
조항을 사용하여 FACET
쿼리에서 반환된 패싯 값의 최대 수 또는 SELECT *
쿼리에서 반환된 최대 항목 수를 제어합니다. 이 조항은 단일 정수 값을 인수로 사용합니다. LIMIT
조항이 지정되지 않았거나 값이 제공되지 않은 경우 제한은 기본적으로 FACET
쿼리의 경우 10, SELECT *
쿼리의 경우 100으로 설정됩니다.
LIMIT
조항에 허용되는 최대 값은 2,000입니다.
이 쿼리는 세션 수별로 상위 20개 국가를 표시하고 Windows 사용자에게만 각 국가에 대한 응답 시간의 95번째 백분위수를 제공합니다.
SELECT uniqueCount(session), percentile(duration, 95) FROM PageView WHERE userAgentOS = 'Windows' FACET countryCode LIMIT 20 SINCE YESTERDAY
SELECT ... LIMIT count OFFSET count ...
LIMIT
과 함께 OFFSET
조항을 사용하여 SELECT *
또는 SELECT column
쿼리에서 반환된 행 부분을 제어합니다. LIMIT
조항과 마찬가지로 OFFSET
는 단일 정수 값을 인수로 사용합니다. OFFSET
은 쿼리에서 선택한 행이 반환되기 전에 건너뛸 행 수를 설정합니다. 이것은 LIMIT
에 의해 제한됩니다.
OFFSET
행은 가장 최근부터 건너뜁니다.
예를 들어, SELECT interestingValue FROM Minute_Report LIMIT 5 OFFSET 1
쿼리는 가장 최근 값을 제외하고 Minute_Report
에서 마지막 5개 값을 반환합니다.
ORDER BY
조항을 사용하면 행별로 이벤트 속성을 선택하는 쿼리에서 쿼리 결과를 정렬하는 방법을 지정할 수 있습니다.
이 쿼리는 기간별로 트랜잭션을 정렬합니다.
FROM Transaction SELECT appName, duration ORDER BY duration
기본 정렬 순서는 오름차순이지만 ASC
또는 DESC
수정자를 추가하여 변경할 수 있습니다.
SHOW EVENT TYPES...
SHOW EVENT TYPES
특정 시간 범위 동안 계정에 있는 모든 데이터 유형의 목록을 반환합니다. SELECT
대신 쿼리의 첫 번째 조항로 사용됩니다.
중요
이 컨텍스트에서 "이벤트 유형"은 NRQL 쿼리로 액세스할 수 있는 데이터 유형을 나타냅니다.
이 쿼리는 지난 날의 모든 데이터 유형을 반환합니다.
SHOW EVENT TYPES SINCE 1 day ago
SELECT ... SINCE [numerical units AGO | phrase] ...
기본값은 1시간 전 입니다.
SINCE
조항을 사용하여 반환된 데이터에 대한 시간 범위의 시작을 정의합니다. 쿼리에는 시간대를 지정할 수 있지만 결과에는 지정할 수 없습니다. NRQL 결과는 시스템 시간을 기반으로 합니다.
NRQL을 사용할 때 UTC 타임스탬프 또는 상대 시간 범위를 설정할 수 있습니다.
타임스탬프는
YYYY-MM-DD HH:MM:SS ZZZZ
포맷을 사용합니다. 예를 들어:FROM Transaction SELECT count(*) SINCE '2021-12-25 00:00:00 +0000' UNTIL '2021-12-25 23:59:59 +0000'YESTERDAY
,TODAY
,SUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
,SATURDAY
상대 시간 범위를 지원합니다. 예:SINCE YESTERDAY UNTIL NOW
YEAR
,QUARTER
,MONTH
,WEEK
,DAY
,HOUR
,MINUTE
,SECOND
도 지원합니다. 이러한 경우SINCE
을THIS
또는LAST
와 결합할 수 있습니다. 예:SINCE LAST MONTH UNTIL THIS WEEK
.SINCE 3 WEEKS AGO UNTIL 10 MINUTES AGO
에서와 같이AGO
를 포함할 수도 있습니다.
SLIDE BY
조항은 슬라이딩 창이라는 기능을 지원합니다. 슬라이딩 창을 사용하면 SLIDE BY
데이터가 서로 겹치는 시간의 "창"으로 수집됩니다. 이러한 기간은 롤링 집계(예: 롤링 평균)가 좁은 시간 창의 집계보다 더 중요한 경우에 다양한 변형이 있는 라인 그래프를 매끄럽게 만드는 데 도움이 될 수 있습니다.
SLIDE BY
를 사용하려면 쿼리에서 TIMESERIES
조항 뒤에 배치합니다. 예를 들어, 이 쿼리는 1분 SLIDE BY
간격으로 5분 창의 데이터를 가져옵니다. 즉, 각 창은 5분 동안 지속되지만, 창 1은 0분에 시작하고, 창 2는 1분에 시작하고, 창 3은 2분에서 시작하는 것입니다.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY 1 minute
SLIDE BY
를 사용하는 방법과 시기에 대한 자세한 내용은 슬라이딩 창으로 더 보기 쉬운 차트 만들기를 참조하십시오. 또는 이 짧은 비디오(약 3분 20초)를 시청하십시오.
MAX
또는 AUTO
와 함께 슬라이딩 창을 사용할 수 있습니다. 그러나 MAX
또는 AUTO
는 TIMESERIES
와 SLIDE BY
사이에 둘 수 없습니다.
이 쿼리는 자동으로 SLIDE BY
창 간격을 결정합니다.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY AUTO
이 쿼리는 SLIDE BY 창을 최대 간격 단위로 설정합니다.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY MAX
중요
AUTO
또는 MAX
에 의해 결정된 SLIDE BY
값은 창 크기보다 큰 단계 간격을 생성할 수 있으며, 이로 인해 간격과 예기치 않은 결과가 발생할 수 있습니다.
SELECT ... TIMESERIES integer units ...
TIMESERIES
조항을 사용하여 데이터를 지정된 기간으로 분류된 시계열로 반환합니다. TIMESERIES
는 특정 차트를 트리거하는 데 사용되므로 기본값이 없습니다.
시간 범위를 나타내려면 integer units
를 사용합니다. 예:
TIMESERIES 1 minute
TIMESERIES 30 minutes
TIMESERIES 1 hour
TIMESERIES 30 seconds
TIMESERIES
아래 예와 같이 쿼리 결과를 추가로 맞춤화하기 위해 MAX
, AUTO
및 SLIDE BY
같은 인수와 결합할 수 있습니다.
중요
average()
또는 percentile()
같은 함수의 경우 집계 기간이 크면 이상값에 상당한 평활화 효과가 있을 수 있습니다. 이것은 쿼리가 슬라이딩 윈도우를 사용하는지 여부에 관계없이 해당됩니다.
제공된 값은 그래프를 구분하는 데 사용되는 단위를 나타냅니다. 예를 들어, 30분 증분을 보여주는 1일 그래프를 표시하려면:
SELECT ... SINCE 1 day AGO TIMESERIES 30 minutes
TIMESERIES
그래프를 합리적인 수의 분할로 나누는 AUTO
로 설정할 수도 있습니다. 예를 들어 일일 차트는 30분 간격으로 분할되고 주간 차트는 6시간 간격으로 분할됩니다.
이 쿼리는 6시간마다 데이터 포인트를 사용하여 1주일 동안 클라이언트 측 트랜잭션 시간의 50번째 및 90번째 백분위수를 보여주는 선 차트로 데이터를 반환합니다.
SELECT average(duration), percentile(duration, 50, 90) FROM PageView SINCE 1 week AGO TIMESERIES AUTO
TIMESERIES
을 MAX
로 설정할 수 있습니다. 그러면 지정된 기간에 허용되는 최대 간격 수로 기간이 자동으로 조정됩니다. 이렇게 하면 TIMESERIES
버킷을 수동으로 업데이트하지 않고도 기간을 업데이트할 수 있으며 기간이 허용되는 최대 간격 수로 분할되도록 할 수 있습니다. 반환될 최대 TIMESERIES
버킷 수는 366입니다.
예를 들어 다음 쿼리는 일별 차트의 상한선인 4분 간격을 생성합니다.
SELECT average(duration) FROM Transaction since 1 day ago TIMESERIES MAX
SELECT ... UNTIL integer units AGO ...
기본값은 NOW입니다. 기본값 이외의 엔드포인트을 지정하려면 UNTIL
만 사용합니다.
UNTIL
조항을 사용하여 데이터를 반환할 시간 범위의 끝을 정의합니다. 시간 범위가 지정되면 데이터가 보존되며 시간 범위가 종료된 후 검토할 수 있습니다.
자세한 정보 및 예는시간 설정 조정을 참조하십시오.
WHERE
조항을 사용하여 결과를 필터링합니다. NRQL은 조항에서 지정한 조건을 충족하는 결과를 반환합니다.
SELECT function(attribute) ... WHERE attribute [operator 'value' | IN ('value' [, 'value']) | IS [NOT] NULL ] [AND|OR ...] ...
- 둘 이상의 조건을 지정하는 경우
AND
또는OR
연산자로 조건을 구분합니다. - SQL
JOIN
을 시뮬레이션하려면WHERE
또는FACET
절에서 커스텀 속성을 사용합니다.
| 설명 |
---|---|
| NRQL은 표준 비교 연산자를 허용합니다. 예시: 부울 값이 있는 속성의 경우 |
| 두 조건의 교차를 정의하는 데 사용됩니다. |
| 두 조건의 합집합을 정의하는 데 사용됩니다. |
| 속성에 null 값이 있는지 확인합니다. |
| 속성에 null 값이 없는지 확인합니다. |
| 속성의 부울 값이 |
| 속성의 부울 값이 |
| 속성의 문자열 값이 지정된 집합에 있는지 확인합니다. 이 방법을 사용하면 여러 예: |
| 속성의 문자열 값이 지정된 집합에 없는지 확인합니다. 이 방법을 사용하면 여러 값은 쉼표로 구분된 괄호 안에 있어야 합니다. 예를 들어:
|
| 속성에 지정된 하위 문자열이 포함되어 있는지 확인합니다.
다음 사항에 유의하십시오.
|
| 속성에 지정된 하위 문자열이 포함되어 있지 않은지 확인합니다. |
| 속성에 지정된 Regex 하위 문자열이 포함되어 있는지 확인합니다. RE2 구문을 사용합니다. 예:
|
| 속성에 지정된 Regex 하위 문자열이 포함되어 있지 않은지 확인합니다. RE2 구문을 사용합니다. |
이 쿼리는 지난 24시간 동안 미국과 캐나다의 Safari 사용자에 대한 URL에 checkout
이 있는 페이지의 브라우저 응답 시간을 반환합니다.
SELECT histogram(duration, 50, 20) FROM PageViewWHERE countryCode IN ('CA', 'US') AND userAgentName='Safari' AND pageUrl LIKE '%checkout%'SINCE 1 day ago
메트릭 데이터 쿼리에 대한 자세한 내용은 쿼리 메트릭을 참조하십시오.
FROM ... WITH function(attribute) AS var SELECT var ...
쿼리의 어느 곳에서나 참조할 수 있는 변수로 값을 저장하려면 WITH ... AS
절을 사용하여 NRQL 변수를 정의합니다. 주요 규칙 및 팁:
WITH ... AS
절은FROM
/SELECT
절 앞, 중간 또는 바로 뒤에 올 수 있습니다.- 행 단위 함수(예:
capture()
)만 변수로 설정할 수 있습니다.average()
같은 집계 함수는 지원되지 않습니다. - 하나의
WITH
만 사용할 수 있지만, 쉼표로 구분되는 한 여러 NRQL 변수를 사용할 수 있습니다. - 정의된 NRQL 변수가 기존 속성과 이름이 동일한 경우, 해당 변수가 우선합니다.
- 변수 이름에는
%
기호가 포함될 수 없습니다.
다음은 몇 가지 예시 쿼리입니다.
FROM Transaction WITH duration*1000 AS millisec SELECT millisec
FROM Log WITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice) SELECT itemId, unitPrice
앵커 구문 분석 (aparse()
)에 대해 보다 자세히 알아보십시오.
이 예에서 NRQL 변수 unitPrice
는 또 다른 변수 unitPriceNum
을 사용하여 추출된 문자열을 숫자로 변환합니다. 그런 다음 변수는 SELECT
, WHERE
및 FACET
절에서 사용됩니다.
FROM Log WITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice), numeric(unitPrice) AS unitPriceNum SELECT sum(unitPriceNum) FACET itemId WHERE unitPriceNum < 100
SELECT ... WITH TIMEZONE (selected zone) ...
WITH TIMEZONE
조항을 사용하여 아직 지정된 시간대가 없는 쿼리의 날짜 또는 시간에 대한 시간대를 선택합니다.
날짜 시간에 시간대를 지정하지 않고 WITH TIMEZONE
절을 포함하면 since
및 until
절은 제공된 시간대를 유지합니다.
WITH TIMEZONE
절을 포함하지 않고 날짜 시간 문자열에 시간대를 포함하면 날짜 시간 문자열 시간대가 유지됩니다.
중요
지정되지 않은 경우 기본 시간대는 항상 UTC입니다. 결과의 원시 타임스탬프 값(JSON 뷰에 표시)은 항상 UTC입니다. UI는 계정 설정에서 지정한 시간대로 결과를 표시합니다. 타임스탬프 문자열의 시간대는 항상 작동합니다. 이는 WITH TIMEZONE
시간대를 대체합니다.
예를 들어 쿼리 절 SINCE Monday UNTIL Tuesday WITH TIMEZONE 'America/New_York'
은 미국/뉴욕 시간으로 월요일 자정부터 미국/뉴욕 시간으로 화요일 자정까지 기록된 데이터를 반환합니다.
다음은 쿼리 타임스팬 절의 몇 가지 예입니다.
WITH TIMEZONE
절을 사용하는 날짜 시간 문자열에 시간대가 없습니다.SINCE today UNTIL '2022-05-19T12:00' WITH TIMEZONE 'America/Los_Angeles'이는
"beginTime": "2022-05-19T07:00:00Z"
및"endTime": "2022-05-19T19:00:00Z"
로 해결됩니다.WITH TIMEZONE
절을 사용하지 않는 날짜 시간 문자열의 시간대:SINCE today UNTIL '2022-05-19T12:00-0500'이는
"beginTime": "2022-05-19T00:00:00Z"
및"endTime": "2022-05-19T17:00:00Z"
로 해결됩니다.일광 절약 시간제 동안 -0700인 미국/로스앤젤레스
WITH TIMEZONE
절을 사용하는 날짜 시간 문자열의 시간대:SINCE today UNTIL '2022-05-19T12:00-0500' WITH TIMEZONE 'America/Los_Angeles'이는
"beginTime": "2022-05-19T07:00:00Z"
및"endTime": "2022-05-19T19:00:00Z"
로 해결됩니다.
사용 가능한 시간대 선택 | |||
---|---|---|---|
아프리카/아비장 | 아프리카/아디스아바바 | 아프리카/알제 | 아프리카/블랜타이어 |
아프리카/카이로 | 아프리카/빈트후크 | 아메리카/아닥 | 아메리카/앵커리지 |
아메리카/아라과이나 | 아메리카/아르헨티나/부에노스아이레스 | 아메리카/벨리즈 | 아메리카/보고타 |
아메리카/캄포_그란데 | 아메리카/칸쿤 | 아메리카/카라카스 | 아메리카/시카고 |
아메리카/치와와 | 아메리카/도슨_크릭 | 아메리카/덴버 | 아메리카/엔세나다 |
아메리카/글레이스_베이 | 아메리카/갓탑 | 아메리카/구스베이 | 아메리카/하바나 |
아메리카/라파스 | 아메리카/로스앤젤레스 | 아메리카/미클롱 | 아메리카/몬테비데오 |
아메리카/뉴욕 | 아메리카/노로냐 | 아메리카/산티아고 | 아메리카/상파울루 |
아메리카/세인트_존스 | 아시아/아나디르 | 아시아/방콕 | 아시아/베이루트 |
아시아/다마스쿠스 | 아시아/다카 | 아시아/두바이 | 아시아/가자 |
아시아/홍콩 | 아시아/이르쿠츠크 | 아시아/예루살렘 | 아시아/카불 |
아시아/카트만두 | 아시아/콜카타 | 아시아/크라스노야르스크 | 아시아/마가단 |
아시아/노보시비르스크 | 아시아/랑군olation | 아시아/서울 | 아시아/타슈켄트 |
아시아/테헤란 | 아시아/도쿄 | 아시아/블라디보스토크 | 아시아/야쿠츠크 |
아시아/예카테린부르크 | 아시아/예레반 | 대서양/아조레스 제도 | 대서양/케이프 베르데 |
대서양/스탠리 | 호주/애들레이드 | 호주/브리즈번 | 호주/다윈 |
호주/유클라 | 호주/호바트 | 호주/로드_하위 | 호주/퍼스 |
칠레/이스터섬 | 기타/GMT+10 | 기타/GMT+8 | 기타/GMT-11 |
기타/GMT-12 | 유럽/암스테르담 | 유럽/벨파스트 | 유럽/베오그라드 |
유럽/브뤼셀 | 유럽/더블린 | 유럽/리스본 | 유럽/런던 |
유럽/민스크 | 유럽/모스크바 | 태평양/오클랜드 | 태평양/채텀 |
태평양/갬비어 | 태평양/키리티마티 | 태평양/마르키즈 | 태평양/미드웨이 |
태평양/노퍽 | 태평양/통가푸 | UTC |
자세한 정보와 예는 대시보드 및 차트에서 시간 범위 설정을 참조하십시오.
메트릭 데이터 쿼리
메트릭 데이터는 다른 유형의 데이터보다 복잡합니다. 이를 효과적으로 쿼리하기 위한 몇 가지 팁이 있습니다. 두 가지 유형의 메트릭 데이터가 있으며 각각 고유한 쿼리 지침이 존재합니다.
- Metric API 및 해당 API를 사용하는 일부 솔루션(예:Dropwizard 통합 또는 Micrometer 통합 )에서 보고하는 차원 메트릭을 쿼리합니다.
- 쿼리 메트릭 타임슬라이스 데이터는 APM, 모바일 모니터링 및 브라우저 모니터링에서 보고한 기존 메트릭 데이터 유형입니다.
메트릭 데이터를 보고하는 방법에 대한 자세한 내용은 메트릭 데이터 유형을 참조하십시오.
기능
이 섹션에서는 NRQL 함수, 즉 집계 기능과 비 집계 기능에 대해 설명합니다.
집합기 기능
집계 함수를 사용하여 데이터를 필터링하고 집계할 수 있습니다. 사용을 위한 몇 가지 팁은 다음과 같습니다.
필터 쿼리, Apdex 쿼리 및 백분위수 쿼리에 대한 New Relic University 자습서를 참조하십시오. 또는 NRQL 쿼리 작성에 대한 전체 온라인 과정을 방문하십시오.
동일한 쿼리(예:
SELECT median(one_metric), median(another_metric)
)에서 집계 함수를 여러 번 사용하는 경우 결과 표시에 문제가 발생할 수 있습니다. 이 문제를 해결하려면AS
함수를 사용합니다. 예:SELECT median(one_metric) as 'med-a', median(another_metric) as 'med-b'데이터 유형 "강제"는 지원되지 않습니다. 사용 가능한 유형 변환 함수에 대해 알아보십시오.
시간 경과에 따른 결과를 표시하는 방법은 시간 경과에 따른 결과 그룹화를 참조하십시오.
예:
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago
aggregationendtime()
함수를 사용하여 관련 집계 시간을 반환합니다. 더 구체적으로 말하면, 주어진 집계에 대해 aggregationendtime()
함수는 해당 집계 기간의 끝 타임스탬프를 제공합니다. 예를 들어, 시계열 쿼리에서 1시간 분량의 데이터를 포함하는 데이터 포인트의 경우 함수는 해당 시간 기간의 끝 타임스탬프를 반환합니다.
apdex
함수를 사용하여 단일 트랜잭션 또는 모든 트랜잭션에 대한 Apdex 점수를 반환합니다. 속성은 duration
또는 backendDuration
같이 응답 시간을 기반으로 하는 모든 속성이 될 수 있습니다. t:
인수는 선택한 속성과 동일한 시간 단위로 Apdex T 임계값을 정의합니다. 예를 들어 속성이 초 단위로 측정되는 경우 t
는 초 단위 임계값이 됩니다.
apdex()
함수가 반환한 Apdex 점수는 실행 시간만 기준으로 합니다. 이는 오류를 고려해 넣지 않습니다. 트랜잭션에 오류가 있지만 Apdex T 이하에서 완료되면, 해당 트랜잭션은 apdex ()
함수에 의해 만족스러운 것으로 평가됩니다.
사용자 정의 속성을 정의한 경우 해당 속성을 기반으로 필터링할 수 있습니다. 예를 들어, 특히 중요한 고객의 Apdex를 모니터링할 수 있습니다.
SELECT apdex(duration, t: 0.4) FROM Transaction WHERE customerName='ReallyImportantCustomer' SINCE 1 day ago
name
속성을 사용하여 특정 트랜잭션에 대한 점수를 반환하거나 name
을 생략하여 전체 Apdex를 반환합니다. 이 쿼리는 지난 1시간 동안의 Controller/notes/index 트랜잭션에 대한 Apdex 점수를 반환합니다.
apdex
함수는 사이트에 대한 사용자 만족도를 측정하는 Apdex 점수를 반환합니다. 인수는 응답 시간 속성 및 Apdex T 임계값(초)입니다.
SELECT apdex(duration, t: 0.5) from TransactionWHERE name='Controller/notes/index' SINCE 1 hour ago
이 예제 쿼리는 지난 3주 동안 애플리케이션에 대한 전체 Apdex를 반환합니다.
SELECT apdex(duration, t: 0.08) FROM Transaction SINCE 3 week ago
average()
함수를 사용하여 속성의 평균 값을 반환합니다. 단일 속성 이름을 인수로 사용합니다. 속성 값이 숫자가 아니면 집계할 때 무시됩니다. 쿼리 조건과 일치하는 데이터를 찾을 수 없거나 쿼리에서 반환된 숫자 값이 없으면 null 값을 반환합니다.
buckets()
함수를 사용하여 FACET
조항로 분할된 데이터를 범위를 기반으로 버킷으로 집계합니다. 뉴렐릭 데이터베이스에 숫자 값으로 저장된 모든 속성으로 버킷을 만들 수 있습니다.
세 가지 인수가 필요합니다.
Attribute name(속성 이름)
샘플 범위의 최대값입니다. 모든 이상치는 최종 버킷에 나타납니다.
Total number of buckets(총 버킷 수)
자세한 내용과 예는 데이터를 버킷으로 분할을 참조하십시오.
bucketPercentile()
함수는 Prometheus의 histogram_quantile
함수에 해당하는 NRQL입니다. 차원 메트릭 데이터와 함께 사용하기 위한 것입니다. quantile 대신 뉴렐릭은 quantile * 100인 백분위수를 반환합니다.
bucketPercentile()
함수를 사용하여 Prometheus 형식의 히스토그램 데이터에서 분위수를 계산합니다.
버킷 이름을 인수로 사용하고 버킷 경계를 따라 백분위수를 보고합니다.
SELECT bucketPercentile(duration_bucket) FROM Metric SINCE 1 day ago
선택적으로 백분위수 사양을 인수로 추가할 수 있습니다.
SELECT bucketPercentile(duration_bucket, 50, 75, 90) FROM Metric SINCE 1 day ago
Prometheus 히스토그램 데이터를 구성하는 데 여러 측정항목이 사용되기 때문에 연결된 <basename>
측면에서 특정 Prometheus 메트릭을 쿼리해야 합니다.
예를 들어, NRQL을 사용하는 <basename>
prometheus_http_request_duration_seconds
와 함께 Prometheus 히스토그램에서 백분위수를 계산하려면 bucketPercentile(prometheus_http_request_duration_seconds_bucket, 50)
을 사용합니다. _bucket이 <basename>
끝에 접미사로 추가되는 방식에 유의하십시오.
자세한 내용은 Prometheus.io 문서를 참조하세요.
cardinality()
함수를 사용하여 메트릭의 모든 측정기준(속성) 조합 수를 가져옵니다.
세 개의 인수가 필요하며 모두 선택 사항입니다.
측정항목 이름: 있는 경우
cardinality()
은 지정된 메트릭만 계산합니다.Include(포함): 존재하는 경우, 포함 목록은 카디널리티 계산을 해당 속성으로 제한합니다.
Exclude(제외): 존재하는 경우 제외 목록으로 인해 카디널리티 계산에서 해당 속성이 무시됩니다.
SELECT cardinality(metric_name, include:{attribute_list}, exclude:{attribute_list})
count()
함수를 사용하여 사용 가능한 레코드 수를 반환합니다. 단일 인수가 필요합니다. *
, 속성 또는 상수 값입니다. 현재는 일반적인 SQL 동작을 따르고 해당 인수에 대한 값이 있는 모든 레코드를 계산합니다.
count(*)
는 특정 속성의 이름을 지정하지 않으므로 결과는 기본 "humanize" 형식으로 지정됩니다.
derivative()
주어진 데이터 세트의 변화율을 찾습니다. 변화율은 도함수를 근사화하기 위해 선형 최소제곱 회귀를 사용하여 계산됩니다. 이 계산에는 둘 이상의 데이터 포인트를 비교해야 하므로 평가 범위에 하나의 데이터 포인트만 포함되는 경우 계산이 불확실하고 작동하지 않아 null
값이 생성됩니다.
time interval
은 변화율이 계산되는 기간입니다. 예를 들어, derivative(attributeName, 1 minute)
는 분당 변경 비율을 반환합니다.
dimensions()
함수를 사용하여 데이터 유형의 모든 차원 값을 반환합니다.
선택적 인수를 사용하여 특정 속성을 명시적으로 포함하거나 제외할 수 있습니다.
포함: 있는 경우 포함 목록은
dimensions()
를 해당 속성으로 제한합니다.제외: 있는 경우,
dimensions()
계산은 해당 속성을 무시합니다.FROM Metric SELECT count(node_filesystem_size) TIMESERIES FACET dimensions()FACET
조항과 함께 사용하면dimensions()
는 Prometheus가 집계되지 않은 쿼리에서 작동하는 방식과 유사하게 이벤트 유형에서 사용 가능한 모든 패싯에 대해 고유한 시계열을 생성합니다.
latestrate()
함수를 사용하여 마지막 2개의 데이터 포인트를 기반으로 한 값의 변화율을 반환합니다. 문제의 속성을 첫 번째 인수로 사용하고 결과 비율에 대한 시간 단위를 두 번째 인수로 사용합니다. 이 함수는 change in attribute/time interval
단위로 결과를 반환합니다.
이 기능은 최첨단 추세를 보기 위해 속성에 대한 가장 최근의 변경 비율을 제공하는 데 유용할 수 있습니다.
이 쿼리는 마지막 2개의 데이터 포인트를 기반으로 하는 기간의 변화율을 반환합니다. 1 SECOND
인수때문에 duration/second
단위로 반환됩니다.
SELECT latestrate(duration, 1 SECOND) FROM PageView
max()
함수를 사용하여 지정된 시간 범위 동안 숫자 속성의 최대 기록 값을 반환합니다. 단일 속성 이름을 인수로 사용합니다. 속성 값이 숫자가 아니면 집계할 때 무시됩니다. 쿼리 조건과 일치하는 데이터를 찾을 수 없거나 쿼리에서 반환된 숫자 값이 없으면 null 값을 반환합니다.
min()
함수를 사용하여 지정된 시간 범위 동안 숫자 속성의 최소 기록 값을 반환합니다. 단일 속성 이름을 인수로 사용합니다. 속성 값이 숫자가 아니면 집계할 때 무시됩니다. 쿼리 조건과 일치하는 데이터를 찾을 수 없거나 쿼리에서 반환된 숫자 값이 없으면 null 값을 반환합니다.
minuteOf()
함수를 사용하여 유효한 타임스탬프 값을 보유하는 속성의 '분' 부분(0-59분)만 추출합니다.
mod()
함수를 사용하여 제공된 숫자 속성 값(첫 번째 인수 또는 피제수)을 숫자 값(두 번째 인수 또는 제수)으로 나눈 후 하한 계수를 반환합니다. 이 모듈로 연산은 WHERE 조항 조건 내에서 결과의 임의 하위 집합으로 필터링하거나 FACET 조항 내에서 결과 집합을 세분화하는 방법으로 사용할 수 있습니다.
FROM Transaction SELECT * WHERE mod(port, 2) = 1
FROM NrDailyUsage SELECT uniques(hostId, 10000) SINCE 1 day AGO FACET mod(hostId, 10)
percentage()
함수를 사용하여 일부 조건과 일치하는 대상 데이터 세트의 백분율을 반환합니다.
첫 번째 인수에는 원하는 속성에 대한 집계 함수가 필요합니다. 정확히 두 개의 인수를 사용하십시오. (처음 두 개 이후의 인수는 무시됨) 속성이 숫자가 아니면 이 함수는 100% 값을 반환합니다.
FROM Transaction SELECT percentage(count(*), WHERE error is true ) AS 'Error Percent' Where host LIKE '%west%' EXTRAPOLATE
percentile()
함수를 사용하여 지정된 백분위수에서 속성의 대략적인 값을 반환합니다. 속성이 필요하며 백분위수를 나타내는 인수를 원하는 만큼 사용할 수 있습니다. percentile()
함수를 사용하면 백분위수를 소수점 이하 3자리까지 표시할 수 있어 정밀도가 향상됩니다. 백분위수 임계값은 십진수 값으로 지정할 수 있지만 대부분의 데이터 세트에서 서로 0.1보다 가까운 백분위수는 확인되지 않습니다.
백분위수 표시 예
TIMESERIES
를 사용하여 시간 경과에 따라 매핑된 백분위수가 있는 라인 차트를 생성합니다.
백분위수에 대한 집계 값을 표시하는 빌보드 및 속성 시트를 생성하려면
TIMESERIES
를 생략합니다.백분위수가 나열되지 않으면 기본값은 95번째 백분위수입니다. 50번째 백분위수 값인 중앙값만 반환하려면 median()을 사용할 수도 있습니다.
이 쿼리는 5번째, 50번째, 95번째 백분위수에 대한 선이 있는 라인 차트를 생성합니다.
SELECT percentile(duration, 5, 50, 95) FROM PageView TIMESERIES AUTO
predictLinear()
derivative()
함수의 확장입니다. 데이터 세트의 미래 값을 예측하기 위해 유사한 최소 제곱 선형 회귀 방법을 사용합니다.
time interval
은 쿼리가 앞으로 얼마나 멀리 볼 것인지입니다. 예를 들어,predictLinear(attributeName, 1 hour)
는 쿼리 시간 창에서 1시간 후의 선형 예측입니다.- 일반적으로
predictLinear()
는 디스크 공간과 같이 지속적으로 증가하는 값이나 큰 추세에 대한 예측에 유용합니다. predictLinear()
선형 회귀이므로 쿼리되는 데이터세트에 익숙하면 정확한 장기 예측을 보장하는 데 도움이 됩니다.- 기하급수적으로, 대수적으로 또는 기타 비선형 수단에 의해 증가하는 데이터 세트는 단기 예측에서만 성공할 가능성이 높습니다.
- 뉴렐릭은
TIMESERIES
쿼리에서predictLinear
사용을 권장하지 않습니다. 이는 각 버킷이 쿼리 내 상대적인 시간 프레임을 기반으로 개별 예측을 수행하기 때문입니다. 즉, 이러한 쿼리는 시계열의 끝부터 예측을 표시하지 않습니다.
rate()
함수를 사용하여 시간 간격당 주어진 쿼리의 빈도 또는 비율을 시각화합니다. 예를 들어, 한 시간 동안 분당 페이지뷰 수 또는 하루 동안 시간당 사이트의 고유 세션 수를 알고 싶을 수 있습니다.
TIMESERIES
를 사용하여 시간에 따라 매핑된 요율이 있는 라인 차트를 생성합니다.시간 경과에 따른 평균 단일 요율 값을 표시하는 빌보드를 생성하려면
TIMESERIES
를 생략합니다.지난 6시간 동안 10분당 트랜잭션의 처리 속도를 보여주는 선형 차트를 생성하는 기본 쿼리는 다음과 같습니다.
SELECT rate(count(*), 10 minute) FROM Transaction SINCE 6 hours agoTIMESERIES다음은
rate
를 사용하여 여러 기간의 데이터를 비교하는 방법을 설명하는 짧은 동영상(3분 21분)입니다.
round()
함수를 사용하여 속성의 반올림된 값을 반환합니다.
선택적으로 round()
는 두 번째 인수 to_nearest
를 사용하여 첫 번째 인수를 두 번째 인수의 가장 가까운 배수로 반올림할 수 있습니다. to_nearest
는 소수일 수 있습니다.
SELECT round(n [, to_nearest])
stddev()
함수를 사용하여 지정된 시간 범위에 걸쳐 숫자 속성에 대해 하나의 표준 편차를 반환합니다. 단일 인수가 필요합니다. 속성이 숫자가 아니면 0 값을 반환합니다.
stdvar()
함수를 사용하여 지정된 시간 범위에 대한 숫자 속성의 표준 분산을 반환합니다.
단일 인수가 필요합니다. 속성이 숫자가 아니면 0 값을 반환합니다.
sum()
함수를 사용하여 지정된 시간 범위 동안 숫자 속성의 기록된 값 합계를 반환합니다.
단일 인수가 필요합니다. 첫 번째 인수 이후의 인수는 무시됩니다. 속성이 숫자가 아니면 0 값을 반환합니다.
uniqueCount()
함수를 사용하여 지정된 시간 범위 동안 속성에 대해 기록된 고유 값의 수를 반환합니다.
팁
쿼리 성능을 최적화하기 위해 이 함수는 256개 이상의 고유 값을 검사하는 쿼리에 대해 대략적인 결과를 반환합니다.
uniques()
함수를 사용하여 지정된 시간 범위 동안 속성에 대해 기록된 고유 값 목록을 반환합니다. facet
조항과 함께 사용하면 각 패싯 값마다 고유한 속성 값 목록이 반환됩니다.
limit
매개변수는 선택사항입니다. 제공되지 않으면 패싯당 고유 속성 값 1,000개의 기본 제한이 적용됩니다. 최대 10,000까지 다른 limit
값을 지정할 수 있습니다. uniques()
함수는 한계에 도달할 때까지 발견된 고유 속성 값의 첫 번째 세트를 반환합니다. 따라서 데이터 세트에 5,000개의 고유 속성 값이 있고 한도가 1,000으로 설정된 경우 연산자는 빈도에 관계없이 발견한 처음 1,000개의 고유 값을 반환합니다.
쿼리 결과에서 반환될 수 있는 값의 최대 수는 uniques()
한도 facet
한도의 곱입니다. 다음 쿼리에서 반환될 수 있는 이론적 최대 값 수는 5백만(5,000 x 1,000)입니다.
쿼리되는 데이터 세트와 쿼리의 복잡성에 따라 메모리 보호 제한으로 인해 매우 큰 쿼리가 실행되지 않을 수 있습니다.
From Transaction SELECT uniques(host,5000) FACET appName LIMIT 1000
몇 가지 속성의 고유한 조합을 알고 싶다면 SELECT uniques(tuple(x, y, ... z)) ...
형식으로 쿼리를 구성하여 고유한 값에 대한 튜플을 모두 가져와서 관계를 유지할 수 있습니다. 다음 쿼리에서 tuple
은 index
및 cellName
에서 함께 사용되어 두 값이 조합되어 발생하는 고유 항목을 찾습니다.
FROM NodeStatus SELECT uniques(tuple(index, cellName), 5)
비 집계 함수
NRQL 쿼리에서 숫자가 아닌 데이터에 대해 비 집계 함수를 사용합니다.
accountId()
함수를 사용하여 쿼리된 데이터와 연결된 계정 ID를 반환합니다. 이 함수는 인수를 사용하지 않습니다. 다음은 몇 가지 예시 쿼리입니다.
이 쿼리는 반환된 각 Transaction
이벤트와 연결된 계정 ID를 반환합니다.
SELECT accountId() FROM Transaction SINCE 1 day ago
이 쿼리는 각 계정 ID와 연결된 마지막 날의 Transaction
이벤트 수를 반환합니다.
SELECT count(*) FROM Transaction FACET accountId() SINCE 1 day ago
이 쿼리는 계정 ID가 구체적으로 1
, 2
또는 3
중 하나인 마지막 날의 Transaction
이벤트 수를 반환합니다.
SELECT count(*) FROM Transaction WHERE accountId() IN (1,2,3) SINCE 1 day ago
앵커 구문 분석 기능인 aparse()
를 사용하여 문자열에서 특정 값을 추출합니다. 이는 capture()
의 대안입니다.
aparse()
두 가지 인수를 취합니다.
문자열 속성
앵커 문자열과 추출 문자가 있는 패턴 문자열. 예:URL에서 도메인을 추출하는 'www.*.com'
aparse()
를 사용할 때, 패턴 문자열에는 'www.'와 '.com’ 같은 앵커가 포함되고 '*'로 표시를 해야 추출하려는 문자열의 위치를 식별할 수 있습니다.aparse()
패턴 문자열에 다음 문자를 사용합니다.'%' -
LIKE
절에서 볼 수 있는 비캡처 와일드카드'*' - 정규식 캡처를 사용하는 것과 유사한 와일드카드 캡처
실제로, 앵커 문자열은 문자열 속성의 시작이나 끝이 아닌 중간에 자주 발생합니다.
이 경우 '%' 와일드카드를 사용하여 원치 않는 값을 무시합니다. (예: '%www.*.com%')
capture()
처럼,aparse()
의 모든 결과는 문자열입니다. 수학 함수에서 이러한 결과를 사용하려면numeric()
함수로 변환해야 합니다.참고:
aparse()
는 대소문자를 구분하지 않습니다.FROM PageViewSELECT aparse(browserTransactionName, 'website.com/*')문자열 중간에서 값을 추출하려면, 패턴 문자열의 시작과 끝에 비캡처 와일드카드 '%'를 사용합니다. 예:
FROM LogSELECT count(*)FACET aparse(string, '%"itemId":"*"%')여러 값을 변수로 추출할 때는 순서가 중요합니다. 예:
FROM LogWITH aparse(string, 'POST: * body: {"itemId":"*","unitPrice":*}\n') AS (url, itemId, unitPrice)SELECT url, itemId, unitPrice변수에 대한 보다 자세한 내용은 NRQL 변수를 참조하십시오.
concat()
함수를 사용하여 인수를 연결한 결과 문자열을 반환합니다.
숫자, 부울, 튜플 또는 배열 유형의 인수가 최대 20개까지 제공될 수 있습니다. Null 인수와 지원되지 않는 형식의 인수는 무시됩니다. 인수가 제공되지 않으면, 결과는 빈 문자열이 됩니다.
부동 소수점 숫자 값을 연결할 때 포함되는 소수 자릿수를 제한하기 위해 선택 가능한 정밀도 인수가 제공될 수 있습니다.
결과 문자열의 최대 길이는 4096자입니다.
이 쿼리는 소수 두 자리와 레이블로 형식이 지정된 PageView 이벤트의 백엔드 및 네트워크 기간을 단일 문자열로 반환합니다.
FROM PageView SELECT concat('Backend Duration: ', backendDuration, ', Network Duration: ', networkDuration, precision: 2)
그러면 다음과 같은 형식으로 응답이 반환됩니다.
Backend Duration: 0.69, Network Duration: 0
이 쿼리는 사용자의 도시, 지역 및 국가로 구성된 문자열로 패싯 처리된 PageView 이벤트의 평균 연결 설정 기간을 반환합니다.
FROM PageView SELECT average(connectionSetupDuration) FACET concat(city, ', ', regionCode, ' ', countryCode) WHERE countryCode IN ('US', 'CA')
RE2 구문이 있는 정규식을 사용하여 속성에서 값을 추출하려면 capture()
를 사용합니다.
두 가지 인수가 필요합니다.
속성 이름.
캡처 구문이 있는 정규식. NRQL의 정규 표현식은 Python과 유사한 구문
r'...'
을 사용합니다.캡처할 때, 특정 이름을 고려하여 RE2 명명된 캡처 구문
...(?P<name> pattern )...
을 사용하여 포함된 패턴을 캡처합니다.정규식에 추가적인 캡처 그룹을 지정하여 여러 값을 캡처할 수 있습니다. 예:
...(?P<name1> pattern1)...(?P<name2> pattern2)...
참고: 여러 값을 캡처할 때 각 캡처 문은 최대 16개의 캡처 그룹을 가질 수 있으며, 각 NRQL 쿼리는 최대 5개의 캡처 문을 가질 수 있습니다.
쿼리 결과를 개선하기 위해 정규식 캡처를 사용하는 방법을 확인하십시오.
팁
정규식은 전체 입력과 일치해야 합니다. 캡처 표현식이 예상 결과를 추출하지 않는 경우, 시작 또는 끝에 일부 매치 정규표현식을 위한 패턴인
.*
가 필요한지 확인합니다. 그러나 부분 정규표현식으로 인해 쿼리 실행이 느려질 수 있습니다.다음은
capture()
를 사용하여 대시보드 가독성을 높이는 방법을 보여주는 짧은 동영상(3분 5분)입니다.자세한 내용은 아래 예를 참조하십시오.
다음은 웹사이트의 도메인 이름을 선택하고
https://
및 다음 경로를 제거합니다..com
SELECT capture(pageUrl, r'https://(?P<baseUrl>.*.com)/.+') FROM PageView SINCE 1 day ago다음은 오류 메시지의 첫 번째 단어만 캡처합니다.
SELECT capture(errorMessage, r'(?P<firstWord>\S+)\s.+') FROM Transaction SINCE 1 hour ago where errorMessage is not null다음은 캡처된 HTTP 메서드에 의해 패싯됩니다.
SELECT count(*) FROM Log WHERE message like '%HTTP%' FACET capture(message, r'.* "(?P<httpMethod>[A-Z]+) .*')다음은 캡처된 작업 이름이
ExampleJob
인 정규식과 일치하는message
속성이 있는 로그 이벤트를 기반으로 결과를 필터링합니다.SELECT message FROM Log WHERE capture(message, r'.*Job Failed: (?P<jobName>[A-Za-z]+),.*') = 'ExampleJob' SINCE 10 minutes ago다음은 로그 라인에서 CPU 시간의 합계를 캡처합니다. 수학 연산을 수행하려면 명시적으로 숫자로 캐스트해야 합니다.
SELECT sum(numeric(capture(message, r'.*CpuTime:\s(?P<cpuTime>\d+)'))) FROM Log WHERE message like '%CpuTime:%' SINCE 1 hour ago이 예에서 NRQL 변수는 로그 메시지에서 캡처된 여러 값을 저장하는 데 사용됩니다.
FROM LogWITH capture(message, r'POST to carts: (?P<URL>.*) body: {"itemId":"(?P<UUID>.*)","unitPrice":(?P<unitPrice>.*)}.*')AS (URL, UUID, unitPrice)SELECT URL, UUID, unitPriceWHERE URL IS NOT NULLNRQL 변수에 대한 보다 자세한 내용은 여기를 참조하십시오.
earliest()
함수를 사용하여 지정된 시간 범위 동안 속성에 대한 가장 이른 값을 반환합니다.
단일 인수가 필요합니다. 첫 번째 인수 이후의 인수는 무시됩니다.
FACET
과 함께 사용하는 경우 각 결과 패싯에 대한 속성의 가장 최근 값을 반환합니다.
이 쿼리는 PageView
이벤트에서 각 사용자 에이전트당 가장 빠른 국가 코드를 반환합니다.
SELECT earliest(countryCode) FROM PageView FACET userAgentName
...WHERE eventType() = 'EventNameHere'......FACET eventType()...
FACET 조항에서 eventType()
함수를 사용하여 선택한 데이터 유형별로 결과를 분류하거나 WHERE 조항에서 특정 데이터 유형으로 결과를 필터링합니다. 이는 filter() 및 percent() 함수를 사용하여 특정 데이터 유형을 대상으로 지정할 때 특히 유용합니다.
중요
이 컨텍스트에서 "event type"은 NRQL 쿼리로 액세스할 수 있는 데이터 유형을 나타냅니다.
이 쿼리는 총 Transaction
개 결과 중 총 TransactionError
개 결과의 백분율을 반환합니다. eventType()
함수를 사용하여 filter()
함수가 있는 특정 유형의 데이터를 대상으로 지정할 수 있습니다.
SELECT 100 * filter(count(*), where eventType() = 'TransactionError') / filter(count(*), where eventType() = 'Transaction') FROM Transaction, TransactionError WHERE appName = 'App.Prod' TIMESERIES 2 Minutes SINCE 6 hours ago
이 쿼리는 각 데이터 유형( Transaction
및 TransactionError
)가 반환하는 레코드 수를 표시합니다.
SELECT count(*) FROM Transaction, TransactionError FACET eventType() TIMESERIES
filter()
함수를 사용하여 SELECT 문의 집계 함수 중 하나에 대한 결과를 제한합니다. filter()
을 FACET
또는 TIMESERIES
와 함께 사용할 수 있습니다. 필터는 다음과 같은 여러 집계를 선택할 때만 유용합니다.
SELECT filter(sum(x), WHERE attribute='a') AS 'A', filter(sum(x), WHERE attribute='b') AS 'B' ...
그렇지 않으면, 표준 WHERE
절을 사용하는 것이 좋습니다.
filter()
를 사용하여 제안 코드를 사용하는 사람과 사용하지 않는 사람에 대해 일련의 트랜잭션에서 구입한 항목을 비교할 수 있습니다.
filter()
함수를 사용하여 SELECT
문의 집계 함수 중 하나에 대한 결과를 제한합니다.
getField()
함수를 사용하여 디멘션 메트릭 데이터같은 복합 데이터 유형에서 필드를 추출합니다.
다음 인수를 취합니다.
메트릭 유형 | 지원되는 필드 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
예:
SELECT max(getField(mySummary, count)) from Metric
SELECT sum(mySummary) from Metric where getField(mySummary, count) > 10
histogram()
함수를 사용하여 히스토그램을 생성합니다. 세 가지 인수가 필요합니다.
Attribute name(속성 이름)
샘플 범위의 최대값
총 버킷 수(1-500, inclusive)
이 쿼리는 20개 버킷에 대해 최대 10초 범위의 응답 시간 히스토그램을 생성합니다.
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week agohistogram()
Prometheus 히스토그램 버킷 허용:SELECT histogram(duration_bucket, 10, 20) FROM Metric SINCE 1 week agohistogram()
분포 측정항목을 입력으로 수락합니다.SELECT histogram(myDistributionMetric, 10, 20) FROM Metric SINCE 1 week agoFACET
절과 함께histogram()
를 사용하여 히트맵 차트를 생성합니다.SELECT histogram(duration) FROM PageView FACET appName SINCE 1 week ago
if()
를 사용하여 쿼리 전체에서 if-then-else 제어 흐름 작업을 수행합니다.
if()
세 가지 인수를 취합니다.
condition - true 또는 false로 평가할 수 있는 표현식입니다.
trueValue - 부울 표현식이 true인 경우 이 값이 반환됩니다.
falseValue - 부울 표현식이 false인 경우 이 선택적 값이 반환되거나 NULL이 제공되지 않은 경우 반환됩니다.
FROM LogSELECT count(*)FACET if(level_name = 'ERROR', 'ERROR', 'NOT_ERROR')FROM LogSELECT count(*)FACET if(level_name = 'INFO’ OR level_name = ‘WARNING’, 'NOT_ERROR', 'ERROR’)중첩된 if() 함수를 사용하여 조건부 논리를 추가합니다.
FROM Transaction SELECT count(*)FACET if(appName LIKE '%java%', 'Java',if(appName LIKE '%kafka%', 'Kafka', 'Other'))
keyset()
를 사용하면 주어진 시간 범위 동안 주어진 데이터 유형에 대한 모든 속성을 볼 수 있습니다. 인수가 필요하지 않습니다. 문자열 유형 키, 숫자 유형 키, Boolean 유형 키 및 모든 키의 그룹을 포함하는 JSON 구조를 반환합니다.
이 쿼리는 마지막 날의 PageView
이벤트에 대해 찾은 속성을 반환합니다.
SELECT keyset() FROM PageView SINCE 1 day ago
latest()
함수를 사용하여 지정된 시간 범위 동안 속성의 가장 최근 값을 반환합니다.
단일 인수가 필요합니다. 첫 번째 인수 이후의 인수는 무시됩니다.
FACET
과 함께 사용하는 경우 각 결과 패싯에 대한 속성의 가장 최근 값을 반환합니다.
이 쿼리는 PageView
이벤트에서 각 사용자 에이전트당 가장 최근의 국가 코드를 반환합니다.
SELECT latest(countryCode) FROM PageView FACET userAgentName
length()
함수를 사용하여 문자열 값의 길이 또는 배열 값의 요소 수를 반환합니다.
단일 인수가 필요합니다. 첫 번째 인수 이후의 인수는 무시됩니다.
이 쿼리는 PageView
이벤트에서 각 URL 문자열의 길이를 반환합니다.
SELECT length(pageUrl) FROM PageView
lower()
함수를 사용하여 문자열 값의 모든 알파벳 문자를 소문자로 변경합니다.
인수:
str - 소문자가 되어야 하는 문자열 값입니다.
- 여기에는 따옴표로 묶인 리터럴 문자열, 쿼리된 문자열 속성, 문자열을 반환하는 함수 또는 단일 문자열 값을 반환하는 하위 쿼리 등 문자열로 평가되는 모든 것이 해당될 수 있습니다.
- 이 인수가 null로 평가되면
lower()
함수는 null을 반환합니다.
이 쿼리는 쿼리의 다양한 부분에서
lower()
함수를 사용하는 방법을 보여줍니다.FROM PageActionSELECT latest(lower(actionName))WHERE lower(actionName) = lower('acmePageRenderedEvent') OR lower(actionName) = lower('SubmitLogin')FACET concat(actionName, ':', lower(actionName))lower(str)
예관련 함수:
upper()
position()
함수를 사용하여 문자열 내에서 하위 문자열의 위치를 찾습니다.
인수:
str - 하위 문자열을 찾을 문자열입니다.
- 여기에는 따옴표로 묶인 리터럴 문자열, 쿼리된 문자열 속성, 문자열을 반환하는 함수 또는 단일 문자열 값을 반환하는 하위 쿼리 등 문자열로 평가되는 모든 것이 해당될 수 있습니다.
substr - str 내에서 검색할 문자열입니다.
occurrence - 위치를 반환할 substr의 어커런스를 나타냅니다.
기본값: 0
양수인 경우 0을 기준으로 str의 시작 부분에서 n번째 substr을 찾습니다.
음수인 경우 str의 끝 부분에서 n번째 substr을 찾습니다. substr의 마지막 어커런스는 -1 어커런스입니다.
별칭:
indexOf(str, substr , occurrence)
-indexOf()
는position()
함수의 다른 이름입니다.반환:
str 내의 substr 시작 문자의 0부터 시작하는 인덱스입니다.
참조된 substr 항목을 찾을 수 없으면 -1이 반환됩니다.
str 또는 substr이 null이면 null을 반환합니다.
검색은 대소문자를 구분합니다.
이 쿼리는
position()
함수를 사용하여 문자열 내에서 다양한 하위 문자열의 위치 인덱스를 찾는 방법을 보여줍니다. 여기에서는substring()
함수 인수 내에서position()
함수를 사용하는 방법도 볼 수 있습니다.FROM PageViewWITH position(pageUrl, ':') as FirstColon,position(pageUrl, '/', 1) + 1 as DomainBegin, position(pageUrl, '/', 2) as DomainEnd, DomainEnd - DomainBegin as DomainLengthSELECT pageUrl, FirstColon, substring(pageUrl, 0, FirstColon) as Protocol,DomainBegin, DomainEnd, DomainLength, substring(pageUrl, DomainBegin, DomainLength) as Domain,position(pageUrl, '/', -1) as LastSlash, substring(pageUrl, position(pageUrl, '/', -1)) as PathEndposition(str, substr , occurrence)
예
string()
함수를 사용하여 숫자, 부울, 튜플 또는 배열 값을 문자열 값으로 변환합니다.
두 개의 인수가 필요하며 하나는 선택 사항입니다.
Attribute name(속성 이름)
Precision: 있는 경우 부동 소수점 숫자 값을 변환할 때 포함되는 소수 자릿수에 대한 제한을 적용합니다.
이 쿼리는 PageView 기간을 소수점 이하 두 자리가 포함된 문자열로 반환합니다.
FROM PageView SELECT string(duration, precision: 2)이 쿼리는 PageView 기간의 평균을 소수점 이하 두 자리가 포함된 문자열로 반환합니다.
FROM PageView SELECT string(average(duration), precision: 2)string()
을 사용하여 소수점 이하 자릿수를 버리지 않고 부동 소수점 값으로 패싯합니다.FROM PageView SELECT count(*) FACET string(tuple(asnLatitude, asnLongitude), precision: 2)
substring()
함수를 사용하여 문자열의 일부를 추출합니다.
인수:
str - 하위 문자열을 추출하는 문자열입니다.
- 여기에는 따옴표로 묶인 리터럴 문자열, 쿼리된 문자열 속성, 문자열을 반환하는 함수 또는 단일 문자열 값을 반환하는 하위 쿼리 등 문자열로 평가되는 모든 것이 해당될 수 있습니다.
- 이 인수가 null로 평가되면
substring()
함수는 null을 반환합니다.
start - 추출을 개시하는 str 내의 위치입니다.
- str의 첫 번째 문자는 위치 0입니다.
- 음수 값은 문자열의 마지막 문자가 위치 -1인 str의 끝을 기준으로 위치를 찾습니다.
- start가 str의 길이보다 크거나 같으면
substring()
함수는 빈 문자열을 반환합니다. - start가 음수이고 절대값이 str의 길이보다 크면 추출된 하위 문자열은 위치 0에서 시작됩니다.
length - str에서 추출할 부분 문자열의 길이 또는 문자 수입니다.
- Optional - 길이가 제공되지 않으면 확인된 시작 위치 이후의 str에서 모든 문자가 포함됩니다.
이 쿼리는 세션 값의 일부를 반환합니다.
FROM PageViewSELECT session, substring(session, 0, 3) as First3,substring(session, 3) as After3rd,substring(session, -3) as Last3substring(str, start , length)
예substring()
과position()
을 함께 사용하는 예는position()
함수를 참조하십시오.
upper()
함수를 사용하여 문자열 값의 모든 알파벳 문자를 대문자로 변경합니다.
인수:
str - 대문자가 되어야 하는 문자열 값입니다.
여기에는 따옴표로 묶인 리터럴 문자열, 쿼리된 문자열 속성, 문자열을 반환하는 함수 또는 단일 문자열 값을 반환하는 하위 쿼리 등 문자열로 평가되는 모든 것이 해당될 수 있습니다.
이 인수가 null로 평가되면
upper()
함수는 null을 반환합니다.이 쿼리는 쿼리의 다양한 부분에서
upper()
함수를 사용하는 방법을 보여줍니다.FROM PageActionSELECT latest(upper(actionName))WHERE upper(actionName) = upper('acmePageRenderedEvent') OR upper(actionName) = upper('SubmitLogin')FACET concat(actionName, ':', upper(actionName))upper(str)
예관련 함수:
lower()
유형 변환
NRQL은 "강제"를 지원하지 않습니다. 즉, 문자열로 저장된 부동 소수점은 문자열로 취급되며 부동 소수점 값을 기대하는 함수에서 작동할 수 없습니다.
다음 함수를 사용하여 숫자 값이 있는 문자열 또는 문자열 값이 있는 부울을 해당 숫자 및 부울 값으로 변환하거나 문자열이 아닌 값을 문자열 값으로 변환할 수 있습니다.
numeric()
함수를 사용하여 문자열 형식의 숫자를 숫자 값으로 변환합니다. 이 함수는 쿼리 결과에 수학 함수를 사용하는 쿼리 또는average()
같은 NRQL 집계 함수에 내장될 수 있습니다.boolean()
함수를 사용하여"true"
또는"false"
의 문자열 값을 해당 부울 값으로 변환합니다.string()
함수를 사용하여 숫자, 부울, 튜플 또는 배열 값을 문자열 값으로 변환합니다. 보다 자세한 내용은string()
상단의 설명을 참조하십시오.
코멘트
NRQL 쿼리를 작성할 때 팀 구성원이 쿼리를 더 잘 이해하고 사용하는 데 도움이 될 수 있도록 주석을 추가할 수 있습니다.
구문 세부 정보는 다음과 같습니다.
--
두 개의 대시는 같은 줄에서 이 표시기 오른쪽에 있는 모든 텍스트를 주석 처리합니다.//
두 개의 슬래시는 같은 줄에서 이 표시기 오른쪽에 있는 모든 텍스트를 주석 처리합니다./* */
이 문자 집합 사이에 있는 모든 텍스트는 주석 처리됩니다. 이 표시기는 여러 줄에 적용될 수 있습니다.
주석이 모든 곳에 표시되는 것은 아니라는 데 주의하십시오. '최근 쿼리' 및 '쿼리 보기' 같은 일부 뷰에는 주석이 표시되지 않습니다.
주석을 포함하는 몇 가지 쿼리의 예:
FROM Transaction SELECT uniqueCount(appId) -- This will return the number of unique App IDs
FROM TransactionErrorSELECT count(*) SINCE 1 day ago // Transaction Error for the past day
FROM TransactionTrace /* This data may be incomplete; If so, run a query of Transaction */SELECT count(*)
관련 문서
NRQL 구문 및 규칙에 대한 정보를 제공하는 다른 자료들을 확인해 보십시오.
- New Relic University NRQL 교육 과정
Metric
데이터 유형을 쿼리하는 방법 알아보기- 하위 쿼리 사용 방법
- 퍼널을 사용하여 일련의 관련 데이터 평가