报表集成编辑

应用程序遵守一个契约,报表功能使用该契约来确定从 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。这将显示在 堆栈管理 > 警报和洞察 > 报表 中的报表列表中,并在下载报表时用作文件名。

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

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

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

CSV编辑

CsvSearchSource 的作业参数编辑

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

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

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

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

CsvFromSavedObject 的作业参数编辑

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

interface JobParamsCsvFromSavedObject {
  locatorParams: LocatorParams[]; 
};

locatorParams 值由 Discover 应用程序控制,并标识在 Discover 中加载的搜索,包括 DataView、列和过滤器的选择。在 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 发送请求以测试生成报表,请使用包含 curl 命令的 shell 脚本,该命令会 POST 请求。这将避免在交互式 shell 中运行 curl 命令时可能发生的任何意外字符转义。