使用 Elastic 工作流监测 Kibana 仪表板的浏览情况

了解如何使用 Elastic 工作流每 30 分钟收集一次 Kibana 仪表板视图指标,并将其索引到 Elasticsearch 中,以便您可以基于自己的数据构建自定义分析和可视化。

Kibana 会跟踪每个仪表板的查看次数,但这些数据不会在任何内置仪表板中直接显示。在本文中,我们将使用 Elastic 工作流每 30 分钟自动收集这些数据,并将其索引到 Elasticsearch 中,这样我们就可以在此基础上构建自己的分析。

Elastic 工作流Kibana 内置的自动化引擎,允许您通过简单的 YAML 配置定义多步流程。每个工作流都可以按计划或事件触发,也可以作为 Elastic Agent Builder 中的工具触发,并且每个步骤都可以调用 Kibana API、查询 Elasticsearch 或转换数据。

我们将使用仪表板查看计数作为具体示例,但同样的模式也适用于通过 Kibana 已保存对象 API 公开的任何指标。

准备工作

[@portabletext/react] Unknown block type "block", specify a component for it in the `components.types` prop

在开始构建之前,我们先了解目前有哪些数据。Kibana 将其大部分配置和元数据作为已保存对象存储在专用的内部索引中。Kibana 通过这种方式跟踪的事项之一是仪表板查看次数,它使用一种名为“使用计数器”的特殊保存对象类型来实现。您可以在开发工具中直接查询它们:

响应类似如下:

counterName 字段是仪表板 ID,而 count 是该仪表板在特定日期的累计查看次数。Kibana 每天会为每个仪表板创建一个计数器对象;您可以在对象 ID 中看到日期后缀 (...viewed:server:20260310)。随着用户打开仪表板,计数在一天中不断增长。

我们不会在索引中复制这种每日文档模型,而是为每个工作流执行创建一个文档。每份文档都记录了该仪表板在捕获时当天的累计浏览量。

步骤 2:创建目标索引

我们需要一个索引来存储仪表板视图快照。以下命令创建了明确的映射,以便我们稍后进行聚合和可视化。在开发工具中运行此命令:

对 ID 和名称使用 keyword 映射可以进行聚合。使用 integer 来表示 view_count 是一个安全的默认设置,因为 Kibana 每天都会重置计数器,所以达到 32 位限制(一天内超过 20 亿次查看)并非实际需要担心的问题。它仍然支持数值运算,例如 maxavgmin 等。

步骤 3:创建工作流

前往 Stack Management > 工作流 > 新建工作流,然后粘贴以下工作流 YAML 配置:

在下一节中,我们将逐步分解工作流。

工作流如何运作

触发

工作流每 30 分钟按计划触发运行一次。这样我们就能获得时序数据,而不会对 API 造成过多压力。

fetch_dashboard_views

使用 kibana.request 调用 Kibana 已保存对象 API。无需进行身份验证设置:工作流引擎会根据执行上下文自动附加正确的标头。

index_each_dashboard(循环)

遍历由上一步返回的 saved_objects 数组。每次迭代中的当前项目均可作为 foreach.item。在循环内部,我们为每个仪表板运行两个嵌套步骤。

1. fetch_dashboard_name

通过调用 GET /api/saved_objects/dashboard/{id} 来解决人类可读的仪表板标题。我们添加了 on-failure: continue: true,以便如果仪表板被删除但仍有浏览计数器,循环就会继续,而不是导致整个执行失败。

2. index_doc

使用 POST /dashboard-views/_doc(无显式 ID)为每个文档建立索引,这样 Elasticsearch 就能自动生成 ID。这样,每次运行时都会创建一个新文档,从而随着时间推移构建浏览次数的历史记录,而不是覆盖之前的快照。

有两点值得注意:

  • captured_at 字段使用日期筛选器将时间戳格式化为 ISO 8601。如果没有它,值就会显示为 JavaScript 日期字符串,例如 Tue Mar 10 2026 05:03:47 GMT+0000,Elasticsearch 不会将其映射为日期。
  • view_count 使用 ${{ }} 语法和 | plus: 0 来保留数值类型。使用{{ }} 会将其显示为字符串,这将阻止在仪表板中进行数学运算。

UI 允许您可以很好地对每个工作流步骤进行故障排查。

第 4 步:构建统计仪表板

一旦工作流运行了几次并收集了数据,使用 dashboard-views Data view在 Kibana 中创建一个新的仪表板。

一些入门面板:

  • 按浏览量排列的顶级仪表板:使用柱形图,X 轴为 dashboard_name,Y 轴为 last_value(view_count)。这将显示每个仪表板当前的每日浏览量。
  • 随时间变化的浏览量:使用折线图,X 轴为captured_at,Y 轴为last_value(view_count),按 dashboard_name 细分。由于每次运行都会添加一个新文档,因此使用最后一个值来获取每个时间分桶的峰值计数,而不是重复计数的总和。
  • 当前快照:使用数据表和最新的 captured_at 来显示所有仪表板上最新的浏览量。

由于每个工作流都会创建一个新文档,因此您可以按时间范围进行筛选,以分析特定时段的活动、比较周与周之间的差异,或在仪表板低于浏览量阈值时发出警报。

结论

Elastic 工作流非常适合这种定期数据收集,因为源 (Kibana API) 和目标 (Elasticsearch) 都是原生的,这意味着无需管理任何凭据。工作流引擎会自动处理 kibana.requestelasticsearch.request 步骤的身份验证,因此您只需编写逻辑即可。

资源

这些内容对您有多大帮助?

没有帮助

有点帮助

非常有帮助

相关内容

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用