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

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

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

문제 신고

NRQL로 데이터를 제어하세요

첫 번째 NRQL 튜토리얼 에서는 쿼리 작성의 기본 사항을 살펴보았습니다. 기본 쿼리 구조, 기간 정의, 관찰할 특정 속성을 선택하는 방법을 다루었습니다. 또한 그래프와 기타 시각화를 사용하여 데이터 집계를 시작하고 표시하는 방법도 배웠습니다.

이 튜토리얼에서는 유용한 집계를 생성하기 위한 더 많은 기능을 좀 더 자세히 살펴보겠습니다. 여기에서는 반환된 데이터를 이전 기간과 비교하고 데이터를 특정 기간으로 그룹화하는 방법을 알아봅니다. 또한 SINCEUNTIL 기능과 관련된 더 많은 작업을 알아보고 필터에서 와일드카드를 사용하는 방법을 살펴보겠습니다. 구체적으로 다음 방법을 배우게 됩니다.

  • 다음을 사용하여 고유한 값을 쿼리합니다. uniques(attributeName)
  • 다음을 사용하여 속성에 존재하는 고유 값 수를 확인합니다. uniqueCount(attributeName)
  • 특정 기간 내에 earliest(attributeName)latest(attributeName) 검색
  • 한정자 또는 기타 데이터 포인트를 기반으로 백분율을 계산합니다. percentile()
  • 속성과 집계 함수 또는 둘의 조합을 사용하여 기본 수학을 수행합니다.
  • 속성 이름을 사용자 정의하고 읽기 쉬운 이름으로 변환
  • LIKE/NOT LIKE 와 함께 와일드카드를 사용하여 포함/제외 검색하거나 결과를 IN 목록 또는 NOT IN 목록으로 제한
  • 날짜, 에포크 및 시간을 사용하여 고급 기간 내에서 쿼리 WITH TIMEZONE
  • 시간 기반 코호팅을 사용하여 데이터를 흥미로운 시간 창으로 그룹화합니다.

시작하자!

집계 함수

번째 NRQL 튜토리얼을 완료한 후 count(), average(), sum(), max()min() 를 사용하여 의미 있는 방식으로 데이터를 변환했습니다. 하지만 고유값을 찾고 계산하고 싶다면 어떻게 해야 할까요? 지정된 시간 범위 동안 속성에 대해 기록된 고유값의 수를 찾으려면 uniqueCount() function 를 사용할 수 있습니다. 검사하려는 속성을 인수로 제공하기만 하면 됩니다. 다음은 모든 고유 공개 API 호출을 표시하는 쿼리입니다.

SELECT uniqueCount(http.url)
FROM Public_APICall
SINCE 1 day ago

쿼리 성능을 최적화하기 위해 위 함수는 256개 이상의 고유 값을 검사하는 쿼리에 대한 대략적인 결과를 반환합니다. 지정된 기간 동안 속성에 대한 고유 값의 실제 목록을 반환하려면 uniques() 함수를 사용하면 됩니다.

SELECT uniques(http.url)
FROM Public_APICall
SINCE 1 day ago

두 번째 제한 매개변수를 제공하여 기본값인 1,000과 다른 제한 값을 지정하려는 경우. uniques(attribute[,limit]) 을 사용하면 이 작업을 수행할 수 있습니다. 그러면 제한이 최대 10,000까지 원하는 대로 수정됩니다.

지정된 기간 동안 속성의 최신 값을 검색하려면 latest() 함수를 사용하세요. 이 샘플 쿼리에서는 마지막 날의 API 호출에 대한 가장 최근 응답 시간을 찾을 수 있습니다. 이는 간헐적으로 보고되는 거래 또는 서비스의 최신 값을 찾는 데 도움이 될 수 있습니다.

SELECT latest(duration)
FROM Public_APICall
WHERE awsAPI = 'sqs'
SINCE 1 day ago

