• /
  • EnglishEspañol日本語한국어Português
  • 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

고급 NRQL 기능 사용

지금까지 NRQL 사용의 기본 사항, NRQL을 사용하여 데이터를 제어하는 방법, NRQL을 사용하여 대시보드를 발전시키는 방법을 배웠습니다. 이 마지막 튜토리얼 시리즈에서는 데이터에서 필요한 모든 것을 쿼리할 수 있는 가장 진보된 NRQL 기술을 배우게 됩니다. 이 튜토리얼에서는 추가 집계 기술, 상위 수준 수학 함수, Regex 필터링 및 중첩 집계와 같은 고급 기능에 대해 설명합니다. 구체적으로 다음을 사용하는 방법을 배우게 됩니다.

  • stddev() 집계 함수 및 buckets() 함수를 사용하여 집계된 데이터를 그룹화하는 방법
  • NRQL 내에서 데이터를 매끄럽게 하고 고정하고 조작할 수 있는 고급 수학 기능을 사용할 수 있습니다.
  • 특정 기간 내에 데이터에서 사용할 수 있는 이벤트 유형 및 속성을 검색하는 방법입니다.
  • RLIKE 을 사용하여 Regex로 데이터를 필터링하는 방법.
  • 중첩 집계 및 하위 쿼리를 사용하는 방법

우리는 이러한 기능이 매우 중요하다는 것을 알게 될 것이라고 생각합니다. 시작하자!

집계와 함께 버킷팅 사용

표준 편차는 일련의 값 내에서 변동 또는 분산의 양을 측정합니다. 낮은 값(평균에 가까운 값)부터 높은 값(평균에서 먼 값)까지의 척도를 사용합니다. stddev()함수를 사용하면 평균 선 사이를 살펴보고 보고된 값을 더 심층적으로 이해할 수 있습니다. 이 예에서는 마지막 날과 전날의 트랜잭션 응답 시간("기간")의 표준 편차를 비교합니다.

SELECT stddev(duration)
FROM Transaction
SINCE 24 hours ago
COMPARE WITH 24 hours ago
TIMESERIES
A screenshot showing the use of standard deviation in a query

stdvar() 함수는 stddev() 과 유사한 방식으로 작동하지만 숫자 속성에 대한 표준 분산을 반환합니다.

이전 강의에서는 FACET cases() 사용하여 데이터를 특정 버킷 구성으로 그룹화하는 방법을 배웠습니다. FACET buckets() 사용하여 특정 속성별로 데이터를 자동으로 버킷할 수도 있습니다. 이 함수는 집계 함수에 대한 데이터 그룹화를 단순화하고 세 가지 인수를 사용합니다.

buckets(attribute, ceiling, number-of-buckets).

  • 버킷하려는 속성입니다.

  • 샘플 범위의 최대값(모든 이상값은 최종 버킷에 나타납니다).

  • 필요한 총 버킷 수입니다.

    예제 쿼리에서는 NRQL을 사용하여 전체 트랜잭션의 평균 기간을 찾습니다. 그러나 해당 성능을 특정 볼륨의 데이터베이스 호출을 수행하는 트랜잭션으로 그룹화합니다. 따라서 버킷 속성을 databaseCallCount 으로 지정하고 한도를 400개 호출로 설정하고 이를 10개의 버킷으로 그룹화합니다. 이로 인해 0-40, 40-80, 80-120, 120-160, 160-200, 200-240, 240-280, 280-320, 320-360 및 >360 데이터베이스 호출을 수행하는 트랜잭션의 성능이 향상됩니다. 10개의 투명 버킷이 천장까지 균등하게 나누어져 있습니다.

    SELECT average(duration)
    FROM Transaction
    SINCE 12 hours ago
    FACET buckets(databaseCallCount, 400, 10)
    A screenshot showing the use of facet bucketing in queries

이를 통해 현재 NRQL에 존재하는 모든 집계 함수를 배웠습니다! 전문가처럼 데이터를 분석할 수 있습니다. NRQL에 집계 기능이 없다고 생각되면 계정 팀에 알려주십시오. 우리는 항상 필요할 수 있는 다음 킬러 기능을 찾고 있습니다.

고급 수학 기능 사용

NRQL은 또한 데이터에 대해 깊이 있게 분석해야 하는 사람들을 위해 고급 수학 함수를 지원합니다. 이러한 함수는 값을 X 거듭제곱으로 추정하고, 제곱근을 찾고, 클램핑을 적용하여 상한 및 하한을 적용하거나 Y축에서 값을 양수로 유지할 수도 있습니다.

NRQL에는 어떤 방식으로든 값을 조작하는 많은 수학 함수가 있습니다. 이 예에서는 몇 가지가 동시에 시연되는 것을 볼 수 있습니다.

