我有一个作业调度引擎,可以在各种机器上运行作业。我有一个待处理的作业队列作为流(通常等待执行的数千个作业中至少有十万个)。我有一种算法可以在不同的计算机上执行作业。
要跟踪的核心指标之一是请求作业要安排执行多长时间(通常少于5分钟,但由于各种原因最多可能需要1个小时)。
是否有办法绘制使用Prometheus + Grafana(或Prometheus和其他解决方案如Redis的组合)当前未分配工作已经存在多长时间的百分位数?我想知道什么是平均等待时间,即工作等待时间的95%和99%。
问题是直到作业计划执行之前,不会生成任何事件,并且我们等待时间越长,作业将进入的位置越高。此外,由于要安排工作的时间可能非常不同(并非每个工作都相同),因此仅依靠过去很少的工作需要多长时间来安排工作是错误的。
一种简单的方法将遍历所有待处理的作业并连续计算百分位数,但这将非常昂贵。
答案 0 :(得分:0)
Prometheus直方图实现假定一组固定的桶(例如,少于1秒,少于2秒,少于5秒等)只能递增(以及上面的所有桶)。
在您的情况下,您有2个选择:
因此,您还有其他选择: