如何通过环境REST API使用request attributes过滤Dynatrace指标
前提说明
你在多维分析GUI中可用的所有Request Attribute,只要状态为已启用,都会自动注册为指标的可选维度,可直接在/metrics/query接口的查询参数中使用。
1. 按Request Attribute过滤指标
语法规则:在metricSelector参数中,给目标指标加上filter(eq(<request_attribute_key>,<目标值>))后缀即可
示例:要过滤builtin:service.request.server.duration指标中,userId这个Request Attribute等于12345的请求数据,metricSelector写法如下:builtin:service.request.server.duration:filter(eq(userId,"12345"))
如果需要多条件过滤,可以用and拼接条件:builtin:service.request.server.duration:filter(eq(userId,"12345") and eq(clientType,"Web"))
2. 按Request Attribute拆分指标
语法规则:在metricSelector参数中加上:splitBy(<request_attribute_key>)后缀,即可按指定Request Attribute的值拆分指标,返回每个值对应的独立时间序列
示例:按userId拆分请求耗时指标,写法如下:builtin:service.request.server.duration:splitBy(userId)
可以同时按多个维度拆分,包括内置维度+自定义Request Attribute:builtin:service.request.server.duration:splitBy(service.name,userId)
3. 同时使用过滤+拆分
两种语法可以组合使用,示例:builtin:service.request.server.duration:filter(eq(clientType,"Web")):splitBy(userId):avg
上面的查询会先筛选Web端的请求,再按userId拆分,最后返回每个userId的平均耗时数据
4. 完整接口请求示例(curl)
curl -X GET "https://<你的Dynatrace租户地址>/api/v2/metrics/query?metricSelector=builtin%3Aservice.request.server.duration%3Afilter%28eq%28clientType%2C%22Web%22%29%29%3AsplitBy%28userId%29%3Aavg&from=now-1h&to=now" \ -H "accept: application/json; charset=utf-8" \ -H "Authorization: Api-Token <你的API Token>"
注意事项
- 如果不知道Request Attribute对应的key,可以在GUI的「设置>请求属性」中找到对应属性的详情页,查看
密钥字段 - 调用接口的API Token需要提前配置
metrics.read权限 - 字符串类型的属性值需要用双引号包裹,数字类型可以省略引号
内容的提问来源于stack exchange,提问作者Mariano Havandjian