abs(n) 함수는 n의 절대값을 반환합니다. 음수가 아닌 n 값에 대해서는 "n"을 반환하고, 음수 n 값에 대해서는 양수 "n"을 반환합니다. 예를 들어, abs(2) = 2, abs(-4) = 4입니다.

floor(), ceil()round() 를 사용하여 십진수를 정수로 반올림할 수도 있습니다. floor() 은 반올림하여 가장 가까운 정수를 반환하고, ceil() 반올림하여 그 반대를 수행합니다. round() 는 양방향이며 가장 가까운 정수로 반올림하거나 내림합니다.

SELECT abs(duration), round(duration), ceil(duration), floor(duration)
FROM Transaction
SINCE 1 day ago
A screenshot showing the results of a query using absolute value

속성에 대한 클램핑을 사용하여 해당 값에 상한 또는 하한을 적용할 수 있습니다. 이는 극단적인 이상치가 시계열 그래프의 규모를 왜곡하지 않도록 하는 것과 같은 용도로 사용됩니다. clamp_max(duration, 10) 기간을 반환합니다. 단, 10을 초과하지 않는 한 10을 반환합니다. 간단히 말해서, 10보다 큰 값은 모두 10으로 반환됩니다. clamp_min(duration,1) 은 그 반대입니다. 기간이 1보다 작으면 1과 동일하게 보고됩니다.

SELECT clamp_max(average(duration), 10), clamp_min(average(duration), 1)
FROM Transaction
SINCE 1 day ago
TIMESERIES
A screenshot showing a query that uses clamp max

이제 많은 사람들이 사용하기 어렵다고 생각하는 고급 수학으로 넘어갈 수 있습니다. 이전과 마찬가지로 단일 예제 쿼리로 이러한 모든 기능을 표시할 수 있습니다.

pow() 함수는 첫 번째 인수를 두 번째 인수만큼 거듭제곱합니다. 이 예에서는 기간을 2의 거듭제곱으로 늘립니다. 값의 제곱근이 필요한 경우 sqrt() 함수를 사용하면 빠르게 이를 얻을 수 있습니다. 그리고 exp() 함수는 해당 인수의 자연 지수 함수를 계산합니다.

마지막으로 NRQL은 여러 유사한 함수에 맞는 로그도 제공합니다.

  • ln(n) 자연 로그 계산: 로그 밑 e.

  • log2(n) 로그 밑 2를 계산합니다.

  • log10(n) 밑이 10인 로그를 계산합니다.

  • log(n, b) 임의의 밑을 사용하여 로그를 계산할 수 있습니다. b.

    SELECT pow(duration, 2), sqrt(duration), exp(duration), ln(duration), log2(duration)
    FROM Transaction
    SINCE 1 day ago
    A screenshot showing a query using the advaned math features pow, SQRT, and EXP

이번 강의에서는 이벤트 데이터를 평활화하는 방법을 배웠습니다. round()/ceil()/floor() 사용하면 원하는 방식으로 반올림할 수 있습니다. 클램핑을 사용하면 데이터에 경계를 설정할 수 있으며 로그, 제곱근, 거듭제곱 및 지수에 대한 고급 수학 도구는 모두 필요에 따라 데이터를 조작할 수 있는 추가 제어 기능을 제공합니다. 다음으로 이벤트와 속성을 검색하는 방법에 대해 알아봅니다.

이벤트 및 속성 검색

이벤트 및 속성을 검색하면 사용 가능한 데이터를 쿼리하기 전에 이에 대한 질문에 답하고 자동화하는 데 도움이 될 수 있습니다! 잠시 시간을 내어 이 강력한 유틸리티를 살펴보겠습니다.

현재 New Relic 계정에 보고되는 모든 이벤트 유형의 목록을 원한다고 가정해 보겠습니다. SHOW EVENT TYPES 구문은 특정 기간에 보고된 모든 이벤트 유형의 목록을 반환합니다. NRQL 쿼리에 SELECTFROM 필요하지 않은 드문 예외 중 하나입니다. 맞춤 이벤트 데이터가 있는지 확인하는 등의 작업에 이 기능을 사용할 수 있습니다.

SHOW EVENT TYPES
SINCE 1 week ago
A screenshot showing a the result of a query using event types

특정 이벤트 유형에 대해 어떤 속성을 사용할 수 있는지 알아야 할 수도 있습니다. keyset() 함수는 속성 유형별로 그룹화된 이벤트 유형의 모든 속성 목록을 제공합니다. 제공된 기간 내의 값이 포함된 속성만 가져오며, 이를 사용하여 데이터를 탐색할 수 있습니다. 고객 데이터 보고를 올바르게 보장하는 등의 자동화 작업에도 사용할 수 있습니다.

