报表集成

编辑

应用程序遵循一个契约,报表功能使用该契约来确定从 Kibana 请求数据导出的所需信息,以及如何生成和存储报表。

这些页面记录了内部 API,并且不保证在 Kibana 的未来版本中得到支持。但是,这些文档将保持最新,以反映 Kibana 中报表集成的当前实现。

报表导出类型

编辑

“导出类型”是插入到 Kibana 报表框架中的代码片段,负责代表 Kibana 应用程序导出数据。这些代码片段以 TypeScript 类的形式实现,这些类扩展了一个抽象基类,并实现了用于控制报表作业创建以及异步生成报表内容的方法。它们的 createJob 方法通过接受 jobParams 对象并返回“任务有效负载”对象来处理创建报表作业的请求。它们的 runTask 方法通过接受从 createJob 函数创建的任务有效负载对象来生成报表内容,然后将该对象存储在 Elasticsearch 的系统索引中。

分享菜单扩展

编辑

X-Pack 服务(例如报表功能)会向 Kibana 平台的 share 插件注册,以注册可用于使内容可共享的其他操作。

生成报表作业 URL

编辑

要生成新的报表作业,不同的导出类型需要不同的 jobParams 对象,这些对象经过 Rison 编码,并用作报表生成端点 URL 中的 jobParams 查询字符串变量。如果您使用上述 分享插件注册,则此详细信息将被抽象化。如果您的应用程序不使用分享菜单扩展,则必须生成 URL 并向该 URL 创建 POST 请求。

基本作业参数

编辑

每种导出类型都需要报表作业参数的某些字段。

interface BaseParams {
  title: string; 
  objectType: string; 
  browserTimezone: string; 
  version: string; 
};

报表的 title。此标题显示在 堆栈管理 > 告警和洞察 > 报表 中的报表列表中,并在下载报表时用作文件名。

当使用内部报表 API 时,会自动添加 objectType 字段。此值用于在 Kibana 的报表列表中为报表作业选择图标。

当使用内部报表 API 制作作业参数时,会自动添加 browserTimezone 字段。此字段用于以用户所需的时区正确格式化基于时间的数据。

当使用内部报表 API 时,会自动添加 version 字段。在 Kibana 升级后重用作业参数并且可能需要迁移的情况下使用此字段。

CsvSearchSource 的作业参数
编辑

用于生成 CSV 报表的导出类型在 Discover 中可用,它使用“搜索源”对象。此导出类型在代码中称为 csv_searchsource。CSV 报表作业的配置使用包含 BaseParams 和以下字段的接口表示。要创建 CSV 报表的请求,这些必需的作业参数会经过 Rison 编码为报表生成 URL 的查询字符串变量

interface JobParamsCSV {
  searchSource: SerializedSearchSourceFields; 
  columns?: string[]; 
};

一个序列化数据的对象,在内部表示 Kibana 中的搜索对象。它将包含对已保存的数据视图对象的引用。

一个要包含在 CSV 报表中作为列的字段名称数组。

CsvFromSavedObject 的作业参数
编辑

一种更新的用于生成 CSV 报表的导出类型可用,目前仅通过 API 可用。此导出类型在代码中称为 csv_v2

interface JobParamsCsvFromSavedObject {
  locatorParams: LocatorParams[]; 
};

locatorParams 值由 Discover 应用程序控制,并标识 Discover 中加载的搜索,包括数据视图、列和过滤器的选择。在 createJob 方法中,只允许使用数组中的单个值。

作业有效负载
编辑

在报表生成 URL 的路由处理程序收到作业参数后,会自动将一个额外的字段添加到作业参数中的字段

interface TaskPayloadCSV {
  pagingStrategy: 'scan' | 'pit' 
}

pagingStrategy 值取自 kibana.yml 中 xpack.reporting.csv.scroll.strategy 设置的值,并用于控制 runTask 方法如何分页浏览所有数据。

PDF 和 PNG

编辑
作业参数
编辑

PDF 或 PNG 报表作业的配置使用包含 BaseParams 和以下字段的接口表示。要创建这些报表类型之一的请求,这些必需的作业参数会编码为报表生成 URL 的查询字符串变量

interface BaseParamsPDFV2 {
  layout: {
    id: string; 
    dimensions: {
      height: number;
      width: number;
    };
  };
  locatorParams: LocatorParams[]; 
}

interface BaseParamsPNGV2 {
  layout: {
    id: string; 
    dimensions: {
      height: number;
      width: number;
    };
  };
  locatorParams: LocatorParams; 
}

PDF 导出的可用 layout.id 选项包括 preserve_layoutprintcanvas。这些选项控制如何捕获仪表板面板并将其放置在 PDF 文件中的页面中。

locatorParams 值由浏览器中加载的应用程序控制,该应用程序将捕获屏幕截图。生成 PDF 报表的参数允许使用 locatorParams 数组来支持多页 PDF 报表。

PNG 导出的唯一可用 layout.id 选项是 preserve_layout

生成 PNG 报表的参数允许为 locatorParams 使用单个值。

应用程序如何使自己具备屏幕截图功能
编辑

生成 PDF 时,报表导出类型启动的无头浏览器会运行一个脚本,该脚本会在 DOM 中查找多个属性,以确定应拍摄哪些元素的屏幕截图以及可视化何时完成渲染。

打印布局会拍摄每个具有 data-shared-item 属性的元素的屏幕截图,并将各个屏幕截图包含在 PDF 中。打印布局还在与 data-shared-item 相同的 HTMLElement 上使用 data-titledata-description 属性来指定标题和描述。

保留布局会拍摄具有 data-shared-items-container 属性的元素的屏幕截图。此外,报表将调整具有 data-shared-items-container 的元素的大小,使其成为布局尺寸中指定的大小。保留布局还在具有 data-shared-items-container 属性的 HTMLElement 上使用 data-titledata-description 属性来指定整个 PDF 的标题/描述。

报表需要确定所有可视化何时完成渲染,以便它可以开始拍摄屏幕截图。如果有多个可视化,则应指定 data-shared-items-count 属性,以使报表知道要查找多少个可视化。报表将查看每个具有 data-shared-item 属性的元素,并使用相应的 data-render-complete 属性和 renderComplete 事件来监听渲染完成。当可视化渲染完成时,data-render-complete 属性应设置为“true”,并且应调度一个自定义 DOM renderComplete 事件。

如果报表作业使用多个 URL,则在查找任何 data-shared-itemdata-shared-items-count 属性之前,它会等待指定正在加载哪个页面的 data-shared-page 属性。

使用 POST URL 进行调试

编辑

开发人员可以从具有报表功能的应用程序捕获 POST URL,以访问公共 API 报表生成端点中的 jobParams 查询字符串变量。查询字符串变量可以通过 URL 解码器传递,然后通过 Rison 到 JSON 的转换器传递,以使作业参数具有人类可读性。

如果尝试将请求发送到 POST URL 以测试生成报表,请使用包含 POST 请求的 curl 命令的 shell 脚本。这将避免在交互式 shell 中运行 curl 命令时可能发生的任何意外字符转义。