Kibana 中的报告设置

编辑

Kibana 中的报告设置

编辑

你可以在 kibana.yml 中配置 xpack.reporting 设置,以实现以下目的:

启用报告

编辑
xpack.reporting.enabled logo cloud
当设置为 true 时,启用报告功能。设置为 false 则完全禁用报告功能。默认值为 true

不建议禁用报告功能。如果你需要关闭生成报告的能力,请在 Kibana 应用程序权限中配置角色和空间。

如果需要,你还可以通过设置 xpack.reporting.queue.pollEnabled: false 来阻止 Kibana 实例请求报告工作。

加密密钥设置

编辑

默认情况下,每次启动 Kibana 时都会为报告功能生成一个加密密钥。如果静态加密密钥没有持久保存在 Kibana 配置中,则在重启 Kibana 时,任何待处理的报告都会失败。

如果你在多个 Kibana 实例之间进行负载均衡,则每个实例都需要具有相同的报告加密密钥。否则,如果一个报告通过一个实例排队,而另一个实例从报告队列中选取该作业,则报告生成将会失败。选取该作业的实例无法解密报告作业元数据。

xpack.reporting.encryptionKey logo cloud
用于报告的静态加密密钥。使用至少 32 个字符的字母数字文本字符串。默认情况下,Kibana 在启动时会生成一个随机密钥,这将导致重启后待处理的报告失败。配置 xpack.reporting.encryptionKey 以在多次重启和多个 Kibana 实例中保留相同的密钥。
xpack.reporting.encryptionKey: "something_secret"

安全设置

编辑

报告具有两种形式的访问控制:每个用户只能访问自己的报告,并且自定义角色确定谁有权生成报告。当报告配置有 Kibana 应用程序权限时,你可以控制允许用户生成报告的空间和应用程序。

xpack.reporting.roles 设置用于报告中已弃用的访问控制系统。关闭此功能允许 API 密钥生成报告,并允许通过 Kibana 应用程序权限进行报告访问。我们建议通过在 kibana.yml 中添加 xpack.reporting.roles.enabled: false 来显式关闭报告的已弃用访问控制功能。这将使你能够创建自定义角色,为报告提供应用程序权限,如授予用户报告访问权限中所述。

xpack.reporting.roles.enabled
[7.14.0] 在 7.14.0 中已弃用。此设置的默认值在 Kibana 的即将发布的版本中将为 false 将访问控制设置为由 xpack.reporting.roles.allow 指定的一组已分配的报告角色。默认值为 true
xpack.reporting.roles.allow
[7.14.0] 在 7.14.0 中已弃用。 除了超级用户之外,还指定可以使用 Elasticsearch 角色管理 API 生成报告的角色。需要将 xpack.reporting.roles.enabled 设置为 true。默认值为 [ "reporting_user" ]

后台作业设置

编辑

报告在 Kibana 服务器上作为后台任务生成报告,并且使用 Elasticsearch 中的文档协调作业。根据你生成报告的频率和报告的总数,你可能需要更改以下设置。

xpack.reporting.capture.maxAttempts logo cloud
如果由于任何原因导致报告捕获失败,Kibana 将根据此设置的次数重新将报告作业排队进行重试。默认值为 3
xpack.reporting.queue.indexInterval
[8.15.0] 在 8.15.0 中已弃用。此设置无效。 报告创建新索引以存储报告作业和文件内容的频率。有效值包括 yearmonthweekdayhour。默认值为 week注意:此设置的存在是为了向后兼容,但未使用。使用为报告插件提供的内置 ILM 策略来自定义报告数据的滚动更新。
xpack.reporting.queue.pollEnabled
当设置为 true 时,启用 Kibana 实例轮询 Elasticsearch 中待处理的作业并声明执行这些作业。当设置为 false 时,允许 Kibana 实例仅向报告队列添加新作业、列出作业并通过 UI 提供已完成报告的下载。这需要一个部署,其中 Elastic 集群中至少有一个其他 Kibana 实例将此设置设置为 true。默认值为 true

