#9101·jaeger

[错误]: Elasticsearch/OpenSearch 指标在 ratePer > 10m 时返回不完整的调用和错误率序列

作者: HESleagacy创建于 2026年7月24日更新于 2026年9月15日
标签bugarea/storagestorage/elasticsearch

发生了什么事?

GET/api/meters/calls'和api/meters/errors'接受`ratePer'参数。 有了"普罗米修斯"(Prometheus)的度量衡后端,它设置了"PromQL"速率窗口,因此任何值都有效. 有了“弹性搜索”或“OpenSearch”的后端,返回的系列第一部分的“速率”超过10分钟,没有值。

两个后端都使用 " 内部/储存/计量库/弹性搜索 " 。 在那里, " 计算时程 " (`reader.go')总是在请求开始前10分钟开始弹性搜索查询,无论 " 速率 " 是:

开始 扩展起步时间: = startTime.Add (-10 * time. 分钟)


`calcCallRate'(`processor.go')在每一点的桶前需要`ceil(ratePer/step)'并返回NaN直至它得到它们。 使用`ratePer=30m'或`1h',只取出10分前桶,因此无法计算要求范围内的最早点数。

误差率是从调用率( " Get ErrorRates " - " Calculaulation ErrorRates " )来计算的,因此它们受到同样的影响。

Jaeger UI中的“监视器”标签总是发送`ratePer=10m',所以今天不受影响。 直接API呼叫者是.

* 复制步骤

1. 从 " Docker-组成/监视器 " 起用弹性研究测量后端启动SPM堆:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
JAEGER VERSION=2.21.0 Docker 作曲-f ZZTERM4 作曲-作曲-弹性研究. yml up-d
  1. 让微镜产生至少30分钟的痕迹,因此Elasticsearch将数据保存在被询问窗口之前。
  2. 过去10分钟的电话要求费,以及15分钟的电话要求: {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 卷曲-"http://localhost:16686/api/meters/ calls? service=frontend& lookback=60000&step=60000&ratePer=9000"? \ jq - r'.meters [0].meteric Points []\ (.timestamp)\ (.ugeValue.doubleValue)" (英语).
4. 使用10分速率窗口(`ratePer=600000')运行同一请求,以进行比较。

QQratePer=9000' (15m):** 窗口中最早的点没有值.

<img宽="1363"高="378" alt="Image" src="https://GitHub.com/user-attachments/assets/3121aea4-b962-4ec8-9145-f7c882fa706f" / >

QQratePer=600000' (10m), 同一个窗口:** 每个点都有值.

<img宽="1363"高="378" alt="Image" src="https://GitHub.com/user-attachments/assets/ef4f4746-5565-4295-9527-2b57864b505e"/".

预期行为

查询应在请求开始前至少到达“ ratePer” , 因此请求范围内的每个返回点都有一个值, 匹配 Prometheus 后端 。

QQ 存储后端

弹性搜索, OpenSearch( 计量商店)

贾格后端版本

v2.8.0至v2.21.0(最晚)和 " 主要 " 。 硬码窗口被引入于#7229.

内容来源: jaegertracing/jaeger