在普罗米修斯中按年/月/日分组数据

Posted

技术标签:

【中文标题】在普罗米修斯中按年/月/日分组数据【英文标题】:Group data by year/month/day in prometheus 【发布时间】:2019-02-10 00:20:20 【问题描述】:

正如标题所说,我正在寻找一种方法来获取时间序列的最大值,该时间序列每天都会重置。完成此任务后,我想对这些值进行总和,以获得每月/每年的值。在 Prometheus 中实现这一目标的最佳方法是什么?

【问题讨论】:

【参考方案1】:

正如我在 prometheus-developers 上的帖子中所述,这是一个可能的选项,尽管它远非可读:

upjob="prometheus" + ignoring(year, month, day) group_right
  count_values without() ("year", year(timestamp(
    count_values without() ("month", month(timestamp(
      count_values without() ("day", day_of_month(timestamp(
        upjob="prometheus"
      )))
    )))
  ))) * 0

用您需要的任何系列选择器替换 upjob="prometheus" 的两个实例。不过,不知道这有多有效。 :o)

【讨论】:

您能解释一下这背后的想法吗?无论如何感谢您的解决方案 count_values_without(...) 块的全部意义在于获得具有相同标签的时间序列,加上 yearmonthday 作为原始时间序列(和一个垃圾值) .然后您执行+ ignoring(year, month, day) group_right <timeseries_with_year_month_day> * 0 以将yearmonthday 标签附加到原始时间序列的值。现在这个新的时间序列具有标识每一天的标签,您可以通过按这些标签过滤以任何您想要的方式按天聚合。 如果我们假设upjob="prometheus" 是一个计数器...我可以将上面的内容包裹在sum(increase( what-you-have-above )) 周围以绘制它吗?当我这样做时......我收到一个错误Error executing query: invalid parameter 'query': 2:3: parse error: expected type range vector in call to function "increase", got instant vector 我应该说“用 date. So you'd need sum(increase(your_counter[5m]))` 聚合的任何 表达式 替换 upjob="prometheus" 的两个实例在上面的查询中出现两次(替换upjob="prometheus")。

以上是关于在普罗米修斯中按年/月/日分组数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询所有看过相同电影的用户

MySQL按年/月/周/日/小时分组查询排序limit判空用法

我需要从结构为 yyyyMMddHHmmss 20170227141500 的时间戳中按年和月分组

普罗米修斯缺席函数

按年/月统计和分组数据

普罗米修斯的故事