如何通过Datadog REST API将整段时间区间聚合为单个数据点?
Datadog REST API 聚合时间区间为单个数据点的实现方案
问题解答
Datadog REST API完全支持将指定时间区间内的指标数据聚合为单个数据点,针对你提到的成功率计算场景,可以通过以下方式构造查询请求:
核心逻辑
你的指标用1表示成功、0表示失败,成功率等价于该指标在时间区间内的平均值(平均值=成功次数/总上报次数)。只需在查询中使用聚合函数,并将时间粒度设置为整个目标区间的长度,就能得到单个聚合数据点。
请求构造步骤
使用Datadog的/api/v1/query端点(POST方法),具体参数如下:
请求头:必须包含认证信息
DD-API-KEY: 你的Datadog API密钥DD-APPLICATION-KEY: 你的Datadog应用密钥
请求体参数:
start: 过去一个月的起始时间戳(单位:秒,例如当前时间减去30天的时间戳)end: 当前时间戳(单位:秒)query: 聚合查询语句,格式为:
其中:avg:你的指标名称{*}.rollup(avg, 2592000)avg:你的指标名称{*}:指定对目标指标应用平均值计算.rollup(avg, 2592000):rollup函数的第二个参数是时间间隔(秒),2592000等于30天的总秒数(30×24×3600),强制API将整个区间的所有原始数据聚合为单个平均值点
请求示例(JSON格式)
{ "start": 1698844800, "end": 1701436800, "query": "avg:service.request.success{*}.rollup(avg, 2592000)" }
替代方案(用总和与计数计算)
如果你想更直观地计算成功率,也可以通过成功次数除以总次数得到,查询语句如下:
sum:你的指标名称{*}.rollup(sum, 2592000) / count:你的指标名称{*}.rollup(sum, 2592000)
这个计算结果和直接取平均值完全一致,适合需要明确拆分统计逻辑的场景。
注意事项
- 确保
start和end的时间戳准确覆盖你需要的过去一个月区间 - 替换
你的指标名称为实际上报的指标标识符 - 确认API密钥和应用密钥拥有指标查询的权限
内容的提问来源于stack exchange,提问作者augray
相关产品推荐
相关产品推荐

