Grafana中查询的日期计算

Grafana中查询的日期计算,grafana,prometheus,Grafana,Prometheus,(见下文更新、更清晰的解释:转至“2019-09-20更新”) 我正在寻找Grafana使用变量标签(YYYY-MM-DD日期,以及相对于当前日期的日期)查询我的Prometheus数据源的方法 我想看看过去的4天,我可以创建一个Grafana图,其中包含4个具有正确标签的查询,如下所示,这将起作用,但我需要每天更新我的图: myapp\u metric\u foo{task\u date=“2019-09-16”} myapp\u metric\u foo{task\u date=“2019

(见下文更新、更清晰的解释:转至“2019-09-20更新”)

我正在寻找Grafana使用变量标签(YYYY-MM-DD日期,以及相对于当前日期的日期)查询我的Prometheus数据源的方法

我想看看过去的4天,我可以创建一个Grafana图,其中包含4个具有正确标签的查询,如下所示,这将起作用,但我需要每天更新我的图:

  • myapp\u metric\u foo{task\u date=“2019-09-16”}
  • myapp\u metric\u foo{task\u date=“2019-09-17”}
  • myapp\u metric\u foo{task\u date=“2019-09-18”}
  • myapp\u metric\u foo{task\u date=“2019-09-19”}
为了避免这种情况,我正在寻找一些日期计算公式,如:
now-1day | format_date“YYYY-MM-DD”

因此,我的Grafana图形查询示例是:

myapp_tasks_total{task_date="2019-09-12",status="done"} 3
myapp_tasks_total{task_date="2019-09-13",status="done"} 1
myapp_tasks_total{task_date="2019-09-15",status="done"} 2
myapp_tasks_total{task_date="2019-09-16",status="done"} 1
myapp_tasks_total{task_date="2019-09-17",status="running"} 1
myapp_tasks_total{task_date="2019-09-17",status="done"} 2
myapp_tasks_total{task_date="2019-09-18",status="running"} 3
myapp_tasks_total{task_date="2019-09-18",status="done"} 2
myapp_tasks_total{task_date="2019-09-19",status="new"} 2
myapp_tasks_total{task_date="2019-09-19",status="done"} 1
myapp_tasks_total{task_date="2019-09-20",status="done"} 1
  • myapp_metric_foo{task_date=“{{now | format_date“YYYY-MM-DD”}}}
  • myapp_metric_foo{task_date=“{{now-1天}格式_date“YYYY-MM-DD”}}
  • myapp_metric_foo{task_date=“{{now-2天}格式_date“YYYY-MM-DD”}}
  • myapp_metric_foo{task_date=“{{now-3天}格式_date“YYYY-MM-DD”}}
我在格拉法纳找不到任何允许这种事情发生的东西

另一个想法是通过GrafanaAPI从外部脚本更新现有图形


2019-09-20更新:

看起来我需要对这个应用程序做更多的解释

应用程序上下文 插入指令的应用程序myapp运行任务/作业(假设计算作业可能需要一些时间)。 每个任务都有一个
任务\u日期
(提交时的id。在任务创建时设置:它永远不会更改),并且可以处于以下三种状态之一:

  • new
  • 正在运行
  • done
当普罗米修斯抓取我的应用程序时,我的应用程序会告诉普罗米修斯有多少任务:

  • 处于新状态,按任务日期分组
  • 处于运行状态,按任务日期分组
  • 处于状态
    done
    ,按
    task\u date
应用程序删除7天以上的
done
任务

应用程序数据 假设应用程序在2019-09-19 14时00分的数据库中有以下任务:

+----+------------+---------+---+
| ID | task_date  | status  | … |
+----+------------+---------+---+
| 42 | 2019-09-12 | done    | … |
| 43 | 2019-09-12 | done    | … |
| 44 | 2019-09-12 | done    | … |
| 45 | 2019-09-13 | done    | … |
| 46 | 2019-09-15 | done    | … |
| 47 | 2019-09-15 | done    | … |
| 48 | 2019-09-16 | done    | … |
| 49 | 2019-09-17 | running | … |
| 50 | 2019-09-17 | done    | … |
| 51 | 2019-09-17 | done    | … |
| 52 | 2019-09-18 | new     | … |
| 53 | 2019-09-18 | running | … |
| 54 | 2019-09-18 | running | … |
| 55 | 2019-09-18 | done    | … |
| 56 | 2019-09-18 | done    | … |
| 57 | 2019-09-19 | new     | … |
| 58 | 2019-09-19 | new     | … |
| 59 | 2019-09-19 | running | … |
+----+------------+---------+---+
2019年9月19日18时,myapp向普罗米修斯披露的指标为(基于文本的格式):

让我们假设应用程序发生以下情况:

  • 2019-09-18日提交的任务开始执行(从
    新建
    移动到
    运行
  • 2019-09-19天提交的任务完成(从
    运行
    移动到
    完成
  • 删除任务日期早于7天的任务(此处为2019-09-12的任务)
  • 2019-09-20 00h43m提交新任务
几小时后,2019-09-20 02时00分,新的暴露指标输出将为:

myapp_tasks_total{task_date="2019-09-12",status="done"} 3
myapp_tasks_total{task_date="2019-09-13",status="done"} 1
myapp_tasks_total{task_date="2019-09-15",status="done"} 2
myapp_tasks_total{task_date="2019-09-16",status="done"} 1
myapp_tasks_total{task_date="2019-09-17",status="running"} 1
myapp_tasks_total{task_date="2019-09-17",status="done"} 2
myapp_tasks_total{task_date="2019-09-18",status="running"} 3
myapp_tasks_total{task_date="2019-09-18",status="done"} 2
myapp_tasks_total{task_date="2019-09-19",status="new"} 2
myapp_tasks_total{task_date="2019-09-19",status="done"} 1
myapp_tasks_total{task_date="2019-09-20",status="done"} 1
我的Grafana图(visualization type=graph)将使用以下4个ProMQ查询(4,因为我只想查看最后的4):

  • 询问
    • 指标:
      myapp\u任务总数{task\u date=“2019-09-17”}
    • 图例:
      {{status}}三天前提交的任务
  • 问题B
    • 指标:
      myapp\u任务总数{task\u date=“2019-09-18”}
    • 图例:
      {{status}}两天前提交的任务
  • 查询C
    • 指标:
      myapp\u任务总数{task\u date=“2019-09-19”}
    • 图例:
      {{status}}昨天提交的任务
  • 查询D
    • 指标:
      myapp\u任务总数{task\u date=“2019-09-20”}
    • 图例:
      {{status}今天提交的任务
这将产生最多4*3=12条曲线(取决于每天存在多少不同的状态),这将帮助我跟踪应用程序负载(任务数量)和速度(完成时间)

问题 普罗米修斯仪器部分对我来说不是问题:我知道如何从我的数据库中获取数据,以及如何将数据公开给普罗米修斯

我的问题是关于Grafana需要的PromQL查询:我上面给出的4个查询只有在2019-09-20访问Grafana时才相关:我需要一种方法来动态“更改”每个查询中的
task\u date=
条件

我希望Grafana有一个定制的DSL,可以让我告诉它:

嘿,把你的
$\u带到
变量,删除x天并将其格式化为“YYYY-MM-DD”

类似于:
{{$\u to-x*86400000 | format|u date“YYYY-MM-DD”}

(1天=86400000毫秒)


另一个想法是手动创建图形,并通过Grafana API从外部脚本定期更新它…

,因为它们具有不同的标签值(`task\u date``),它们被视为不同的度量。必须删除尺寸标注(标签)

在请求时移除标签

具有空值。这假设它不会创建重复的度量

label_replace(up{job="myapp_metric_foo, "task_date", "", "task_date", ".*")
或:

在摄入时取下标签

在您的普罗米修斯配置中,您可以使用删除标签

metric_relabel_configs:
- regex: 'container_label_com_amazonaws_ecs_task_arn'
  action: labeldrop

依我看,你最好在吃东西的时候把它放下。每天都有不同的标签是没有意义的;除非它是一种非常长的计划作业。

因为它们有不同的标签值(`task\u date``),所以它们被认为是不同的度量标准。必须删除尺寸标注(标签)

在请求时移除标签

具有空值。这假设它不会创建重复的度量

label_replace(up{job="myapp_metric_foo, "task_date", "", "task_date", ".*")
或:

摄取时移除标签