스펙트럼의 반대편에서는 earliest() 함수를 사용하여 그 반대를 달성할 수 있습니다. 지정된 시간 범위에 기록된 속성 중 가장 빠른 값을 반환합니다. 이 샘플 쿼리에서는 마지막 날의 API 호출에 대한 가장 빠른 응답 시간을 검색할 수 있습니다. 데이터가 지속적으로 보고되는 경우 지난 24시간 동안 가장 빠른 이벤트의 데이터 포인트가 보고됩니다.

SELECT earliest(duration)
FROM Public_APICall
WHERE awsAPI = 'sqs'
SINCE 1 day ago

개수, 합계 또는 평균 대신 백분율이 필요할 수도 있습니다. percentage() 함수를 사용하면 지정된 조건과 일치하는 데이터 세트 값의 비율을 계산할 수 있습니다. 이 함수는 두 개의 인수를 사용합니다. 첫 번째는 count() 과 같이 원하는 속성에 대한 집계 함수입니다. 두 번째는 쿼리하려는 데이터의 하위 집합을 지정하는 WHERE 조건입니다.

이 샘플 쿼리에서는 지난 날 기간(또는 응답 시간)이 100밀리초를 초과한 API 호출의 비율을 확인할 수 있습니다.

SELECT percentage(count(*), WHERE duration > 0.1)
FROM Public_APICall
SINCE 1 day ago

평균이 아닌 백분위수를 사용하여 애플리케이션 성능이나 고객 경험 데이터를 보는 것은 매우 일반적입니다. percentile() 함수를 사용하면 n번째 백분위수의 경험을 이해할 수 있습니다.

예를 들어, 지난 하루 동안 고객 경험 중 98% 중 최악의 경험(최고 기간)이 무엇인지 알고 싶다고 가정해 보겠습니다. 지난 24시간 동안의 percentile(duration, 98) 에 대해 NRDB에 요청할 수 있습니다.

SELECT percentile(duration,98)
FROM Public_APICall
SINCE 1 day ago

보시다시피 집계는 강력한 방식으로 데이터를 조작할 수 있습니다. uniqueCount() 사용하여 특정 속성의 고유 항목 수를 계산할 수 있습니다. 그러나 이를 사용하여 고유한 시스템 수, 보고 컨테이너 수 또는 New Relic으로 전송된 사용자 정의 데이터 포인트 수를 식별할 수도 있습니다. 그리고 쿼리에 사용할 수 있는 고유 값이 무엇인지 알고 싶다면 언제든지 uniques() 사용하여 목록을 요청할 수 있습니다.

latest()/earliest() 함수는 희소 데이터를 처리하거나 보고가 시작되거나 중지된 시점을 조사할 때(New Relic이 여전히 데이터를 저장한다고 가정할 때) 특별한 값을 갖습니다. percentage() 함수는 전체 결과 세트와 비교하여 한정자와 일치하는 이벤트의 비율을 표시할 수 있습니다. 마지막으로 모든 최종 사용자 트랜잭션의 90%가 제공된 기간을 초과하도록 목표를 설정하여 percentile() 핵심 성과 지표로 사용할 수 있습니다.

다음 단계에서는 NRQL을 사용하여 기본적인 수학을 수행하는 방법을 배우게 됩니다.

수학 연산자 사용

NRQL은 기본 수학 연산자를 지원합니다. 숫자 속성 값과 집계 함수 결과 모두에 대해 더하기(+), 빼기(-), 곱하기(*) 및 나누기(/)를 수행할 수 있습니다.

예를 들어 트랜잭션 이벤트를 기록할 때 총 응답 시간( duration)과 데이터베이스 응답 시간( databaseDuration)을 모두 캡처합니다. 하지만 데이터베이스 처리 외에 소요된 평균 시간을 알고 싶다면 어떻게 해야 할까요? 다음과 같은 쿼리를 사용하여 데이터 세트의 각 이벤트에 대한 값을 계산하는 것부터 시작할 수 있습니다.

SELECT GigabytesIngestedBillable - GigabytesIngestedFree, metric
FROM NrMTDConsumption
WHERE productLine IS NOT NULL

