将 logsdb 索引模式与 Elastic Security 结合使用
Elastic Stack 无服务器安全
要在 Elastic Stack 中使用 synthetic _source
功能,您必须拥有相应的订阅。有关可用功能及其关联的订阅级别的详细信息,请参阅 Elastic Cloud 和 Elastic Stack/自管理 的订阅页面。
本主题介绍将 logsdb 索引模式与 Elastic Security 和 Elastic Security Serverless 结合使用的影响。您必须拥有相应的订阅才能在 Elastic Stack 中使用此功能。在 Serverless 中,默认启用 logsdb 索引模式。
使用 logsdb 索引模式时,原始 _source
字段不会存储在索引中,但可以使用 synthetic _source
重构。
当 _source
被重构时,可以进行修改。因此,用户的期望与字段的格式化方式之间可能存在不匹配。
继续阅读以了解 logsdb 索引模式如何影响 CPU 和存储使用情况以及特定的 Elastic Security 组件。
以下声明仅适用于 Elastic Stack 用户
完全支持 Logsdb 索引模式,并建议用于所有 Elastic Security 部署。建议现有 Elastic Security 部署的用户充分理解并接受对检测警报文档、运行时字段和规则操作的已记录更改(请参阅以下各节),并确保他们的部署具有足够的额外热数据层 CPU 容量来支持 logsdb 提取和索引编制过程。在没有足够额外热数据层 CPU 容量的情况下启用 logsdb 索引模式可能会导致数据提取备份和/或安全检测规则超时和错误。
Logsdb 索引模式通过在提取期间稍微多使用一些 CPU 来显着减少存储需求。为数据源启用 logsdb 索引模式后,您可能需要根据新的 CPU 和存储需求调整集群大小。要了解有关 logsdb 索引模式如何优化 CPU 和存储使用情况的更多信息,请查看 我们的博客。
生成警报时,_source
事件会复制到警报中以保留原始数据。应用 logsdb 索引模式后,存储在警报中的 _source
事件将使用 synthetic _source
重构。
如果您正在切换到使用 logsdb 索引模式,则在某些情况下,存储在警报中的 _source
字段可能会有所不同
- 数组可以以不同的方式重构或去重
- 字段名称
geo_point
数据字段(有关详细信息,请参阅 范围的表示形式 和 降低geo_point
值的精度)
以下规则类型生成的警报可能会受到影响
- 自定义查询
- 事件关联(仅限非序列)
- 非聚合规则类型(例如,使用非聚合查询的 ES|QL 规则)
由阈值、机器学习和事件关联序列规则生成的警报不受影响,因为它们不包含原始源的副本。
虽然我们不建议使用 _source
进行操作,但在操作依赖于 _source
的情况下,同样的限制和更改也适用。
如果您通过启用 操作 向外部系统发送警报通知,这些系统具有基于原始源格式化字段的工作流程或自动化,则可能会受到影响。特别是,当使用的字段是对象数组时,可能会发生这种情况。
我们建议在切换到 logsdb 索引模式之前,使用 _source
检查和调整规则操作。
引用 _source
的运行时字段可能会受到影响。某些运行时字段可能无法正常工作,需要进行调整。例如,如果一个事件以点表示法形式索引了 agent.name
的值,它将以嵌套形式返回,并且可能无法正常工作。
以下是访问与启用的 logsdb 索引模式配合使用的 _source
的示例
"source": """ emit(params._source.agent.name + "_____" + doc['agent.name'].value ); """
"source": """ emit(params._source['agent']['name'] + "_____" + doc['agent.name'].value ); """
"source": """ emit(field('agent.name').get(null) + "_____" + doc['agent.name'].value ); """
"source": """ emit($('agent.name', null) + "_____" + doc['agent.name'].value ); """
以下内容不适用于 synthetic source(启用了 logsdb 索引模式)
"source": """ emit(params._source['agent.name'] + "_____" + doc['agent.name'].value ); """
另请注意,引用 params._source
的脚本的运行时字段可能需要更新。当前使用点字段名称访问源字段的脚本必须转换为使用嵌套访问模式,除非被访问的对象已将 subobjects
设置为 false
。未映射的字段也需要在脚本中使用嵌套访问模式进行访问(例如,params._source['foo']['bar']['baz']
或 params._source.foo.bar.baz
,而不是 params._source['foo.bar.baz']
)。要了解有关 synthetic source 如何命名字段以及您可能需要对脚本进行的更改的更多信息,请参阅 按映射方式命名的字段。