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

作者:来自 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_viewdashboard_refresh
error.type / error.message 发生故障时的错误类型和错误消息 event.outcomefailure 的事件

Kibana 如何记录仪表板活动

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

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

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

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

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

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

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

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

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

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

yaml 复制代码
`

1.  user_activity:
2.    enabled: true

`Lobster AI

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

yaml 复制代码
`

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)查询,如下所示:

sql 复制代码
`

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 天内没有任何查看记录。

less 复制代码
`

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 以纳秒为单位记录,因此查询会先将其转换为秒,然后再进行筛选:

vbnet 复制代码
`

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 事件期间有一个或多个面板产生错误的仪表板,这样你就可以快速发现重复出现的问题,并确定修复工作的优先级:

vbnet 复制代码
`

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

相关推荐
Elasticsearch1 天前
从 22.61GB 到 15.63GB:Elasticsearch 9.5 如何用「混合存储」重新定义日志数据库
elasticsearch
Elasticsearch1 天前
用于自托管 LLM 调优的 vLLM Prometheus 指标:TTFT、KV Cache 和 GPU 利用率
elasticsearch
Sayai1 天前
Elasticsearch 快照备份到 NAS(NFS)实战:SLM 自动化 + 365 天保留策略
elasticsearch·自动化·jenkins
JavaPub-rodert2 天前
写软著 - Copyright Forge Skill 完整闭环改造方案
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客2 天前
从建议到修复的 4 个阶段:使用 Elastic Workflows 实现人在回路中的自动化
运维·数据库·人工智能·后端·elasticsearch·ai·自动化
Elasticsearch2 天前
使用 OpenTelemetry 进行 Android 应用监控:从点击到后端的分布式追踪
elasticsearch
Elasticsearch2 天前
安心睡过凌晨 3 点的告警:在 Red Hat OpenShift 上使用 Elastic 实现自动化故障事件响应
elasticsearch
Elasticsearch3 天前
将 1,100 个文件迁移到 Redux Toolkit v2,同时避免冻结 Kibana 单体仓库
elasticsearch
Elasticsearch3 天前
从 582 毫秒的延迟峰值追踪到负责该服务的团队:使用 Kibana Discover
elasticsearch