엄청난! 방금 몇 가지 기본적인 수학을 수행했습니다. 이는 개별 이벤트를 나열하는 데 유용합니다. 하지만 데이터베이스 시간 없이 평균 트랜잭션 기간을 알고 싶다면 어떻게 해야 할까요? 편리하게 함수 내에서 산술 연산을 수행할 수 있습니다.

SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree)
FROM NrMTDConsumption
WHERE GigabytesIngestedBillable IS NOT NULL

이제 데이터베이스 시간 없이 기간을 전체 시간의 백분율로 계산하기 위해 동일한 쿼리에서 빼기, 나누기, 곱셈을 통해 훨씬 더 복잡해지고 싶다면 어떻게 해야 합니까? 음, 수학을 추가할 수 있습니다:

SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) / unitPrice * 100
FROM NrMTDConsumption
WHERE GigabytesIngestedBillable IS NOT NULL

New Relic은 이벤트의 일부로 타이밍을 보고하므로 이를 사용하여 의미 있는 데이터 포인트를 계산하거나 백분율 결과를 생성할 수도 있습니다. 사용자 지정 작업 또는 이벤트 타이밍을 지정하거나 사용자 지정 데이터를 전송하는 등의 작업을 수행하여 기본 수학의 힘을 더욱 극대화할 수 있습니다. 예를 들어, 주문 규모 및 결제 방법에 대한 데이터를 보고하는 전자상거래 플랫폼에서는 수학을 사용하여 주문 전환율과 순 고객 방문 수 등을 계산할 수 있습니다.

다음 단계에서는 NRQL을 사용하여 속성에 라벨을 지정하는 방법을 알아봅니다.

라벨 속성

더 복잡한 NRQL 기능을 수행하기 시작하면 특히 NRQL을 모르는 다른 사람들에게 쿼리 속성에 대해 표시되는 이름을 더 유용하게 만들 수 있는지 궁금할 것입니다! 이전 튜토리얼에서 배운 내용을 사용하여 예제를 살펴보겠습니다.

SELECT average(duration-externalDuration)
FROM Transaction

함수나 속성 뒤에 AS 절을 사용하면 결과에 더 읽기 쉽고 의미 있는 이름을 부여할 수 있습니다. 이렇게 하면 귀하와 귀하의 팀이 차트가 나타내는 내용을 정확히 이해하기가 더 쉬워집니다.

SELECT average(duration-externalDuration)
AS 'Non-External Response Time'
FROM Transaction

이는 단순히 미학적으로 보일 수도 있지만 세부적인 대시보드를 구축할 때 데이터에 명확하게 레이블을 지정하는 것이 중요합니다. 이를 통해 위젯, 빌보드, 꺾은선형 차트 또는 표를 보는 모든 사람에게 모호함이 전혀 없습니다.

그룹화에 대한 다음 강의에서 이를 다시 참조하여 AS 고급 시나리오에서도 깔끔한 결과 집합을 생성할 수 있는 방법을 살펴보겠습니다. 다음으로 다양한 기간의 데이터를 비교하는 방법을 알아봅니다.

기간 비교

지금까지 SINCEUNTIL 절과 함께 시간 범위를 사용하는 방법을 연습했습니다. 하지만 서로 다른 시간 범위의 값을 비교하려면 어떻게 해야 할까요? COMPARE WITH 절을 사용하여 이를 달성할 수 있습니다.

NRQL은 SINCEUNTIL 사용하여 관심 기간을 정의합니다. 그런 다음 상대 오프셋 값이 포함된 COMPARE WITH [time period] AGO 절을 사용하여 비교하려는 기간을 표시할 수 있습니다.

예를 들어 아래 샘플 쿼리에서는 1주 전의 상대 오프셋을 사용하여 마지막 날의 데이터를 이전 주의 데이터와 비교할 수 있습니다.

SELECT average(duration)
FROM Public_APICall
SINCE 1 day ago
COMPARE WITH 1 week ago

