콘텐츠로 이동

RUM 지표 감지


현재 문서의 위치

이 문서는 감지 규칙 구성 프로세스의 두 번째 단계입니다. 구성을 완료한 후에는 세 번째 단계: 이벤트 알림을 계속 진행하려면 기본 문서로 돌아가십시오.

워크스페이스 내의 RUM 지표 데이터를 모니터링하는 데 사용됩니다. Web, Android, iOS, Miniapp, React Native, HarmonyOS 등 여러 유형의 애플리케이션에 대한 성능 지표의 임계값 범위를 설정할 수 있으며, 지표가 임계값을 초과하면 시스템이 자동으로 알림을 트리거합니다.

프런트엔드 애플리케이션 성능을 모니터링해야 하는 시나리오에 적합합니다. 예를 들어, Web에서 도시 차원의 JS 오류율을 모니터링하거나, 미니앱의 페이지 로드 시간, 모바일 애플리케이션의 크래시율 등을 모니터링할 수 있습니다.

감지 구성

감지 빈도

감지 실행 시간 간격을 설정합니다.

  • 사전 설정 옵션: 1분, 5분, 10분, 15분, 30분, 1시간
  • 기본 선택: 5분
  • Crontab 모드: "Crontab 모드로 전환"을 클릭하여 사용자 정의 주기를 구성할 수 있습니다. 초, 분, 시간, 일, 월, 주 등의 주기를 기반으로 예약된 작업 실행을 구성할 수 있습니다.

감지 범위

각 감지 시 쿼리할 데이터의 시간 범위를 설정합니다 (❗️감지 범위는 감지 빈도보다 크거나 같아야 하며, 데이터 실제 보고 주기와 일치해야 합니다. 그렇지 않으면 감지 누락이나 오탐이 발생할 수 있습니다).

감지 빈도 감지 범위 (드롭다운 선택 가능)
30s 1m/5m/15m/30m/1h/3h
1m 1m/5m/15m/30m/1h/3h
5m 5m/15m/30m/1h/3h
15m 15m/30m/1h/3h/6h
30m 30m/1h/3h/6h
1h 1h/3h/6h/12h/24h
6h 6h/12h/24h
12h 12h/24h
24h 24h
  • 사용자 정의 형식: 감지 범위를 직접 입력할 수 있습니다. 예: 20m (최근 20분), 2h (최근 2시간), 1d (최근 1일)

감지 지표

감지할 지표 데이터를 설정합니다. 현재 워크스페이스 내의 단일 애플리케이션 유형에 대한 애플리케이션 지표 데이터를 구성할 수 있습니다 (❗️감지 차원으로 높은 카디널리티 필드를 선택하지 마십시오. 구성이 잘못되면 트리거 조건이 너무 느슨해져 빈번한 알림이 발생할 수 있습니다. 현재 쿼리의 최대 반환 기록 수는 10만 개입니다).

구성 요소

구성 항목 설명
애플리케이션 유형 RUM에서 지원하는 애플리케이션 유형: Web, Android, iOS, Miniapp, HarmonyOS
애플리케이션 이름 선택한 애플리케이션 유형을 기반으로 해당 애플리케이션 목록을 가져옵니다. 전체 선택 또는 특정 애플리케이션 지정 가능
지표 애플리케이션 유형에 따라 해당 성능 지표를 표시합니다. 자세한 내용은 아래 지표 설명을 참조하십시오.
필터 조건 지표의 태그를 기반으로 감지 지표 데이터를 필터링하여 감지 데이터 범위를 제한합니다. 하나 이상의 태그 필터를 추가할 수 있습니다. 퍼지 일치 및 퍼지 불일치 필터 조건을 지원합니다.
감지 차원 데이터의 문자열 유형(keyword) 필드는 감지 차원으로 선택할 수 있습니다. 현재 최대 3개의 필드를 지원합니다. 여러 감지 차원 필드의 조합을 통해 특정 감지 대상을 결정할 수 있습니다. 시스템은 특정 감지 대상에 해당하는 통계 지표가 트리거 조건의 임계값을 충족하는지 판단하고, 조건을 충족하면 이벤트를 생성합니다.

(예: 감지 차원으로 hosthost_ip를 선택하면 감지 대상은 {host: host1, host_ip: 127.0.0.1}가 될 수 있습니다.)
추가 정보 추가 필드는 추가 쿼리로만 사용되며 트리거 조건 판단에 사용되지 않습니다. 이를 이벤트 알림에 구성할 수 있습니다. 여러 일치 값이 감지되면 하나의 레코드가 무작위로 반환됩니다.

Web / 미니앱 지표 설명

지표 DQL 쿼리 예시
JS 오류 수 R::error:(count(__docid) asJS 오류 수) { app_id = '<애플리케이션 ID>' }
JS 오류율 Web: eval(A/B, alias='페이지 JS 오류율', A="R::view:(count(view_url)) {view_error_count > 0, app_id = '<애플리케이션 ID>'}", B="R::view:(count(view_url)) { app_id = '<애플리케이션 ID>'}")