在集群中运行多个 Kibana 实例以进行报告负载均衡需要 xpack.reporting.encryptionKey 和(如果启用了安全性)xpack.security.encryptionKey 的相同值。

xpack.reporting.queue.pollInterval
指定报告轮询器在轮询索引以查找任何待处理的报告作业之间等待的时间。可以指定为毫秒数。默认值为 3s
xpack.reporting.queue.timeout logo cloud
每个工作进程生成报告的时长。如果你的机器速度较慢或负载较重,你可能需要增加此超时时间。如果报告作业执行超过此时间限制,则该作业将被标记为失败,并且将无法下载。可以指定为毫秒数。默认值为 4m

PNG/PDF 设置

编辑

我们建议仅使用 PNG/PDF 报告导出适量的数据。此功能启用高级导出功能,但并非旨在进行批量导出。如果你需要导出多页图像数据,请考虑使用多个报告作业一次导出少量页面。如果导出的仪表板屏幕截图包含大量像素,请考虑将大型仪表板拆分为较小的组件,以减少内存和 CPU 资源的使用。

为了获得最可靠的 PDF/PNG 报告功能配置,请考虑使用 DockerElastic Cloud 安装 Kibana。

要生成 PDF 和 PNG 文件,报告使用一个内部的“屏幕截图”插件,该插件管理一个无头浏览器,该浏览器从 Kibana 捕获屏幕截图。

以下设置控制捕获过程。

xpack.screenshotting.capture.timeouts.openUrl logo cloud
指定允许报告浏览器等待“正在加载…”屏幕消失并找到页面初始数据的时间。如果超过此时间,将捕获显示当前页面的屏幕截图,并且下载链接将显示警告消息。可以指定为毫秒数。默认值为 1m
xpack.screenshotting.capture.timeouts.waitForElements logo cloud
指定时间,允许报表浏览器等待页面上所有可视化面板加载完成。如果超过此时间,将捕获显示当前页面的屏幕截图,并且下载链接会显示警告消息。可以指定为毫秒数。默认为 1m
xpack.screenshotting.capture.timeouts.renderComplete logo cloud
指定时间,允许报表浏览器等待所有可视化获取并渲染数据。如果超过此时间,将捕获显示当前页面的屏幕截图,并且下载链接会显示警告消息。可以指定为毫秒数。默认为 2m

如果在运行报表作业时发生来自 xpack.screenshotting.capture.timeouts.* 设置的任何超时,报表功能将记录错误并尝试继续使用屏幕截图捕获页面。因此,将提供下载,但报表中的可视化效果可能会出现错误。

xpack.screenshotting.capture.loadDelay
[8.0.0] 在 8.0.0 版本中已弃用。此设置无效。 指定在可视化未发生事件时截取屏幕截图之前的时间量。Kibana 随附的所有可视化都会发生事件,因此此设置不应有太大影响。如果您看到的是空白图像而不是可视化效果,请尝试增加此值。注意:此设置是为了向后兼容而存在的,但未使用,因此对报表性能没有影响。

Chromium 无头浏览器设置

编辑

对于 PDF 和 PNG 报表,报表功能会在服务器上生成一个无头 Chromium 浏览器进程,以加载并捕获 Kibana 应用程序的屏幕截图。在 Linux 和 Windows 平台上安装 Kibana 时,Chromium 二进制文件会与 Kibana 下载捆绑在一起。对于 Mac 平台,Chromium 二进制文件会在首次启动 Kibana 时下载。

