有时普罗米修斯的查询中缺少一些数据



我有3台Ubuntu机器。它们每个都安装了带有node_exporter的普罗米修斯。当我试图获取网络统计数据时,我会查询

  • node_network_receive_bytes_total
  • 节点网络传输字节总数
  • node_network_receive_drop_total
  • node_network_transmit_drop_tal
  • node_network_receive_errs_total
  • 节点网络传输错误总数
  • node_network_receive_packets_total
  • node_network_transmit_packets_tal

在通过HTTP API的for循环中一个接一个。

在大多数情况下,返回的统计数据都很好。但是,在某些情况下,一个节点的数据将丢失。

例如,在1轮中,查询node_network_receive_bytes_total将返回所有数据。但node_network_receive_packets_total中缺少第三个节点的数据。

我该如何避免这个问题?或者,如果我发现一些数据丢失,我只是重新发送查询吗?

我认为发生这种情况是因为当我试图查询时,实际数据尚未保存到prometheus。

想想这个场景,prometheus从每个节点上的node_exporters中提取数据。这些拉动动作并不是同时进行的。当我发送查询时,prometheus可能已经完成了从2个节点提取最新数据,但没有从第3个节点提取。因此,普罗米修斯无法计算第三个节点的时间戳值。这导致查询中没有返回第三个节点的数据。

顺便说一句,从prometheus的源代码来看,即使您在查询请求中没有指定时间戳,prometheus也会生成一个时间戳。

我找到了两个解决这个问题的方法:

  1. 从现在起将查询请求的time参数设置为1秒前。通过这种方式,您总是在查询";旧的";数据,因此无需担心数据不存在。然而,缺点是你得到的数据不是很准确,因为你总是像现在一样使用1秒前的数据
  2. 只需再次向普罗米修斯发送查询即可

相关内容

  • 没有找到相关文章

最新更新