Loading...
Loading...
Compare original and translation side by side
timeseriesdt.frontend.*fetch user.eventsfetch user.sessionsdt.frontend.*timeseriesfetch user.eventsfetch user.sessionsdt.frontend.user_action.countdt.frontend.user_action.durationdt.frontend.request.countdt.frontend.request.durationdt.frontend.error.countdt.frontend.session.active.estimated_countdt.frontend.user.active.estimated_countdt.frontend.web.page.cumulative_layout_shiftdt.frontend.web.navigation.dom_interactivedt.frontend.web.page.first_input_delaydt.frontend.web.page.largest_contentful_paintdt.frontend.web.page.interaction_to_next_paintdt.frontend.web.navigation.load_event_enddt.frontend.web.navigation.time_to_first_bytedt.frontend.user_action.countdt.frontend.user_action.durationdt.frontend.request.countdt.frontend.request.durationdt.frontend.error.countdt.frontend.session.active.estimated_countdt.frontend.user.active.estimated_countdt.frontend.web.page.cumulative_layout_shiftdt.frontend.web.navigation.dom_interactivedt.frontend.web.page.first_input_delaydt.frontend.web.page.largest_contentful_paintdt.frontend.web.page.interaction_to_next_paintdt.frontend.web.navigation.load_event_enddt.frontend.web.navigation.time_to_first_bytefrontend.namemy-frontenddt.rum.user_typegeo.country.iso_codedevice.typebrowser.namefrontend.namemy-frontenddt.rum.user_typegeo.country.iso_codedevice.typebrowser.namedt.frontend.*frontend.namegeo.country.iso_codedevice.typebrowser.nameos.nameuser_typereal_usersyntheticrobotfetch user.events, from: now() - 2h
| filter characteristics.has_page_summary == true
| summarize page_views = count(), by: {frontend.name}
| sort page_views descdt.frontend.*frontend.namegeo.country.iso_codedevice.typebrowser.nameos.nameuser_typereal_usersyntheticrobotfetch user.events, from: now() - 2h
| filter characteristics.has_page_summary == true
| summarize page_views = count(), by: {frontend.name}
| sort page_views desccharacteristics.has_page_summarycharacteristics.has_view_summarycharacteristics.has_navigationcharacteristics.has_user_interactioncharacteristics.has_requestcharacteristics.has_errorcharacteristics.has_crashcharacteristics.has_long_taskcharacteristics.has_csp_violationcharacteristics.has_page_summarycharacteristics.has_view_summarycharacteristics.has_navigationcharacteristics.has_user_interactioncharacteristics.has_requestcharacteristics.has_errorcharacteristics.has_crashcharacteristics.has_long_taskcharacteristics.has_csp_violationuser.sessionsuser.sessionsuser.sessionsuser.eventsuser.eventsdt.rum.session.iddt.rum.session_iddt.rum.instance.idfrontend.namedt.rum.application.typewebmobiledt.rum.user_typereal_usersyntheticrobot| Field | Description | ⚠️ NOT this |
|---|---|---|
| Number of navigations | |
| Clicks, form submissions | |
| User actions | |
| XHR/fetch requests | |
| Total events in session | |
| Page views (web) | |
| Views (mobile/SPA) | |
error.counterror.exception_counterror.http_4xx_counterror.http_5xx_counterror.anr_counterror.csp_violation_counterror.has_crashstart_timeend_timedurationend_reasontimeoutsynthetic_execution_finishedcharacteristics.is_bouncecharacteristics.has_replaydt.rum.user_tagdtrum.identifyUser()identifyUser()dt.rum.user_tagdt.rum.instance.iduser_taguser.sessionsuser.eventsbrowser.namebrowser.versiondevice.typeos.namegeo.country.iso_codeclient.ipclient.ispdt.entity.synthetic_testdt.entity.synthetic_locationdt.entity.synthetic_test_stepfetch user.sessions, from: X, to: Y[X, Y]fetch user.sessions, from: now() - 32huser.eventsuser.sessionsuser.sessionsuser.sessionsuser.sessionsuser.eventsuser.sessionsto: now() - 1huser.sessionsdt.rum.session.iduser.eventsuser.sessionsuser.eventsuser.sessionsfetch user.events, from: now() - 2h, to: now() - 1h
| filter isNotNull(dt.rum.session.id)
| summarize navs = countIf(characteristics.has_navigation == true),
interactions = countIf(characteristics.has_user_interaction == true),
by: {dt.rum.session.id}
| filter navs > 0 or interactions > 0fetch user.sessions, from: now() - 24h
| filter dt.rum.user_type == "real_user"
| summarize
total_sessions = count(),
bounces = countIf(characteristics.is_bounce == true),
zero_activity = countIf(toLong(navigation_count) == 0 and toLong(user_interaction_count) == 0),
avg_duration_s = avg(toLong(duration)) / 1000000000
| fieldsAdd bounce_rate_pct = round((bounces * 100.0) / total_sessions, decimals: 1)user.sessionsuser.eventsuser.eventsdt.rum.session.iddt.rum.session_iddt.rum.instance.idfrontend.namedt.rum.application.typewebmobiledt.rum.user_typereal_usersyntheticrobot| 字段 | 描述 | ⚠️ 不要使用该字段 |
|---|---|---|
| 导航次数 | |
| 点击、表单提交次数 | |
| 用户操作次数 | |
| XHR/fetch请求次数 | |
| 会话内总事件数 | |
| 页面访问量(网页端) | |
| 页面浏览量(移动端/单页应用) | |
error.counterror.exception_counterror.http_4xx_counterror.http_5xx_counterror.anr_counterror.csp_violation_counterror.has_crashstart_timeend_timedurationend_reasontimeoutsynthetic_execution_finishedcharacteristics.is_bouncecharacteristics.has_replaydt.rum.user_tagdtrum.identifyUser()identifyUser()dt.rum.user_tagdt.rum.instance.iduser_taguser.sessionsuser.eventsbrowser.namebrowser.versiondevice.typeos.namegeo.country.iso_codeclient.ipclient.ispdt.entity.synthetic_testdt.entity.synthetic_locationdt.entity.synthetic_test_stepfetch user.sessions, from: X, to: Y[X, Y]fetch user.sessions, from: now() - 32huser.eventsuser.sessionsuser.sessionsuser.sessionsuser.sessionsuser.eventsuser.sessionsto: now() - 1huser.sessionsuser.eventsdt.rum.session.iduser.sessionsuser.eventsuser.sessionsfetch user.events, from: now() - 2h, to: now() - 1h
| filter isNotNull(dt.rum.session.id)
| summarize navs = countIf(characteristics.has_navigation == true),
interactions = countIf(characteristics.has_user_interaction == true),
by: {dt.rum.session.id}
| filter navs > 0 or interactions > 0fetch user.sessions, from: now() - 24h
| filter dt.rum.user_type == "real_user"
| summarize
total_sessions = count(),
bounces = countIf(characteristics.is_bounce == true),
zero_activity = countIf(toLong(navigation_count) == 0 and toLong(user_interaction_count) == 0),
avg_duration_s = avg(toLong(duration)) / 1000000000
| fieldsAdd bounce_rate_pct = round((bounces * 100.0) / total_sessions, decimals: 1)references/WebVitals.mdreferences/performance-analysis.mdreferences/WebVitals.mdreferences/performance-analysis.mdfetch user.sessionsfetch user.eventsreferences/user-sessions.mdreferences/performance-analysis.mduser.sessionscharacteristics.is_bouncenavigation_countuser_interaction_countuser.eventscharacteristics.has_user_interactionfetch user.sessionsfetch user.eventsreferences/user-sessions.mdreferences/performance-analysis.mduser.sessionscharacteristics.is_bouncenavigation_countuser_interaction_countcharacteristics.has_user_interactionuser.eventsreferences/error-tracking.mdreferences/performance-analysis.mdreferences/error-tracking.mdreferences/performance-analysis.mdreferences/mobile-monitoring.mdreferences/mobile-monitoring.mdreferences/performance-analysis.mdreferences/performance-analysis.mdfrontend.namedt.rum.user_typeuser.sessionsuser.sessionsuser.eventsfrontend.namedt.rum.user_typeuser.sessionsuser.sessionsuser.eventsdt.rum.user_typedt.rum.user_typefetch user.events
| filter frontend.name == "my-frontend" and characteristics.has_request == true
| filter page.url.path == "/checkout"
| summarize avg_ttfb = avg(request.time_to_first_byte), avg_duration = avg(duration)dt.rum.trace_idfetch user.events
| filter frontend.name == "my-frontend" and characteristics.has_request == true
| filter page.url.path == "/checkout"
| summarize avg_ttfb = avg(request.time_to_first_byte), avg_duration = avg(duration)dt.rum.trace_idfetch user.events, from: now() - 2h
| filter characteristics.has_long_task == true
| summarize
long_task_count = count(),
total_blocking_time = sum(duration),
by: {frontend.name, page.url.path}
| sort total_blocking_time desc
| limit 20fetch user.events, from: now() - 2h
| filter frontend.name == "my-frontend"
| filter characteristics.has_long_task == true
| summarize
long_task_count = count(),
total_blocking_time = sum(duration),
by: {long_task.attribution.container_src}
| sort total_blocking_time desc
| limit 20fetch user.events, from: now() - 2h
| filter characteristics.has_long_task == true
| summarize
long_task_count = count(),
total_blocking_time = sum(duration),
by: {frontend.name, page.url.path}
| sort total_blocking_time desc
| limit 20fetch user.events, from: now() - 2h
| filter frontend.name == "my-frontend"
| filter characteristics.has_long_task == true
| summarize
long_task_count = count(),
total_blocking_time = sum(duration),
by: {long_task.attribution.container_src}
| sort total_blocking_time desc
| limit 20fetch user.events
| filter frontend.name == "my-frontend"
| filter characteristics.has_request
| filter endsWith(url.full, ".js")
| summarize dls = max(performance.decoded_body_size), by: url.full
| sort dls desc
| limit 20fetch user.events
| filter frontend.name == "my-frontend"
| filter characteristics.has_request
| filter endsWith(url.full, ".js")
| summarize dls = max(performance.decoded_body_size), by: url.full
| sort dls desc
| limit 20fetch user.events
| filter frontend.name == "my-frontend"
| filter characteristics.has_request
| summarize dls = max(performance.decoded_body_size), by: url.full
| sort dls desc
| limit 20fetch user.events
| filter frontend.name == "my-frontend"
| filter characteristics.has_request
| summarize dls = max(performance.decoded_body_size), by: url.full
| sort dls desc
| limit 20fetch user.events, from: now() - 2h
| filter frontend.name == "my-frontend"
| filter characteristics.has_request == true
| fieldsAdd cache_status = if(
performance.incomplete_reason == "local_cache" or performance.transfer_size == 0 and
(performance.encoded_body_size > 0 or performance.decoded_body_size > 0),
"cached",
else: if(performance.transfer_size > 0, "network", else: "uncached")
)
| summarize
request_count = count(),
avg_duration = avg(duration),
by: {url.domain, cache_status}fetch user.events, from: now() - 2h
| filter frontend.name == "my-frontend"
| filter characteristics.has_request == true
| fieldsAdd cache_status = if(
performance.incomplete_reason == "local_cache" or performance.transfer_size == 0 and
(performance.encoded_body_size > 0 or performance.decoded_body_size > 0),
"cached",
else: if(performance.transfer_size > 0, "network", else: "uncached")
)
| summarize
request_count = count(),
avg_duration = avg(duration),
by: {url.domain, cache_status}fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| filter isNotNull(performance.encoded_body_size) and isNotNull(performance.decoded_body_size)
| filter performance.encoded_body_size > 0
| fieldsAdd
expansion_ratio = performance.decoded_body_size / performance.encoded_body_size,
wasted_bytes = performance.decoded_body_size - performance.encoded_body_size
| summarize
requests = count(),
avg_expansion_ratio = avg(expansion_ratio),
total_wasted_bytes = sum(wasted_bytes),
by: {request.url.host, request.url.path}
| sort total_wasted_bytes desc
| limit 50fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| filter isNotNull(performance.encoded_body_size) and isNotNull(performance.decoded_body_size)
| filter performance.encoded_body_size > 0
| fieldsAdd
expansion_ratio = performance.decoded_body_size / performance.encoded_body_size,
wasted_bytes = performance.decoded_body_size - performance.encoded_body_size
| summarize
requests = count(),
avg_expansion_ratio = avg(expansion_ratio),
total_wasted_bytes = sum(wasted_bytes),
by: {request.url.host, request.url.path}
| sort total_wasted_bytes desc
| limit 50fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| summarize
request_count = count(),
avg_duration = avg(duration),
p75_duration = percentile(duration, 75),
p95_duration = percentile(duration, 95),
by: {geo.country.iso_code, request.url.domain}
| sort p95_duration desc
| limit 50fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| filter isNotNull(performance.domain_lookup_start) and isNotNull(performance.domain_lookup_end)
| fieldsAdd dns_ms = performance.domain_lookup_end - performance.domain_lookup_start
| summarize
request_count = count(),
avg_dns_ms = avg(dns_ms),
p75_dns_ms = percentile(dns_ms, 75),
p95_dns_ms = percentile(dns_ms, 95),
by: {request.url.domain}
| sort p95_dns_ms desc
| limit 50fetch user.events
| filter characteristics.has_request
| summarize cnt = count(), by: {url.domain, performance.next_hop_protocol}
| sort cnt desc
| limit 50fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| summarize
request_count = count(),
avg_duration = avg(duration),
p75_duration = percentile(duration, 75),
p95_duration = percentile(duration, 95),
by: {geo.country.iso_code, request.url.domain}
| sort p95_duration desc
| limit 50fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| filter isNotNull(performance.domain_lookup_start) and isNotNull(performance.domain_lookup_end)
| fieldsAdd dns_ms = performance.domain_lookup_end - performance.domain_lookup_start
| summarize
request_count = count(),
avg_dns_ms = avg(dns_ms),
p75_dns_ms = percentile(dns_ms, 75),
p95_dns_ms = percentile(dns_ms, 95),
by: {request.url.domain}
| sort p95_dns_ms desc
| limit 50fetch user.events
| filter characteristics.has_request
| summarize cnt = count(), by: {url.domain, performance.next_hop_protocol}
| sort cnt desc
| limit 50fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| summarize
request_count = count(),
avg_duration = avg(duration),
p75_duration = percentile(duration, 75),
p95_duration = percentile(duration, 95),
by: {request.url.domain}
| sort p95_duration desc
| limit 50fetch user.events, from: now() - 2h
| filter characteristics.has_request == true
| summarize
request_count = count(),
avg_duration = avg(duration),
p75_duration = percentile(duration, 75),
p95_duration = percentile(duration, 95),
by: {request.url.domain}
| sort p95_duration desc
| limit 50now()-1h to now()now()-24hfrontend.namefetch user.events | limit 1now()-1h to now()now()-24hfrontend.namefetch user.events | limit 1dt.rum.user_typedt.rum.user_typeQuery returns unexpected results
│
├─ Is this a zero-result scenario?
│ ├─ YES → Follow "Handling Zero Results" workflow
│ └─ NO → Continue
│
├─ Can I validate the result independently?
│ ├─ YES → Run validation query
│ │ ├─ Validation confirms result → Report findings
│ │ └─ Validation contradicts → Investigate further
│ └─ NO → Continue
│
├─ Is the anomaly clearly explained by data?
│ ├─ YES → Report with explanation
│ └─ NO → Continue
│
├─ Do I need domain knowledge to interpret?
│ ├─ YES → Ask user for context
│ │ Example: "The error rate is 15%. Is this expected for your frontend?"
│ └─ NO → Continue
│
└─ Is the issue ambiguous or requires clarification?
├─ YES → Ask specific question with data context
│ Example: "I see two frontends named 'web-app'. Which frontend name should I use?"
└─ NO → Investigate and report findings with caveats查询返回异常结果
│
├─ 是否是零结果场景?
│ ├─ 是 → 遵循"处理零结果"流程
│ └─ 否 → 继续
│
├─ 我能否独立验证结果?
│ ├─ 是 → 运行验证查询
│ │ ├─ 验证确认结果 → 上报发现
│ │ └─ 验证结果矛盾 → 进一步调查
│ └─ 否 → 继续
│
├─ 异常是否能被数据清晰解释?
│ ├─ 是 → 附带解释上报
│ └─ 否 → 继续
│
├─ 我是否需要领域知识来解读?
│ ├─ 是 → 向用户请求上下文
│ │ 示例:"错误率为15%,这对您的前端来说是否属于预期情况?"
│ └─ 否 → 继续
│
└─ 问题是否模糊或需要澄清?
├─ 是 → 结合数据上下文提出具体问题
│ 示例:"我发现有两个名为'web-app'的前端,我应该使用哪个前端名称?"
└─ 否 → 调查并附带说明上报结果checkout-webcheckout-mobiledt.rum.user_type='REAL_USER'checkout-webcheckout-mobiledt.rum.user_type='REAL_USER'references/WebVitals.mdreferences/user-sessions.mdreferences/error-tracking.mdreferences/mobile-monitoring.mdreferences/performance-analysis.mdreferences/WebVitals.mdreferences/user-sessions.mdreferences/error-tracking.mdreferences/mobile-monitoring.mdreferences/performance-analysis.md