xpack.screenshotting.browser.chromium.disableSandbox
建议您研究启用非特权用户命名空间的可行性。如果是在 Docker 中运行 Kibana,则容器会在具有内置 seccomp/bpf 过滤器的用户命名空间中运行,这是一个例外。有关更多信息,请参阅Chromium 沙箱。对于除 CentOS、Debian 和 Red Hat Linux 之外的所有操作系统,默认为 false,它们使用 true
xpack.screenshotting.browser.chromium.proxy.enabled
启用 Chromium 要使用的代理。如果设置为 true,则还必须指定 xpack.screenshotting.browser.chromium.proxy.server 设置。默认为 false
xpack.screenshotting.browser.chromium.proxy.server
代理服务器的 URI。不支持通过 URI 提供代理服务器的用户名和密码。
xpack.screenshotting.browser.chromium.proxy.bypass
不应通过代理服务器并且应改用直接连接的主机数组。有效条目的示例包括“elastic.co”、“*.elastic.co”、“ .elastic.co”、“.elastic.co:5601”。

用于无头浏览器连接的 Kibana 服务器设置

编辑

要生成 PNG 和 PDF 报表的屏幕截图,报表功能会使用与服务器的本地连接打开 Kibana Web 界面。在大多数情况下,使用与 Kibana 服务器的本地连接不会出现任何问题。如果您希望无头浏览器使用特定主机名连接到 Kibana,则可以使用多个设置来允许无头浏览器通过代理而不是直接连接到 Kibana。

xpack.reporting.kibanaServer 设置是可选的。编辑这些设置时请务必小心。添加这些设置可能会导致 PDF/PNG 报表功能失败。如果报表失败,请检查服务器日志,并注意关于无头浏览器无法连接到服务器的错误。在报表执行期间会记录报表功能尝试打开的完整 Kibana URL。

xpack.reporting.kibanaServer.port
用于访问 Kibana 的端口。
xpack.reporting.kibanaServer.protocol
用于访问 Kibana 的协议,通常为 httphttps
xpack.reporting.kibanaServer.hostname
用于访问 Kibana 的主机名。

无头 Chromium 限制的网络策略设置

编辑

要生成 PDF 报表,报表功能会使用无头 Chromium 浏览器在服务器上完全加载 Kibana 页面。这可能涉及向外部主机发送请求。例如,请求可能会发送到外部图像服务器以显示格式化为图像的字段,或在 Markdown 可视化中显示图像。

如果要求无头 Chromium 浏览器发送违反网络策略的请求,它将在请求发送之前停止处理页面,并且报表将标记为失败。有关该事件的其他信息位于 Kibana 服务器日志中。

Kibana 安装并非旨在通过互联网公开访问。报表网络策略和 Elastic Stack 安全功能的其他功能不会更改此条件。

xpack.screenshotting.networkPolicy
从 Kibana 页面捕获屏幕截图涉及发送所有链接 Web 资产的请求。例如,Markdown 可视化可以显示来自远程服务器的图像。
xpack.screenshotting.networkPolicy.enabled
当为 false 时,禁用无头浏览器网络策略。默认为 true
xpack.screenshotting.networkPolicy.rules
策略被指定为对象数组,这些对象描述了根据主机或协议允许或拒绝的内容。如果未指定主机或协议,则该规则匹配任何主机或协议。

规则对象将按顺序从数组的开头到结尾进行评估,并持续到存在匹配的规则为止。如果没有规则允许请求,则该请求将被拒绝。

# Only allow requests to placeholder.com
xpack.screenshotting.networkPolicy:
  rules: [ { allow: true, host: "placeholder.com" } ]
# Only allow requests to https://placeholder.com
xpack.screenshotting.networkPolicy:
  rules: [ { allow: true, host: "placeholder.com", protocol: "https:" } ]

最终的 allow 规则,没有主机或协议,允许所有未明确拒绝的请求

# Denies requests from http://placeholder.com, but anything else is allowed.
xpack.screenshotting.networkPolicy:
  rules: [{ allow: false, host: "placeholder.com", protocol: "http:" }, { allow: true }];

网络策略可以由多个规则组成

