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