시간 경과에 따른 값 비교를 매핑하려면 TIMESERIES 추가하세요. 이렇게 하면 비교에 대한 선 차트가 생성되어 이 기간을 최근 데이터와 어떻게 비교하는지 시각화하고 시간 경과에 따라 추적할 수 있습니다.

SELECT average(duration)
FROM Public_APICall
SINCE 1 day ago
COMPARE WITH 1 week ago
TIMESERIES

UNTIL 과 유사하게 동일한 형식으로 다양한 상대 기간을 지정할 수도 있습니다. 예를 들어, 4 WEEKS AGO 또는 6 HOURS AGO 지정할 수 있습니다.

SELECT average(duration)
FROM Public_APICall
SINCE 1 hour ago
COMPARE WITH 6 hours ago
TIMESERIES

비교를 통해 애플리케이션에서 발생하는 상황에 대한 질문에 신속하게 답할 수 있습니다. 지난주에 비해 판매량, 실적, MTTR 또는 오류 값이 증가했거나 감소했습니까? 그리고 문제를 조사하는 경우 문제가 있는 성능 기간과 정상적인 성능 기간을 비교하는 것이 유용하다는 것을 알게 될 것입니다.

와일드카드 필터 사용

이제 WHERE 절을 사용하여 쿼리 결과를 필터링하는 방법을 알았습니다. 표준 비교 연산자를 사용하는 것 외에도 속성에 지정된 하위 문자열이 포함되어 있는지 여부를 찾으려면 LIKENOT LIKE 사용할 수도 있습니다. 이를 달성하려면 문자열 어디에서나 백분율(%) 기호를 와일드카드로 사용할 수 있습니다.

샘플 쿼리에서는 이름의 어느 위치에서든(시작, 중간 또는 끝) "amazonaws"라는 용어가 포함된 트랜잭션 수를 얻을 수 있습니다.

SELECT count(*)
FROM Public_APICall
WHERE http.url
LIKE '%amazonaws%'
FACET http.url
SINCE 1 day ago

대신 NOT LIKE 사용하도록 쿼리를 변경하면 이름에 선택한 단어(예: 아래와 같이 'google')가 포함되지 않은 거래 수를 얻게 됩니다.

SELECT count(*)
FROM Public_APICall
WHERE http.url NOT
LIKE '%google%'
FACET http.url
SINCE 1 day ago

시작과 끝 부분에 % 와일드카드로 사용할 수 있습니다. 이는 New Relic이 텍스트 어디에나 "Web"과 같은 용어가 포함된 경우 선택한 속성의 값을 확인한다는 의미입니다. 마찬가지로, %Web 또는 Web% 사용하여 각각 "Web"으로 끝나거나 "Web"으로 시작하는 항목을 일치시킬 수 있습니다.

보다 세분화된 검색을 위해 문자열 사이에 와일드카드를 추가할 수도 있습니다. 이 쿼리는 "amazon"이라는 단어와 텍스트가 포함되어 있고 ".com"이라는 용어도 포함되어 있는 거래 이름을 확인합니다. 그 뒤에는 임의 개수의 문자가 옵니다. 따라서 결과는 이름에 "amazon" 및 ".com"이 포함된 거래만 됩니다.

SELECT count(*)
FROM Public_APICall
WHERE http.url NOT
LIKE '%amazon%.com'
FACET http.url
SINCE 1 day ago

극도의 특이성이 필요하고 이름에 와일드카드를 사용하여 일치시킬 수 있는 공통 문자열이 없으면 어떻게 합니까? INNOT IN 연산자를 사용하면 속성에 대해 확인하려는 값 집합을 지정할 수 있습니다. AND 또는 OR 연산자를 사용하여 여러 WHERE 절을 지정하는 대신 쉼표로 구분된 괄호 안에 값을 나열하여 조건을 단순화할 수 있습니다.

