普罗米修斯一段时间后啥也没返回

Posted

技术标签:

【中文标题】普罗米修斯一段时间后啥也没返回【英文标题】:Prometheus return nothing after while普罗米修斯一段时间后什么也没返回 【发布时间】:2021-05-17 19:06:50 【问题描述】:

我们正在使用 Prometheus 和 Grafana 进行监控,并且我们有一个响应时间面板,但是我注意到在缺少指标并且面板中有很多差距(仅针对响应时间面板)之后它们又回来了一旦我重新启动应用程序(在 openshift 中重新部署它)。该服务是用 Go 编写的,收集响应时间的逻辑非常简单。

我们声明了指标

var (
    responseTime = promauto.NewSummaryVec(prometheus.SummaryOpts
        Namespace: "app",
        Subsystem: "rest",
        Name:      "response_time",
    , []string
        "path",
        "code",
        "method",
    )
)

并将其填充到我们的处理程序中


func handler(.......) 
        start := time.Now()
        // do stuff
        ....

        code := "200"
        path := r.URL.Path
        method := r.Method
        elapsed := float64(time.Since(start)) / float64(time.Second)
        responseTime.WithLabelValues(path, code, method).Observe(elapsed)
 

Grafana 面板中的查询如下:

sum(rate(app_rest_response_time_sumpath='/v4/content'[5m]) / 
rate(app_rest_response_time_countpath='/v4/content'[5m])) by (path)

但是结果是这样的!!

谁能解释我们做错了什么或如何解决这个问题?我们是否可能面临某种溢出问题(平均 RPS 约为 250)?我怀疑这是因为这种情况经常发生在具有较高 RPS 和响应时间的路由上!

【问题讨论】:

在 Prometheus 中运行查询时是否看到相同的行? 不,Prometheus 和 Grafana 中的图是一样的 【参考方案1】:

Prometheus 正常连续记录指标,如果你查询它,它会返回它在你查询的时间收集的所有指标。

如果查询时没有指标,通常有以下三个原因:

指标不存在(它发生在实例重新启动并且您有一组动态标签并且尚未请求您查询的标签值(在您的情况下没有查询path='/v4/content')。在在这种情况下,您应该会看到同一作业的其他指标(至少 up)。 Prometheus 在存储指标时遇到问题。 (请参阅该时间范围内 prometheus 的日志文件)。 Prometheus 在该时间范围内停机,因此未收集任何指标。 (在这种情况下,您应该在该时间范围内根本没有任何指标。

【讨论】:

我要添加到该列表中: • Prometheus 在抓取指标时遇到问题。如果实例正在经历高负载,Prometheus 是否有可能在超时之前没有完成它的抓取?

以上是关于普罗米修斯一段时间后啥也没返回的主要内容,如果未能解决你的问题,请参考以下文章

普罗米修斯获得整数计数

用于普罗米修斯的弹簧启动执行器与千分尺混合返回空结果

Android webview 在“#”字符后啥也不渲染

普罗米修斯比率与除法不起作用

在 vue 3 中获取会停止后端,并且在一次正常工作后啥也不做

grafana 使用基于指标的普罗米修斯查询定义变量