미니앱: eval(A/B, alias='JS 오류율', A="R::view:(count(view_name)) {view_error_count > 0, app_id = '<애플리케이션 ID>' }", B="R::view:(count(view_name)) { app_id = '<애플리케이션 ID>' }")
리소스 오류 수 R::resource:(count(resource_url) as리소스 오류 수) {resource_status >=400, app_id = '<애플리케이션 ID>'}"
리소스 오류율 eval(A/B, alias='리소스 오류율', A="R::resource:(count(resource_url)) { resource_status >= '400',app_id = '<애플리케이션 ID>' }", B="R::resource:(count(resource_url)) { app_id = '<애플리케이션 ID>' }")
최초 렌더링 평균 시간 R::page:(avg(page_fpt)){app_id = '<애플리케이션 ID>'}
페이지 로드 평균 시간 R::view:(avg(loading_time)){app_id = '<애플리케이션 ID>'}
페이지 느린 로드 횟수 R::resource:(count(resource_load)){app_id = '<애플리케이션 ID>',resource_load>8000000000,resource_type='document'}"
리소스 로드 평균 시간 R::resource:(avg(resource_load) as로드 시간) {app_id = '<애플리케이션 ID>',resource_type!='document'}"
LCP (largest_contentful_paint) 집계 함수 지원: avg, percentile

R::view:(avg(largest_contentful_paint)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(largest_contentful_paint,75)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(largest_contentful_paint,90)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(largest_contentful_paint,99)){app_id = '<애플리케이션 ID>'}
FID (first_input_delay) 집계 함수 지원: avg, percentile

R::view:(avg(first_input_delay)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(first_input_delay,75)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(first_input_delay,90)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(first_input_delay,99)){app_id = '<애플리케이션 ID>'}
CLS (cumulative_layout_shift) 집계 함수 지원: avg, percentile

R::view:(avg(cumulative_layout_shift)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(cumulative_layout_shift,75)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(cumulative_layout_shift,90)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(cumulative_layout_shift,99)){app_id = '<애플리케이션 ID>'}
FCP (first_contentful_paint) 집계 함수 지원: avg, percentile

R::view:(avg(first_contentful_paint)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(first_contentful_paint,75)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(first_contentful_paint,90)){app_id = '<애플리케이션 ID>'}
R::view:(percentile(first_contentful_paint,99)){app_id = '<애플리케이션 ID>'}

Android / iOS 지표 설명

지표 DQL 쿼리 예시
시작 시간 R::action:(avg(duration)) { app_id = '<애플리케이션 ID>' ,action_type='app_cold_launch'}"
총 크래시 수 R::error:(count(error_type)) {app_id='<애플리케이션 ID>',error_source = 'logger' and is_web_view !='true'}"
총 크래시율 eval(A.a1/B.b1, alias='총 크래시율',A="R::error:(count(error_type) as a1) {app_id='<애플리케이션 ID>',error_source = 'logger',is_web_view !='true'} ",B="R::action:(count(action_name) as b1) { app_id = '<애플리케이션 ID>',action_type in [launch_cold,launch_hot,launch_warm]} ")"
리소스 오류 수 R::resource:(count(resource_url) as리소스 오류 수) {resource_status >=400, app_id = '<애플리케이션 ID>'}"
리소스 오류율 eval(A/B, alias='리소스 오류율', A="R::resource:(count(resource_url)) { resource_status >= '400',app_id = '<애플리케이션 ID>' }", B="R::resource:(count(resource_url)) { app_id = '<애플리케이션 ID>' }")
평균 FPS R::view:(avg(fps_avg)) { app_id = '<애플리케이션 ID>' }"
페이지 로드 평균 시간 R::view:(avg(loading_time)) { app_id = '<애플리케이션 ID>' }"
리소스 로드 평균 시간 R::resource:(avg(duration)) { app_id = '<애플리케이션 ID>' }"
끊김 횟수 R::long_task:(count(view_id)) { app_id = '<애플리케이션 ID>' }"
페이지 오류율 eval(A/B, alias='페이지 오류율',A="R::view:(count(view_name)) {view_error_count > 0, app_id = '<애플리케이션 ID>' }",B="R::view:(count(view_name)) { app_id = '<애플리케이션 ID>' }")"

트리거 조건

트리거 조건과 심각도를 구성합니다. 쿼리 결과가 여러 값인 경우, 하나의 값이라도 트리거 조건을 충족하면 이벤트가 생성됩니다.

치명적, 심각, 중요, 경고의 4단계 임계값과 정상 복구 조건을 구성할 수 있습니다.

