Elastic/Kibana核心技术解析:Saved Objects机制详解

Elastic/Kibana核心技术解析:Saved Objects机制详解

kibana Your window into the Elastic Stack kibana 项目地址: https://gitcode.com/gh_mirrors/ki/kibana

一、Saved Objects基础概念

Saved Objects(持久化对象)是Kibana插件开发中的核心机制,它允许开发者将自定义实体持久化存储在Kibana系统索引中(通常称为.kibana索引)。这套机制本质上是一个面向Elasticsearch的对象文档映射器(ODM),为Kibana插件提供了类似传统数据库的持久化能力。

典型应用场景包括:

  • 仪表盘(Dashboards)配置存储
  • 可视化组件(Lens)定义
  • 画布工作区(Canvas workpads)
  • 索引模式(Index patterns)
  • 案例管理系统(Cases)
  • 机器学习任务(ML jobs)
  • 高级设置项(Advanced settings)

二、核心架构设计

1. 数据访问层

开发者通过SavedObjectClient进行对象管理,与常规Elasticsearch数据访问形成明确分层:

  • 业务数据 → 通过Data插件的Search服务访问
  • 配置/元数据 → 通过Saved Objects机制管理

数据存储对比示意图

2. 引用关系管理

为支持导入导出及多空间共享功能,Saved Objects需显式声明对象间的引用关系。设计原则为:

  • 父对象持有子对象引用(而非反向)
  • 导出父对象时自动包含子对象
  • 导出子对象时不包含父对象

三、版本兼容与迁移方案

当Saved Object类型发生破坏性变更时(如属性类型修改、字段删除等),必须编写迁移脚本确保旧数据兼容:

// 典型迁移示例
const migration = {
  '1.0.0': (doc) => {
    return { ...doc, attributes: { ...doc.attributes, newField: 'default' } };
  },
  '2.0.0': (doc) => {
    const { deprecatedField, ...rest } = doc.attributes;
    return { ...doc, attributes: rest };
  }
};

四、安全控制体系

1. 权限模型

  • Kibana特权模型:控制Saved Objects访问
  • Elasticsearch特权模型:控制常规数据索引访问

2. 空间感知(Space Awareness)

  • 对象创建于特定空间
  • 可共享到其他空间

3. 细粒度权限控制

  • 基于角色的访问控制(RBAC)
  • 按对象类型设置读/写权限
  • 未来将支持对象级安全(OLS)特性

五、高级特性解析

1. 存储优化策略

默认情况下所有类型共享单个索引,对于以下场景建议使用独立索引:

  • 对象包含大量独特字段
  • 预计会产生海量对象实例
  • 典型案例:Reporting、Task Manager
// 配置独立索引示例
{
  name: 'custom_type',
  indexPattern: '.kibana_custom'
}

2. 搜索限制说明

由于存储在系统索引中,Saved Objects无法像常规数据那样被搜索。这也是为什么会出现"[X] as data"这类表述的原因。

3. 存储模式对比

| 模式 | 描述 | 典型场景 | |-------------|-----------------------------|-------------------------| | By Reference | 通过引用ID关联独立对象 | 可视化组件保存到库后再添加到仪表盘 | | By Value | 对象完整数据嵌套在父对象中 | 未保存的临时可视化直接嵌入仪表盘 |

六、多空间共享机制

自Kibana 7.12起支持的共享策略:

  1. multiple-isolated:对象仅存在于单一空间
  2. multiple:对象可存在于多个空间
  3. agnostic:对象全局存在于所有空间

迁移建议:

  • 新类型:直接选用multiple/multiple-isolated
  • 旧类型(legacy):需按规范迁移至新命名空间类型

七、最佳实践建议

  1. 引用设计:始终保持父→子的单向引用关系
  2. 版本管理:任何破坏性变更必须配套迁移脚本
  3. 安全规划:提前设计好空间和权限策略
  4. 性能考量:海量数据对象应考虑独立索引
  5. 用户体验:合理选择by value/by reference存储模式

通过深入理解Saved Objects机制,开发者可以构建出更健壮、更易维护的Kibana插件,同时为用户提供一致的数据管理体验。

kibana Your window into the Elastic Stack kibana 项目地址: https://gitcode.com/gh_mirrors/ki/kibana

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gitblog_00881

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值