이 샘플 쿼리에서는 하위 유형이 "graph.microsoft.com" 또는 "s3.amazonaws.com"인 트랜잭션 수를 계산할 수 있습니다. 대신 NOT IN 사용하도록 쿼리를 변경하면 하위 유형이 "graph.microsoft.com"이 아닌 트랜잭션 수를 얻게 됩니다. "s3.amazonaws.com"도 아닙니다.

SELECT count(*)
FROM Public_APICall
WHERE http.url IN ('graph.microsoft.com', 's3.amazonaws.com')
SINCE 1 day ago

이제 데이터를 제어하고 조작하여 필요한 작업을 수행할 수 있으므로 강력하고 의미 있는 대시보드와 경고를 구성할 수 있습니다. 다음으로 NRQL을 사용하여 시간 범위를 지정하는 방법을 알아봅니다.

시간 범위 지정

SINCEUNTIL 절은 상대적인 시간 범위에 대한 정보를 제공하는 것 이상의 역할을 합니다. 특정 날짜나 시간을 제공할 수도 있습니다. 다음 샘플 쿼리에서는 YYYY-MM-DD 형식의 SINCE 날짜를 사용할 수 있습니다.

SELECT average(duration)
FROM Public_APICall SINCE '2023-10-28'
TIMESERIES MAX

특정 기간 동안 SLA 보고서를 생성하는 데 이를 사용할 수 있습니다. YYYY-MM-DD HH:MM 형식으로 특정 시간을 포함할 수도 있습니다. 이 쿼리에서는 데이터가 오후 6시에 설정된 것을 볼 수 있습니다.

SELECT average(duration)
FROM Public_APICall SINCE '2023-10-28 18:00'
TIMESERIES MAX

때로는 epoch(unix) 시간으로 이벤트 시간을 받을 수도 있습니다. 편리하게도SINCEUNTIL 절과 함께 에포크 타임스탬프를 사용할 수 있으므로 이러한 값을 다른 날짜 형식으로 수동으로 변환할 필요가 없습니다.

SELECT average(duration)
FROM Public_APICall SINCE 1698525489519 UNTIL 1698698289519
TIMESERIES MAX

NRDB는 일정 기간 동안의 데이터를 표시할 때 사용자가 해당 시간대의 관점에서 데이터를 보길 원한다고 가정합니다. 그러나 여러 국가에 분산된 팀의 경우 위치에 따라 귀하의 오늘이 팀원의 내일일 수도 있고 어제일 수도 있습니다. WITH TIMEZONE 절을 사용하여 데이터를 표시할 시간대를 정의할 수 있습니다. 이는 SINCEUNTIL 절의 값 해석에 영향을 미칩니다.

아래 두 가지 예시 차트를 살펴보세요. 각 쿼리에는 WITH TIMEZONE 사용하여 지정된 시간대가 있습니다. 둘은 8시간 간격이다. 데이터 패턴은 동일하지만 각 시간대에 맞춰 8시간의 오프셋을 가집니다.

SELECT count(*)
FROM Public_APICall
SINCE yesterday
UNTIL today WITH TIMEZONE 'America/Los_Angeles'
TIMESERIES
SELECT count(*)
FROM Public_APICall
SINCE yesterday
UNTIL today WITH TIMEZONE 'Europe/London'
TIMESERIES

이 수업 전에는 모든 시간 제어 메커니즘이 지금부터의 상대 시간에 의존했습니다. 이제 세계에서 누군가의 위치에 따라 보기를 조정할 수 있습니다. 어쩌면 미국 동부 해안에 있는 고객이 서부 해안에 위치한 엔지니어링 팀에 문제를 보고할 수도 있습니다. 팀에서는 대시보드를 구축하고 고객이 인용하는 시간대에 매핑되도록 뷰를 변환할 수 있습니다. 따라서 고객이 동부 해안에서 오전 9시에 문제를 조언하는 경우 오전 9시를 보면 정신적으로 차이를 해석할 필요가 없다는 것을 확인할 수 있습니다.

