You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在New Relic中计算所有进程的平均总处理时间?

问题描述

我的New Relic表中有如下数据:

idtimestampstatus
A2024-12-01 11:36:00开始处理步骤1
B2024-12-01 11:37:00开始处理步骤1
B2024-12-01 11:38:00开始处理步骤2
A2024-12-01 12:01:00开始处理步骤2
C2024-12-01 12:36:00开始处理步骤1
C2024-12-01 12:41:00开始处理步骤2
B2024-12-01 13:36:00开始处理步骤3
A2024-12-01 13:46:00开始处理步骤3
C2024-12-01 13:56:00开始处理步骤3

处理时间定义为从第一步(步骤1)到最后一步(步骤3)的耗时,例如进程A的耗时为2024-12-01 13:46:00 - 2024-12-01 11:36:00 = 2小时10分钟。我需要计算所有进程ID的平均处理时间,请问如何在New Relic中实现?

实现方案

可以通过New Relic的NRQL查询完成需求,核心逻辑是按进程ID分组,提取每个ID对应的步骤1最早启动时间、步骤3启动时间,计算单进程耗时后再求平均值。

完整NRQL查询语句

FROM YourTableName
SELECT 
  latest(timestamp) FILTER (WHERE status = '开始处理步骤3') AS step3_time,
  earliest(timestamp) FILTER (WHERE status = '开始处理步骤1') AS step1_time,
  (latest(timestamp) FILTER (WHERE status = '开始处理步骤3') - earliest(timestamp) FILTER (WHERE status = '开始处理步骤1')) AS process_duration
FACET id
LIMIT MAX
| SELECT average(process_duration) AS average_process_time

语句说明

  1. 数据分组与基础筛选
    • FROM YourTableName:替换为你实际的表名
    • FACET id:按进程ID分组,确保每个ID的时间数据被单独计算
  2. 提取关键时间点
    • earliest(timestamp) FILTER (WHERE status = '开始处理步骤1'):获取每个进程ID的步骤1最早启动时间
    • latest(timestamp) FILTER (WHERE status = '开始处理步骤3'):获取每个进程ID的步骤3启动时间(若每个ID仅执行一次步骤3,用earliest结果一致)
  3. 计算单进程耗时
    • NRQL支持时间类型直接做减法,step3_time - step1_time会自动返回带单位的时长结果(如2h10m)
  4. 计算平均耗时
    • 嵌套查询| SELECT average(process_duration)对所有有效进程的耗时求平均值,自动忽略缺少步骤1或步骤3的进程(这类进程的耗时会返回null,average函数会排除null值)

额外优化

如果需要将结果统一转换为特定时间单位(比如分钟),可以用duration()函数调整,例如把process_duration替换为duration(process_duration, 'minutes')。

内容的提问来源于stack exchange,提问作者Craig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:31:01