我一直在寻找几天来找到关于 Graylog/Elasticsearch 如何使用索引以及何时创建新索引的一个很好的解释。有很多关于分片索引的信息,但关于索引本身的信息并不多,除了它们是一组关于要保留多少数据以及如何管理它们的设置,但不是为什么。(或者在我看来)
背景:
我们将 Graylog 4.0 与 Elasticsearch 7.10 和 MongoDB 3 一起使用。
我们尝试集中来自 6 个仓库位置的日志(彼此相距数百公里)。每个都有 6 到 20 个 RFID 门,每个门都有日志。每个门都有连接到中央控制器中间件的连接器中间件,并且所有这些中间件都有日志。然后是自动化仓库“AWMS”的控制器、WMS服务器、ERP服务器及其前端。我们还考虑从运行这些服务的服务器的 Windows 事件日志中收集至少一些事件。
通常我们需要分析一个子系统中的问题,因此需要搜索其中一个日志。有时我们需要查看从 RFID 门到 AWMS、WMS 和 ERP 的整个流程。
目前,我考虑为每个日志创建一个流,并在搜索中使用相关的流。(或者这种方法是否已经存在缺陷,如果是,为什么?)
问题:
- Graylog中设置的索引是否只是保留策略的设置?
- 如果我有很多或几个索引,会有什么影响?
- 在Elasticsearch Index Model中,听起来分片大小及其分布对搜索性能有主要影响,而索引只是管理分片的框架
- 我的用例应该有多少个索引集?
- 每个流多个?
- 每个流一个?
- 每个位置一个?
- 每个子系统一个?
- 每个保留时间或大小间隔一个?
- 一个全球的?
- 从性能的角度来看,这重要吗?
- 我在哪里可以找到关于这些东西的更多信息,这解释了“为什么”,而不仅仅是“如何”来管理索引?(我一直在研究Graylog 索引模型、Elasticsearch 索引模型、Elasticsearch 索引模板)
Graylog中设置的索引是否只是保留策略的设置?
不要忘记索引集对底层 ElasticSearch 基础设施中的索引有直接影响,您应该考虑到这一点,因为 ElasticSearch 完全与索引及其分片(数据分布、副本等)有关。
数据类型和字段也是一回事:您不能(不应该)在同一个索引集中拥有具有混合数据类型的相同字段(例如,如果字段
device
存在是Integer
因为 System1 使用设备号但 System2 需要Text
类型这个字段,因为设备标识符是一个字符串,那么您应该将所有内容存储为字符串,或者创建一个单独的索引集以将两种数据类型及其各自的优势保持在相同的字段名称下)。这通常是您可能不想将 Windows 日志存储在与其他任何内容相同的索引集中的原因(将此应用于您的用例,这可能适用于您的 ERP/WMS 数据源?...)因为它们可以容易导致数百个不同的字段(建议避免超过每个索引限制1000 个字段)。
所以,不,这不仅仅是关于保留策略。作为反思的起点,我建议您考虑在其索引集中对各种数据源类型进行分组(Windows 日志的索引集,Linux 服务器的另一个索引集,例如防火墙的另一个索引集,因为它从数据类型中有意义观点看法)。
如果我有很多或几个索引,会有什么影响?
这取决于您的 ElasticSearch 基础设施,并且“很多”是未定义的……看看Sizing ElasticSearch和Size your shards。记住您将执行什么样的查询以及在哪个时间范围内可能有助于在索引大小和 ElasticSearch 必须查询以满足您的请求的索引数量之间找到适当的平衡。
我的用例应该有多少个索引集?
流配置了一个索引集,不能为一个流设置多个索引集。关于其他点,我已经在上面回答了。
但是,请注意,您可以在同一个索引集上配置多个流,如果您想将这些流与相同的底层数据一起使用并且只想限制某些用户对日志子集的访问,这非常有用:您可以路由消息根据您想要的各种流之间的条件,如果这些流都共享相同的索引集,您将不会复制消息。