仪表板活动日志:了解哪些 Kibana 仪表板会被使用

39 阅读7分钟

作者:来自 Elastic Teresa Alvarez Soler, Rudolf Meijering

Kibana 现在会记录谁查看、编辑或删除了每个仪表板、耗时多久以及哪些操作失败了,这样你就可以在任何人报告之前发现出现故障的仪表板。

通过单一解决方案观察、保护和搜索你的数据。从应用监控到威胁检测,Kibana 都是满足关键使用场景的多功能平台。立即开始你的14 天免费试用。

Kibana 会记录每次仪表板查看、编辑、创建、删除和刷新操作,以及执行每项操作的用户。在 kibana.yml 中添加两行配置即可启用此日志记录功能。当你在 Discover 中打开对应索引后,就可以找到 30 天内无人打开的仪表板,并按照加载时间对它们进行排名,或者查看今天早上导致故障的仪表板是谁编辑的。仪表板活动日志目前可在自管理集群上运行,Elastic Cloud 支持即将推出。

仪表板活动日志与 Kibana 审计日志有何不同

仪表板活动日志和 Kibana 审计日志都会记录关于用户操作的结构化日志,但它们回答的是不同的问题。

Kibana 审计日志仪表板活动日志
回答的问题谁访问了什么内容,以及什么时候访问的哪些仪表板被使用,以及它们的性能如何
面向对象安全和合规团队Kibana 管理员和仪表板所有者
跟踪内容Kibana 中与安全相关的事件五种仪表板操作:创建、更新、删除、查看、刷新
启用方式在 kibana.yml 中使用其自身的设置在 kibana.yml 中设置 user_activity.enabled: true

仪表板活动日志记录了哪些内容

用户活动服务会在用户每次与仪表板交互时记录结构化事件。每个事件都会记录_发生了什么_、针对哪个仪表板_以及_谁执行了该操作。系统会跟踪以下五种操作:

操作触发时机是否包含耗时
dashboard_create创建仪表板时否
dashboard_update保存编辑内容时否
dashboard_delete删除仪表板时否
dashboard_view用户打开仪表板时是,从打开仪表板到离开仪表板期间的停留时间
dashboard_refresh用户更改筛选条件或时间范围,或者运行自动刷新时是,刷新耗时

dashboard_view 事件通常也会触发刷新。

每个事件都包含相同的核心字段,其中有两个字段会根据条件出现:

字段包含的内容出现于
user.name执行操作的用户名称每个事件
user.email用户的电子邮件地址每个事件
user.roles分配给用户的角色每个事件
object.name仪表板名称每个事件
object.id仪表板 ID每个事件
kibana.space仪表板所属的 Kibana 空间每个事件
client.ip请求来源的 IP 地址每个事件
event.action发生的五种操作中的哪一种每个事件
event.outcome操作成功还是失败每个事件
event.duration操作耗时,单位为纳秒dashboard_view 和 dashboard_refresh
error.type / error.message发生故障时的错误类型和错误消息event.outcome 为 failure 的事件

Kibana 如何记录仪表板活动

在底层,Kibana 插件会通过核心客户端从浏览器或服务器报告事件,经过验证的事件会被写入专用日志记录器。不会向第三方发送任何数据;由于事件采用标准 JSON 日志格式,因此你可以控制它们发送到哪里以及如何进行摄取。

你可以利用仪表板使用数据做什么

仪表板活动数据可以回答以下五个运营问题,否则就需要进一步调查:

  • 清理未使用的仪表板。筛选出没有任何 dashboard_view 事件的仪表板。如果没人查看它,就将其归档。对于管理数千个仪表板的客户来说,这一点至关重要。

  • 排查性能问题。event.duration 字段会准确告诉你每次仪表板加载或刷新的耗时。按照耗时排序,就可以找到加载最慢的仪表板。

  • 编辑历史记录。每次创建、更新和删除操作都会记录执行修改的用户。你不再需要猜测是谁修改了关键仪表板,也不必寻找修改发生的时间。

  • 规划容量。找出在高峰时段运行重量级查询的用户。如果某个用户的自动刷新每 10 秒就对集群发起一次高负载请求,你会看到这一情况。

  • 主动监控错误。通过 error.type 和 error.message 字段,可以立即发现产生错误的仪表板,因此你不需要等待用户报告问题。

如何在 Kibana 中启用仪表板活动日志

