如何通过Dynatrace API获取服务维度的CPU使用率指标?
Dynatrace获取服务/单个Web控制器级CPU占比API方案
你当前用的/api/v2/metrics/query?metricSelector=builtin:tech.generic.cpu.usage是进程组粒度的通用CPU指标,和前端服务板块展示的控制器粒度CPU占比统计口径完全不同,按以下方式调用即可拿到对应数据:
- 正确的内置指标为
builtin:service.method.cpu.time,这是OneAgent做字节码注入时,针对每个追踪到的服务方法(含Spring Boot Web控制器接口)单独统计的CPU消耗指标,支持直接返回CPU占比数值 - 接口调用完整参数参考:
GET /api/v2/metrics/query ?metricSelector=builtin:service.method.cpu.time:splitBy("dt.entity.service_method","service.method.name","dt.entity.process_group"):value(percent) &entitySelector=type(PROCESS_GROUP),entityName.equals("你的WebLogic进程组名称") &resolution=5m
上述参数的作用:
splitBy指定拆分维度,会把数据按单个服务方法(控制器接口)、所属进程组拆分,返回每个控制器的独立数据:value(percent)直接返回该方法在所属进程内的CPU占用百分比,和前端页面展示数值完全一致resolution指定数据聚合粒度,和你前端看数据的时间粒度对齐即可- 调用前置要求:
- 对应WebLogic进程的OneAgent已经开启Spring/Servlet传感器深度监控,能在前端服务页面正常看到单个控制器的请求链路、响应时间等明细数据,否则不会上报方法级CPU指标
- 调用使用的API Token需要授予
metrics.read、entities.read权限,否则服务级维度数据会被过滤不返回
- 常见排查点:如果调用后返回空数据,先去Dynatrace指标浏览器里搜索
builtin:service.method.cpu.time,确认当前环境有该指标的上报数据,再检查是否对对应服务开启了方法级追踪开关。
补充说明:服务/控制器级的CPU占比不是从进程整体CPU做拆分估算的,是OneAgent在请求处理链路中直接统计每个方法执行占用的CPU时间片聚合计算得出的,和进程级CPU指标统计逻辑独立,不存在直接的维度下钻关联。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

