内容提要
Elasticsearch 8.18 推出 ES|QL 查找连接(技术预览),一种 SQL 风格 LEFT OUTER JOIN,通过单分片查找索引关联事件与参考数据(如资产、威胁情报),支持直接更新和多个匹配行。相比 ENRICH 更易管理,无需策略。示例包括按环境或团队分析日志、关联恶意 URL。创建查找索引可通过 Kibana 或 API 设置 index.mode。未来将支持更多连接类型。
延伸解读
查找连接与 ENRICH 的取舍
查找连接相比 ENRICH 更易管理:无需创建策略,查找索引可直接更新,且多个匹配时生成多行而非多值字段,便于后续聚合。但查找索引仅单分片,上限 20 亿文档,适合参考数据量不大的场景。若字段频繁用于连接,考虑非规范化到左侧索引,以查询速度换取存储。
创建查找索引的三种方式
目前可通过 Kibana 索引管理、创建索引 API 或 ML 文件上传器创建查找索引,关键是将 index.mode 设为 lookup。Kibana 中可从 Stack Management 的索引管理创建,或使用机器学习文件数据可视化工具上传 CSV 并添加 index.mode: lookup。API 方式最直接,PUT 请求中设置 settings.index.mode 即可。
适用场景与注意事项
查找连接适合将事件与参考数据关联,如资产、威胁情报、员工信息等。但连接操作会增加查询延迟,若某字段频繁用于连接,建议在采集时非规范化。查找索引可直接查询,也可创建数据视图。注意查找索引不是数据流,单分片限制 20 亿文档,需评估数据量是否合适。
Q&A
ES|QL 查找连接是什么?
ES|QL 查找连接是 Elasticsearch 8.18 中引入的一种 SQL 风格的 LEFT OUTER JOIN,它通过查找索引将事件数据与参考数据(如资产、威胁情报)关联起来,以丰富数据。
ES|QL 查找连接与 ENRICH 命令有何区别?
查找连接比 ENRICH 更易设置和管理:无需创建扩充策略,查找索引可直接更新,且当有多个匹配项时,查找连接会生成多行而不是多值字段,便于后续分组和汇总。
如何创建查找索引?
可以通过 Kibana 的索引管理界面创建,选择索引模式为“查找”;也可以通过 API 创建,设置 index.mode 为 lookup;还可以使用 ML 文件上传器导入 CSV 文件并设置 index.mode。
查找索引有什么限制?
查找索引仅使用一个分片,因此文档数量上限为 20 亿(Lucene 单分片限制)。此外,查找索引不是数据流,不能作为数据流使用。
ES|QL 查找连接有哪些实际应用场景?
常见场景包括:将安全事件与威胁情报关联、将日志与主机或资产信息结合、将 IoT 读数与元数据关联、按环境或团队分析日志、识别恶意 URL 等。
什么时候不应该使用 ES|QL 查找连接?
当连接操作频繁且增加查询延迟时,或者参考数据不经常变化时,应考虑将字段非规范化到左侧索引,或使用采集时的丰富处理器(如 Logstash 过滤器)来优化性能。
ES|QL 查找连接未来会支持哪些功能?
未来计划支持 INNER JOIN、子查询,并允许对任何索引(不仅仅是查找索引)进行连接。同时,正在设计在 Kibana Discover 中直接创建和编辑查找索引的体验。