Grafana,ElasticSearch - 计算两个流任务之间经过的时间图

Posted

技术标签:

【中文标题】Grafana,ElasticSearch - 计算两个流任务之间经过的时间图【英文标题】:Grafana, ElasticSearch - Graph of calculated elapsed time between two flow tasks 【发布时间】:2021-06-15 15:30:30 【问题描述】:

我是 Grafana 和 ElasticSearch 的新手。 我们在 ES 中有数据,其中包含具有多个微服务的处理流的日志记录。这些微服务有几种类型。 为简单起见,我们假设有两种类型的微服务“task1”和“task2”,每个处理流都有一个唯一的 traceId 值。 数据如下:

traceId: 'job1', service: 'task1', eventTime: '2021-02-19 12:01:00'
traceId: 'job2', service: 'task1', eventTime: '2021-02-19 12:02:00'
traceId: 'job1', service: 'task2', eventTime: '2021-02-19 12:05:00'
traceId: 'job2', service: 'task2', eventTime: '2021-02-19 12:10:00'

我想在我们的仪表板中添加一个 grafana 面板,该面板将包含每个处理流程(“job1”、“job2”...)的经过时间(“task1”和“task2”之间的时间差)。 我搜索了类似的问题并在how to create query which can calculate time difference? 中找到了讨论,但我不确定那里描述的解决方案是否适合我的问题,并且我找不到添加那里描述的聚合过滤器的方法。我想这远远超出了我目前的知识。 任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

我收到了一些离线提示,以下看起来是一个不错的方法(但绝对不是直截了当的恕我直言):

在查询选项卡和转换选项卡中使用原始数据,选择“分组依据”翻译,然后在所需字段上使用“分组依据”翻译(上例中的“traceId”)和“计算”翻译以“Range”作为统计字段的时间字段(上例中的“eventTime”)。这将按 traceId 字段对数据进行分组,并在表格中显示具有相同 traceId 的记录的较高值和较低值之间的差异(范围)。

我会尝试“玩”它,看看我是否能得到想要的图表——它可能会帮助其他有相同或类似问题的人,所以我发布这个至少作为解决这个问题的方向。

【讨论】:

【参考方案2】:

我最近尝试的另一种方法是将bucket scriptGroup By 选项结合使用。 比如:

metric(1) - Min eventTime
metric(2) - Max eventTime
metric(3) - Bucket Script with the following options:
                      var1 Min eventTime
                      var2 Max eventTime
                Script:  params.var2 - params.var1
Group By:     traceId 
and then by:  service

然后我使用转换 Organized fields 删除 Min 和 MaX 字段并将“Bucket Script”重命名为“Time Difference”之类的名称

【讨论】:

以上是关于Grafana,ElasticSearch - 计算两个流任务之间经过的时间图的主要内容,如果未能解决你的问题,请参考以下文章

如何在Grafana中查询Elasticsearch

如何从 ElasticSearch 创建两个级别的 Grafana 变量?

Grafana,ElasticSearch - 计算两个流任务之间经过的时间图

Grafana - 我们如何加入来自 TimescaleDB 和 ElasticSearch 的数据?

Grafana与Elasticsearch

Grafana中如何使用Prometheus数据源监控elasticsearch