New

The executive guide to generative AI

Read more

UI 设置服务

编辑

UI 设置服务在服务器端和客户端都可用。

概述

编辑

UI 设置可通过“管理”中的“高级设置”页面进行配置,并控制 Kibana 的行为。uiSettings 存储在配置保存对象中,因此与其他的保存对象遵循相同的条件。

有几种方法可以配置高级设置

请记住,一旦添加了新的高级设置,如果不在核心中注册迁移,就无法更改或删除它。

通过“高级设置”UI 配置

编辑

uiSettings 服务是 Kibana 的“高级设置”UI 的编程接口。Kibana 插件使用此服务来扩展 Kibana UI 设置管理,为它们的插件提供自定义设置。

通过“高级设置”UI 进行配置仅限于有权访问“高级设置”页面的用户。没有权限更改这些值的用户默认使用为他们所在空间配置的设置。配置保存的对象可以在空间之间共享。

通过 UI 设置覆盖进行配置

编辑

[预览] 此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力修复任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。 当在 kibana.yml 中将设置配置为覆盖时,它将覆盖配置保存对象中存储的任何其他值。如果覆盖配置错误,将导致配置验证失败并阻止 Kibana 启动。覆盖适用于所有空间和用户,并且该选项将在“高级设置”页面中禁用。我们将其称为“全局”覆盖。

为此,请使用顶级 uiSettings 键,例如

# Display times in UTC
uiSettings:
  overrides:
    "dateFormat:tz": "UTC"

客户端使用

编辑

在客户端,uiSettings 服务直接从 core 公开,并且客户端允许插件访问 Elasticsearch 中存储的 config 条目。

为了提高性能,uiSettings 被缓存。任何需要刷新缓存的更改都应该注册一个指令,以便在使用 requiresPageReload 参数在“高级设置”中配置设置时重新加载页面。

import { CoreSetup, Plugin } from 'src/core/public';

export class MyPlugin implements Plugin<MyPluginSetup, MyPluginStart> {
  public setup(core: CoreSetup): MyPluginSetup {
    
    core.uiSettings.getUpdate$().subscribe(({ key, newValue }) => {
      if (key === 'custom') {
        // do something with changes...
        myPluginService.register({
          
        })
      }
    });
    
  }

  public start(core: CoreStart): MyPluginStart {
    return {
      
      settings: {
        getCustomValue: () => core.uiSettings.get('custom'),
        
      },
    };
  }
}

服务器端使用

编辑

在服务器端,uiSettings 直接从 core 公开。

以下示例展示了如何注册一个新的 custom 设置,其默认值为 42。注册新设置时,必须提供一个架构,以便对读取和写入执行验证。所有其他参数是可选的。

import { schema } from '@kbn/config-schema';
import type { CoreSetup,Plugin } from '@kbn/core/server';

export class MyPlugin implements Plugin {
  public setup(core: CoreSetup) {
    core.uiSettings.register({
      custom: {
        value: '42',
        schema: schema.string(),
      },
    });
    const router = core.http.createRouter();
    router.get({
      path: 'my_plugin/{id}',
      validate: …,
    },
    async (context, request, response) => {
      const customSetting = await context.uiSettings.client.get('custom');
      
    });
  }
}

迁移

编辑

当前不支持第三方插件高级设置的迁移。如果第三方插件注册了一个高级设置,该设置本质上是永久性的,如果没有人工干预则无法修复。

要更改或删除 uiSetting,需要迁移整个 config 保存的对象。

例如,如果我们想删除一个 custom 设置,或者将 my_setting:fourtyTwo 重命名为 my_other_setting:fourtyTwo,我们需要两个迁移条目,每个更改一个,针对应用这些更改的版本

export const migrations = {
  ...
  '8.1.0': (doc: SavedObjectUnsanitizedDoc<any>): SavedObjectSanitizedDoc<any> => ({
  ...doc,
  ...(doc.attributes && {
    attributes: Object.keys(doc.attributes).reduce(
      (acc, key) =>
        [
          // other settings to remove for 8.1.0...
          'custom',
        ].includes(key)
          ? {
              ...acc,
            }
          : {
              ...acc,
              [key]: doc.attributes[key],
            },
      {}
    ),
  }),
  references: doc.references || [],
  }),
  '8.2.0': (doc: SavedObjectUnsanitizedDoc<any>): SavedObjectSanitizedDoc<any> => ({
    ...doc,
    ...(doc.attributes && {
      attributes: Object.keys(doc.attributes).reduce(
        (acc, key) =>
          key.startsWith('my_setting:')
            ? {
                ...acc,
                [key.replace('my_setting', 'my_other_setting')]: doc.attributes[key],
              }
            : {
                ...acc,
                [key]: doc.attributes[key],
              },
        {}
      ),
    }),
    references: doc.references || [],
  }),
  
}

插件可以利用注册时可选的弃用参数来处理弃用通知和重命名。弃用警告会在“高级设置”UI 中呈现,并且还应添加到配置 Kibana 指南中。