CSV 报告问题排查

编辑

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

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

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

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

可以调整报告参数以克服某些限制场景。结果取决于数据大小、可用性和延迟因素,并且不保证一定有效。

Kibana 中的 CSV 导出功能向 Elasticsearch 发出查询,并将结果格式化为 CSV。此功能提供了一种解决方案,旨在为大多数用例提供最大化的收益。但是,导出过程中可能会出现问题。Elasticsearch 可能会停止响应,重复查询可能会耗时过长,导致身份验证令牌超时,并且导出的数据格式可能过于复杂,电子表格应用程序无法处理。这些情况超出了 Kibana 的控制范围。如果用例变得足够复杂,建议您使用 Python 等脚本语言和公共 Elasticsearch API 创建直接查询 Elasticsearch 的脚本。

有关常见问题的建议,请参阅问题排查

配置 CSV 导出以使用 scroll API

编辑

Kibana CSV 导出功能通过使用多个请求来分页所有文档,从而从 Elasticsearch 收集所有数据。在内部,该功能使用Point in time API 和查询中的 search_after 参数来实现此目的。与 point in time API 相关的一些限制:

  1. 仅读取数据别名的权限将不起作用:需要在底层索引或数据流上具有权限。
  2. 如果数据分片不可用或超时,导出将为空而不是返回部分数据。

一些用户可能会受益于使用 scroll API,这是分页浏览数据的另一种选择。此 API 的行为没有 point in time API 的限制,但是它有自己的限制:

  1. 搜索最多限制为 500 个分片。
  2. 如果数据分片不可用或超时,导出可能会返回部分数据。

如果您希望 CSV 导出的内部实现使用 scroll API,可以在 kibana.yml 中配置此项

xpack.reporting.csv.scroll.strategy: scroll

有关 CSV 导出设置的更多详细信息,请转到CSV 设置

套接字挂起

编辑

“套接字挂起”是一种通用类型的错误,表示远程服务(在本例中为 Elasticsearch 或 Cloud 中的代理)关闭了连接。Kibana 无法预见这种情况何时发生,也无法强制远程服务保持连接打开。要解决这种情况,请考虑减小每个请求返回的结果大小,或增加远程服务允许保持请求打开的时间。例如:

xpack.reporting.csv.scroll.size: 50
xpack.reporting.csv.scroll.duration: 2m

此类更改不能保证解决问题,但是可以提高此功能在这种用例中工作的机会。不幸的是,减小滚动大小将需要在导出期间向 Elasticsearch 发出更多请求,这会增加更多时间开销,这可能会无意中创建更多身份验证令牌过期错误的实例。

令牌过期

编辑

为避免令牌过期,请使用不会过期的身份验证类型(如基本身份验证),或使用直接查询 Elasticsearch 的脚本运行导出。在自定义脚本中,您可以根据需要刷新身份验证令牌,例如在每次查询之前刷新一次。