SELECT keyset()
FROM Transaction
SINCE 1 week ago
A screenshot showing the result of a keyset query

이러한 기능은 이벤트 유형 및 속성의 변경 사항을 검색하는 데 도움이 됩니다. 더 많은 DevOps 엔지니어가 이러한 기능을 사용하여 작업을 마무리하거나 신속하게 자동화합니다. 다음으로 Regex를 사용하여 데이터를 필터링하는 방법을 알아봅니다.

정규식으로 필터링

때로는 LIKE 제공할 수 있는 것보다 더 복잡한 패턴 일치를 사용하여 데이터를 필터링하고 싶을 수도 있습니다. RLIKE 절을 사용하면 더 복잡한 일치를 위해 정규식으로 필터링할 수 있습니다.

LIKE 사용할 수 있는 모든 시나리오에서는 대신 RLIKE 사용하여 해당 정규 표현식을 따옴표로 묶어 제공할 수 있습니다. 이 예에는 짝수 또는 자음으로 끝나는 모든 호스트 이름 목록이 있습니다.

SELECT uniques(host)
FROM Transaction
WHERE host
RLIKE '^.*[02468bcdfghjklmnpqrstvwxyz]'
A screenshot showing the result of a query using R like

간단한 매칭도 가능합니다. 특정 문자나 단어로 시작하는 값을 일치시키려는 경우.

SELECT count(*)
FROM Transaction
WHERE name
RLIKE 'W.*|O.*'
FACET name

정규 표현식 엔진은 RE2 구문을 사용합니다. 문자를 삭제해야 하는 경우 이중 백슬래시 이스케이프 시퀀스를 사용해야 할 수도 있습니다. (예를 들어 \\).

RLIKE 은 본질적으로 LIKE 보다 더 복잡하고 성능이 떨어집니다. LIKE 및 기타 필터링 기능이 필요에 맞지 않는 경우에만 사용하십시오.

정규식 지원을 통해 거의 무한한 패턴 일치 가능성이 가능합니다. 이미 정규식 전문가라면 이것이 NRQL에 추가되는 힘을 알고 있을 것입니다. 하지만 그렇지 않더라도 걱정하지 마세요! Regex에는 온라인에서 참조할 수 있는 많은 리소스가 있습니다. NRQL에서 정규식을 사용하는 방법을 배웠으므로 이제 목록의 다음은 중첩 집계를 사용하는 것입니다.

중첩 집계 사용