사건이 발생한 특정 날짜에 데이터를 집중시켜야 하고 현재 시간을 기준으로 이동 시간 창 없이 데이터를 조사하려는 경우 이는 정적 시간 창에서 데이터를 얻는 데 도움이 됩니다. 다음이자 마지막 강의에서는 시간 기반 코호팅을 통해 보고에 시간을 사용하는 방법을 계속해서 배우게 됩니다.

시간 기반 코호팅 사용

복잡해 보일 수도 있지만, 시간 기반 코호팅은 단지 데이터를 minuteOf, hourOf, weekOf 등과 같은 시간 기반 그룹으로 구성하는 방법을 의미할 뿐입니다.

기간에 대해 SINCE 절을 사용하면 쿼리된 전체 시간 길이를 검색합니다. 하지만 그 데이터가 항상 전체 내용을 말해주지는 않을 수도 있습니다! 일정 기간 동안의 성과를 더 자세히 분석해야 한다면 어떻게 해야 할까요? 시간 기반 코호트를 사용하면 데이터를 논리적인 시간 기반 그룹으로 추가로 정렬할 수 있습니다.

FACET 와 다양한 시간 기반 함수(예: hourOf(timestamp)) 중 하나를 조합하여 사용하면 일주일 동안의 데이터를 수집하고 해당 데이터가 발생한 특정 시간을 기준으로 성능을 이해할 수 있습니다. 이를 통해 추세를 파악하고 애플리케이션에 가장 중요한 시기를 식별합니다.

SELECT average(duration)
FROM Public_APICall
FACET hourOf(timestamp)
SINCE 1 week ago

위의 쿼리를 실행하면 하루 중 시간을 기준으로 가장 느린 응답 시간을 확인할 수 있습니다. New Relic은 시간에 따라 다양한 패싯 옵션을 제공합니다. 이전 예에서는 시간별로 그룹화했지만 요일별로 그룹화하여 응답 시간이 가장 좋은 요일과 가장 나쁜 요일을 결정할 수도 있습니다.

SELECT average(duration)
FROM Public_APICall
FACET weekdayOf(timestamp)
SINCE 1 week ago

이제 특정 날짜에 가장 느린 애플리케이션 기간을 확인할 수 있습니다. 이를 사용하여 "언제 가장 많은 제품을 판매합니까?"와 같은 비즈니스에 중요한 질문에 답할 수 있습니다. 또는 "가입이나 로그인이 가장 많은 때는 언제입니까?"

특정 날짜별로 결과를 그룹화할 수도 있습니다. 이는 SLA 보고서를 고려하거나 특정 기간 동안의 성능 변화를 분석할 때 도움이 됩니다.

SELECT average(duration)
FROM Public_APICall
FACET dateOf(timestamp)
SINCE 1 week ago

시간 기반 코호팅은 특정 분, 시간, 일 또는 주에 발생하는 문제를 노출합니다. 뉴렐릭에 어떤 데이터를 보내든 NRQL을 사용하면 원하는 대로 데이터를 쪼개고, 정리하고, 시각화할 수 있습니다.

데이터 보존에 따라 주, 월, 연도를 포함하여 그룹화할 수 있는 다른 옵션도 많이 있습니다. 전체 목록을 보려면 시간에 따른 그룹 결과 문서 페이지 로 이동하세요.

다음은 뭐지?

여기서 얻은 지식을 바탕으로 대시보드 시각화를 만들고 가장 관심 있는 데이터 측면을 제어할 수 있습니다. 이러한 강력한 기술을 사용하여 보다 세부적이고 구체적인 경고에 대한 초점을 좁히고 훨씬 더 흥미로운 시각화를 생성할 수 있습니다. 준비가 되면 필터, 패싯 케이스, 히스토그램, apdex, eventType 필터링, 값 재정의 및 외삽을 포함하여 더 흥미로운 NRQL 기술을 배울 수 있는 세 번째 튜토리얼 로 진행할 수 있습니다.

Copyright © 2024 New Relic Inc.

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