在 kibana.yml 中添加两行配置(该服务默认处于禁用状态):

`

1.  user_activity:
2.    enabled: true

`Lobster AI

事件会立即开始流动,并使用默认的 JSON 控制台输出器。你可以使用 Kibana 已经采用的相同日志记录配置架构来自定义输出器,并筛选特定操作:

`

1.  user_activity:
2.    enabled: true
3.    appenders:
4.      console_json_default_appender:
5.        type: console
6.        layout:
7.          type: json
8.    filters:
9.      - policy: keep
10.        actions: [dashboard_view, dashboard_refresh]

`Lobster AI![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

将这些日志发送到 Elasticsearch 索引中(例如通过 Filebeat),你就拥有了一个可以完全查询的仪表板使用情况数据集。

如何在 Discover 中查询仪表板活动

活动日志建立索引后,打开 Discover,并将其指向你的用户活动索引模式。你会立即看到每次仪表板交互对应的结构化事件,并且可以按照操作类型、用户、仪表板名称和时间范围进行筛选。

从这里开始,你可以快速回答下面示例中的具体问题。

一个仪表板被查看了多少次?

在 Discover 查询编辑器中用自然语言输入你的问题,然后按下 Cmd+J,即可自动生成 Elasticsearch 查询语言(ES|QL)查询,如下所示:

`

1.  FROM user-activity-logs
2.  | WHERE object.name == "OTel Host Metrics Overview" AND event.action == "dashboard_view"
3.  | STATS COUNT(*)

`Lobster AI

最近 30 天哪些仪表板的查看次数为零?

没有任何活动的仪表板不会出现在日志中,因此你无法直接筛选查看次数为零的仪表板。相反,这个查询采用反向方式,提取过去一年中创建且尚未删除的所有仪表板,然后检查其中哪些仪表板在最近 30 天内没有任何查看记录。

`

1.  FROM user-activity-logs
2.  | WHERE event.action IN ("dashboard_create", "dashboard_delete")
3.    OR (event.action == "dashboard_view" AND @timestamp > NOW() - 30 days)
4.  | STATS 
5.      creates = COUNT_DISTINCT(CASE(event.action == "dashboard_create", 1, NULL)),
6.      deletes = COUNT_DISTINCT(CASE(event.action == "dashboard_delete", 1, NULL)),
7.      recent_views = COUNT_DISTINCT(CASE(event.action == "dashboard_view", 1, NULL))
8.    BY object.id, object.name
9.  | WHERE creates > 0 AND deletes == 0 AND recent_views == 0
10.  | SORT object.name ASC

`Lobster AI![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

哪些仪表板加载时间超过 10 秒?

注意,event.duration 以纳秒为单位记录,因此查询会先将其转换为秒,然后再进行筛选:

`

1.  FROM user-activity-logs
2.  | WHERE event.action == "dashboard_refresh"
3.  | EVAL duration_seconds = event.duration / 1000000000
4.  | STATS max_duration_secs = MAX(duration_seconds) BY object.name
5.  | WHERE max_duration_secs >10
6.  | SORT max_duration_secs DESC

`Lobster AI

哪些仪表板正在产生错误,以及具体哪里出现了故障?

此查询会显示在 dashboard_refresh 事件期间有一个或多个面板产生错误的仪表板,这样你就可以快速发现重复出现的问题,并确定修复工作的优先级:

`

1.  FROM user-activity-logs
2.  | WHERE event.outcome == "failure"
3.  | STATS errors = COUNT(*) BY object.name, metadata.errors.error

`Lobster AI

使用 AI 聊天构建仪表板使用情况概览

我们计划在活动日志中同时提供开箱即用的仪表板,但与此同时,你可以在 Kibana 中打开 AI 聊天,让它根据你的用户活动数据创建一个仪表板,而不必手动构建可视化内容。

生成的仪表板可以让你一目了然地了解查看次数最多的仪表板、使用最频繁的用户、性能最慢的面板以及最近的错误;也就是说,这正是大规模部署所需要的运营视图。

开始使用仪表板活动日志

用户活动日志已在 Kibana 9.5 中提供。首先启用该服务。然后将日志发送到一个索引中,并开始构建团队一直需要的运营可见性。有关完整的配置详情和完整的事件架构,请参阅用户活动文档。

原文:Dashboard activity logs: Find unused Kibana dashboards | Elasticsearch Labs