我想知道在基础设施中使用 redis 作为代理的优缺点是什么?
目前,我的所有代理都发送到中央 NXLog 服务器,该服务器代理对 logstash --> ES 的请求。
在我的 nxlog 收集器和 logstash 之间使用 redis 服务器可以获得什么?对我来说,这似乎毫无意义,因为 nxlog 已经拥有良好的内存和磁盘缓冲区,以防 logstash 出现故障。
我会得到什么?
谢谢
我开始使用redis是因为我觉得它会分离输入和过滤部分。至少在我对配置进行了很多更改的时期。
如您所知,如果您更改 logstash 配置,则必须重新启动该东西。当他重新开始工作时,所有客户端(在我的情况下通过 syslog)注定要重新连接到 logstash 守护进程。
通过在前面放置一个索引器,该索引器保存相对静态的输入配置并将所有内容推送到 redis,我能够重新启动 logstash,而不会导致整个数据中心出现故障。我遇到了一些问题,因为我们的开发人员(还)没有时间来减少发送到 syslog 的无用日志的数量,从而导致服务器溢出。在我们使用logstash之前,它们溢出了用于日志的磁盘空间——虽然更普遍的问题...... :)
在重负载上:直接调用 ES (HTTP) 可能很危险,如果 ES 出现故障,您可能会遇到问题。
Redis 可以处理更多(更多)写入请求并将其以异步逻辑发送到 ES(HTTP)。
当与 Logstash 一起使用时,Redis 充当消息队列。您可以有多个作者和多个读者。
通过使用 Redis(或任何其他队列服务),您可以通过向“集群”添加更多服务器来横向扩展 Logstash。这对于小型操作无关紧要,但对于大型安装非常有用。
在我们构建 ELK 基础设施时,我们最初在使用 logstash 索引器(从 redis 读取)时遇到了很多问题。Redis 会备份并最终死掉。我相信这是因为,为了不丢失日志文件,redis 被配置为不时将缓存持久化到磁盘。当队列“太大”(但仍在可用磁盘空间内)时,redis 会死掉,并带走所有缓存的条目。
如果这是 redis 可以做到的最好的,我不会推荐它。
幸运的是,我们能够解决索引器的问题,这通常会使 redis 队列为空。我们将监控设置为在队列备份时快速发出警报,这是索引器再次不满意的好兆头。
希望有帮助。
将 Logstash 与 Redis 一起使用时,您可以将 Redis 配置为仅将所有日志条目存储在内存中,这需要内存队列(如 memcache)。
您可能会遇到 Logstash 不会处理发送的日志数量的情况,并且它可能会不断降低您的系统(在我们的环境中观察到)。
如果您觉得 Redis 对您的磁盘来说是一种开销,您可以将其配置为将所有日志存储在内存中,直到它们被 logstash 处理。