쿼리를 상위 쿼리의 FROM 로 사용하는 NRQL을 사용하여 중첩 집계 쿼리를 작성할 수 있습니다. 이를 통해 다음과 같은 질문에 답할 수 있습니다.

  • 내 애플리케이션이 분당 몇 개의 트랜잭션을 처리했으며 지난 시간 동안 분당 최대 요청 속도는 얼마였습니까?
  • 모든 서버의 평균 CPU 사용량은 얼마이며, 90%를 넘는 특정 서버는 무엇입니까?
  • 모든 사용자 세션 중 즉시 이탈한 비율(예: 세션에 하나의 PageView만 있습니까?

각 사용 사례를 더 자세히 살펴보겠습니다.

예시 1: 지난 1시간 동안 최대 API 호출

첫째, 지난 한 시간 동안 분당 API 호출 수를 계산할 수 있습니다. 그래프에 60개의 데이터 포인트가 반환됩니다.

SELECT count(*) AS apicalls
FROM Transaction
TIMESERIES 1 MINUTE
A screenshot showing the results of the API call query

이제 해당 기간 동안 보고된 최대값을 찾으려면 쿼리를 괄호로 묶고 다음과 같이 SELECT ... FROM 사용합니다. SELECT z FROM (SELECT x AS z FROM y)

SELECT max(apicalls)
FROM ( SELECT count(*) AS apicalls FROM Public_APICall TIMESERIES 1 minute )

예시 2: CPU 부하가 높은 서버

이 예에서는 뉴렐릭 인프라의 데이터를 사용합니다. 때때로 CPU가 평균적으로 특정 비율을 초과한 호스트만 보고 싶을 때가 있습니다. average(cpuPercent) 에 대해 NRQL에 요청하면 평균 CPU 비율이 가장 높은 호스트 목록을 얻게 됩니다. 그러나 단순히 WHERE cpuPercent > 90 추가하여 90% 이상에서 실행되는 호스트로만 이를 제한할 수는 없습니다. 이렇게 하면 평균을 계산하기 전에 데이터가 제거되기 때문입니다.

하지만 중첩 집계를 사용하면 이 문제를 해결할 수 있습니다! 하위 쿼리에서 average(cpuPercent) 요청하면 호스트 목록과 평균 CPU를 얻을 수 있습니다. 이제 외부 쿼리에서 > x% 인 결과만 필터링할 수 있습니다! (팁: 호스트의 CPU를 사용하려면 이 쿼리의 임계값을 조정해야 할 수도 있습니다. 여기서는 20%로 설정했습니다.)

SELECT hostname, cpu
FROM (SELECT average(cpuPercent) AS cpu FROM SystemSample FACET hostname)
WHERE cpu > 20

예 3 - 세션 이탈

사람들은 프런트엔드 모니터링에서 이탈률을 계산하는 방법에 대해 궁금해하는 경우가 많습니다. 이는 단일 페이지를 본 후 추가 페이지를 방문하기 전에 "이탈"하는 세션을 의미합니다. 중첩된 집계를 사용하면 이를 쉽게 달성할 수 있습니다. 내부 쿼리는 세션별로 그룹화하여 PageViews 를 계산합니다. 외부 쿼리에 전달된 결과 집합에는 모든 세션과 각 세션이 본 페이지 수가 나열됩니다. 그런 다음 외부 쿼리는 개수가 1인 세션의 비율을 계산합니다(단일 페이지만 봤기 때문에 이는 '반송된 세션'을 나타냄).

SELECT percentage(count(*), WHERE sessionLength = 1)
FROM (SELECT count(*) AS sessionLength FROM PageView FACET session)

이 강의에서는 쿼리를 다른 쿼리의 FROM 로 사용하여 더 복잡한 질문에 답하는 방법을 배웠습니다. 마지막으로 배워야 할 것은 하위 쿼리를 사용하는 방법입니다!

하위 쿼리 사용 방법

NRQL의 하위 쿼리는 중첩된 집계와 유사하므로 다른 쿼리 내에 중첩된 쿼리를 사용할 수 있습니다. 하위 쿼리를 사용하면 중첩 쿼리는 SELECT 문과 WHERE 절로 이동하고 중첩 집계는 FROM 절로 이동합니다.

다양한 유형의 하위 쿼리에 대한 몇 가지 예를 살펴보겠습니다.

수치 조건

숫자 조건에서 단일 숫자 값을 반환하는 모든 쿼리를 사용할 수 있습니다. 이 예에서는 API 호출 기간의 97번째 백분위수 값을 반환하는 WHERE 절의 하위 쿼리를 사용한 다음 해당 값보다 큰 호출의 이름과 기간을 반환합니다.

SELECT http.url, duration
FROM Public_APICall
WHERE duration > (SELECT percentile(duration,97) FROM Public_APICall)
A screenshot showing the results of a numeric condition subquery

IN 조건

하위 쿼리에서 반환되는 값이 여러 개인 경우 상위 쿼리에 대해 IN 조건을 사용하여 각 값과 비교합니다. 예시에서 entity.guid 속성은 트랜잭션 오류가 있는 각 고유 엔터티에 대한 데이터를 제공하며, 이는 오류 엔터티의 평균 기간을 결정하기 위해 트랜잭션의 entity.guid 값과 일치합니다.

SELECT average(duration)
FROM Transaction
WHERE entity.guid
IN (SELECT uniques(entity.guid) FROM TransactionError)
FACET appName
TIMESERIES
A screenshot showing the result of a query using the in condition

SELECT 문의 하위 쿼리

SELECT 문을 사용하여 계산에 하위 쿼리 결과를 사용할 수 있으며 외부 쿼리와 다른 시간 범위를 지정할 수 있습니다. 이 예에서는 현재 평균 기간과 지난 7일 간의 델타를 계산합니다.

SELECT average(duration) - (SELECT average(duration) FROM Public_APICall SINCE 7 days ago)
FROM Public_APICall
TIMESERIES
A screenshot showing the results of a subquery that uses select

하위 쿼리는 데이터 탐색을 위한 강력한 도구로, 다양한 데이터 소스와 시간 범위에 걸쳐 더욱 정교한 쿼리를 가능하게 합니다.

이 튜토리얼을 완료한 것을 축하합니다. 추가 집계 기술, 상위 수준 수학 함수, Regex 필터링, 중첩 집계 및 하위 쿼리와 같은 고급 기능에 대해 배웠습니다. 이전 세 가지 튜토리얼을 완료했다면 사용할 수 있는 NRQL의 거의 모든 측면에 대해 작업한 것입니다!

데이터를 탐색하는 데 NRQL이 유용하길 바랍니다. 추가 질문이 있거나 문제가 발생하면 언제든지 New Relic 지원팀에 문의하세요. 또는 원하는 경우 온라인 커뮤니티를 통해 경험을 공유할 수 있습니다.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.