Grafana中查询的日期计算
(见下文更新、更清晰的解释:转至“2019-09-20更新”) 我正在寻找Grafana使用变量标签(YYYY-MM-DD日期,以及相对于当前日期的日期)查询我的Prometheus数据源的方法 我想看看过去的4天,我可以创建一个Grafana图,其中包含4个具有正确标签的查询,如下所示,这将起作用,但我需要每天更新我的图: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
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”}}
2019-09-20更新: 看起来我需要对这个应用程序做更多的解释 应用程序上下文 插入指令的应用程序myapp运行任务/作业(假设计算作业可能需要一些时间)。 每个任务都有一个
任务\u日期
(提交时的id。在任务创建时设置:它永远不会更改),并且可以处于以下三种状态之一:
new
正在运行
done
- 处于新状态,按任务日期分组
- 处于运行状态,按任务日期分组
- 处于状态
,按done
task\u date
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提交新任务
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}今天提交的任务
- 指标:
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", ".*")
或:
摄取时移除标签