# Allow any request to http://placeholder.com but for any other host, https is required
xpack.screenshotting.networkPolicy
  rules: [
    { allow: true, host: "placeholder.com", protocol: "http:" },
    { allow: true, protocol: "https:" },
  ]

即使未配置任何网络策略,也始终会拒绝 file: 协议。

CSV 设置

编辑

我们建议仅使用 CSV 报表导出适量的数据。该功能可以对外部工具中的数据进行分析,但不适用于批量导出或备份 Elasticsearch 数据。如果要导出以下情况的数据,则可能会出现报表超时和数据不完整的问题:

  • 正在导出超过 250 MB 的数据
  • 数据存储在速度较慢的存储层上
  • 搜索所需的任何分片都不可用
  • 节点之间的网络延迟较高
  • 使用跨集群搜索
  • 使用 ES|QL 并且结果行计数超过 ES|QL 查询的限制

要解决这些限制,请使用过滤器创建多个较小的报表,或直接使用 Elasticsearch API 提取所需的数据。

有关直接使用 Elasticsearch API 的更多信息,请参阅Scroll APIPoint in time APIES|QL 或具有 CSV 响应数据格式的 SQL。我们建议您使用官方的 Elastic 语言客户端:Elastic 提供的每种编程语言库的详细信息在Elasticsearch 客户端文档中。

可以调整报表参数,以克服其中的一些限制场景。结果取决于数据大小、可用性和延迟因素,并且不能保证。

xpack.reporting.csv.maxSizeBytes logo cloud
CSV 文件在被截断之前的最大字节大小。此设置旨在防止大型导出导致性能和存储问题。可以指定为字节数。默认为 250mb
xpack.reporting.csv.scroll.size
在 CSV 导出期间,每次滚动迭代从 Elasticsearch 中检索的文档数。默认为 500

如果默认的文档数对网络资源造成压力,您可能需要降低此设置。

xpack.reporting.csv.scroll.duration
Kibana 在 CSV 导出期间清除滚动上下文之前允许的时间量。有效选项为 auto时间,默认为 30s

如果 Elasticsearch 中的搜索延迟足够高,例如,如果您使用跨集群搜索,则可能需要增加时间设置或将此配置值设置为 auto。当配置值设置为 auto 时,滚动上下文将尽可能长时间地保留,直到报表任务由于 xpack.reporting.queue.timeout 的限制而终止。

xpack.reporting.csv.scroll.strategy
选择用于在 CSV 导出期间分页数据的 API 方法。有效选项为 scrollpit。默认为 pit

每种方法都有其独特的局限性,理解这些局限性非常重要。

  • Scroll API:搜索最多限制为 500 个分片。如果数据分片不可用或超时,导出可能会返回部分数据。
  • PIT API:仅读取数据别名的权限将不起作用:需要在底层索引或数据流上具有权限。如果数据分片不可用或超时,导出将为空,而不是返回部分数据。
xpack.reporting.csv.checkForFormulas
启用检查,当输出中包含潜在的公式(=、-、+ 和 @ 字符)时发出警告。请参阅 OWASP:https://www.owasp.org/index.php/CSV_Injection。默认为 true
xpack.reporting.csv.escapeFormulaValues
使用 ' 转义单元格中的公式值。请参阅 OWASP:https://www.owasp.org/index.php/CSV_Injection。默认为 true
xpack.reporting.csv.enablePanelActionDownload
[8.14.0] 在 8.14.0 中已弃用。此设置将在 Kibana 的未来版本中删除。 true 时,此设置启用了一个已弃用的功能,允许用户从仪表板上的已保存搜索面板下载 CSV 导出。当 false 时,用户可以从仪表板上的已保存搜索面板生成常规 CSV 报告,并在 堆栈管理 > 报告 中稍后下载它们。默认为 false
xpack.reporting.csv.useByteOrderMarkEncoding
在 CSV 文件的开头添加字节顺序标记 (\ufeff)。默认为 false