수준 구성 설명
치명적 Result >= [값] 최고 수준 알림, 즉시 처리 필요
심각 Result >= [값] 높은 수준 알림, 우선 처리 필요
중요 Result >= [값] 중간 수준 알림, 주의 필요
경고 Result >= [값] 낮은 수준 알림, 확인 필요
정상 [N]회 감지 시 이벤트 미발생 감지 규칙이 적용된 후, 구성된 사용자 정의 감지 횟수 내에서 데이터 감지 결과가 비정상(치명적, 심각, 중요, 경고)에서 정상으로 복구되면 복구 알림 이벤트가 트리거됩니다.
❗️복구 알림 이벤트는 알림 음소거의 제한을 받지 않습니다. 복구 알림 이벤트 감지 횟수가 설정되지 않은 경우, 알림 이벤트가 복구되지 않고 이벤트 > 미복구 이벤트 목록에 계속 표시됩니다.

자세한 내용은 이벤트 수준 설명을 참조하십시오.

고급 옵션

연속 트리거 판단

활성화하면 트리거 조건이 지속적으로 충족될 때만 이벤트가 생성되어 일시적인 변동으로 인한 오탐을 방지합니다 (❗️최대 구성 상한은 10회).

대량 알림 보호

시스템 기본적으로 활성화됩니다.

단일 감지에서 생성된 알림 수가 미리 설정된 임계값을 초과하면 시스템이 자동으로 상태별 요약 전략으로 전환됩니다: 더 이상 알림 대상을 개별적으로 처리하지 않고, 이벤트 상태에 따라 소량의 요약 알림을 생성하여 푸시합니다.

이를 통해 알림의 적시성을 보장하고 알림 노이즈를 크게 줄여 너무 많은 알림을 처리하여 발생하는 시간 초과 위험을 방지할 수 있습니다.

이 스위치가 켜져 있으면, 이후 모니터가 이상을 감지한 후 생성되는 이러한 이벤트 상세에는 기록 및 관련 이벤트가 표시되지 않습니다.

데이터 단절

감지 범위 내에서 감지 지표의 쿼리 결과가 비어 있을 때의 처리 전략:

옵션 설명
이벤트 트리거 안 함 (기본값) 감지 범위의 시간 범위와 연동하여, 감지 지표의 최근 몇 분간 쿼리 결과를 기반으로 이벤트 생성 여부를 판단합니다. 데이터 누락이 허용되는 시나리오에 적합합니다.
쿼리 결과를 0으로 간주 감지 범위의 시간 범위와 연동하여, 감지 지표의 최근 몇 분간 쿼리 결과를 0으로 간주하고 위의 트리거 조건에 구성된 임계값과 다시 비교하여 비정상 이벤트 트리거 여부를 판단합니다.
사용자 정의 값 채우기 및 이벤트 트리거 감지 범위 값을 사용자 정의하여 채우고 각각 다음 이벤트 유형을 트리거할 수 있습니다: 데이터 단절 이벤트, 심각 이벤트, 중요 이벤트, 경고 이벤트복구 이벤트.

❗️이 전략을 선택할 때는 사용자 정의 데이터 단절 시간 구성을 ≥ 감지 범위 시간 간격으로 설정하는 것이 좋습니다. 구성 시간이 감지 범위 시간 간격보다 작거나 같으면 데이터 단절과 비정상이 동시에 충족될 수 있으며, 이 경우 데이터 단절 처리 결과가 우선 적용됩니다.

트리거 조건, 데이터 단절, 정보 생성이 동시에 구성된 경우, 다음 우선 순위에 따라 트리거가 판단됩니다: 데이터 단절 > 트리거 조건 > 정보 이벤트 생성.

즉, 먼저 데이터 단절 여부를 판단하고, 그 다음 임계값 트리거 여부를 판단하며, 마지막으로 정보 이벤트 생성 여부를 판단합니다.

정보 생성

이 옵션을 활성화하면 정보 생성 조건을 구성해야 합니다. 감지 결과가 "치명적", "심각", "중요", "경고" 임계값 중 하나도 트리거하지 않고 정보 생성 조건을 충족하는 경우에만 시스템이 "정보" 이벤트를 기록합니다.

정상 상태 변화나 낮은 우선 순위 정보를 기록해야 하는 시나리오에 적합합니다.

후속 구성

위의 감지 구성을 완료한 후에는 다음을 계속 구성하십시오:

  1. 이벤트 알림: 이벤트 제목, 내용, 알림 대상, 데이터 단절 처리 및 관련 인시던트를 정의합니다.
  2. 알림 구성: 알림 정책을 선택하고 알림 대상 및 음소거 주기를 설정합니다.
  3. 연결: 대시보드와 연결하여 빠르게 데이터를 확인할 수 있도록 합니다.
  4. 권한: 작업 권한을 설정하여 이 모니터를 편집/삭제할 수 있는 사용자를 제어합니다.

문서 평가

이 페이지가 도움이 되었나요?