ELK Stack 的网络容错架构
A network fault-tolerant architecture for ELK Stack
认识才几天ELK Stack
。我们正尝试在我们的企业应用程序中使用它,但有一些架构问题。我看过并阅读了 ELK
及其架构 especially in linkedin 的一些用例,但没有人讨论过网络错误对 his/her 架构的潜在影响。
在传统的应用程序中,通常会将日志写入文件,导致系统崩溃的唯一原因是 Disk is Full
错误,这种情况很少见。但是在集中式日志系统中,日志通过网络发送,由于网络错误很常见,我认为系统很容易崩溃!!尤其是in/for网络不可靠的军团。
此外,正如我在许多 ELK
用例中看到的那样,JMS Provider
的单个实例或换句话说 Pub/Sub Provider
像 Kafka
或 Redis
与 ELK
一起使用。我想除了前面的问题,JMS Provider
在这些架构中是一个single point of failure
!除非,那将是集群。
我认为如果我们在单个节点上的每个 Shipper[s]
旁边使用像 Kafka
这样的 JMS Provider
,我认为我们可以摆脱这两个问题,如下所示(一个 Kafka
对于每个节点):
((log-generator)+ (logstash)? Kafka)* -> Logstash -> Elasticsearch -> Kibana
请告诉我这个架构是否有意义?
如果它不成功,欢迎任何其他容错架构:)
答案取决于允许的风险有多大、您可能会在哪里遇到此类风险以及您预计事件会持续多长时间。
如果写入本地文件,可以使用 Filebeat 将文件发送到远程 logstash。如果该 logstash(或下游 Elasticsearch 集群)施加背压,filebeat 将减慢或停止发送日志。这为您提供了远程机器上的分布式缓存(不需要代理)。不利的一面是,如果中断持续时间很长,日志文件可能会从 filebeat 的 glob 模式下轮换出来,然后它永远不会发货。
对于多个 logstash 实例,您可以将 filebeat 配置为传送到它们的列表,从而提供一些生存能力。如果您有 "one-time" 事件(如 snmptraps、系统日志等),您需要多考虑一下可能的中断。
我曾经 运行 为这些类型的事件创建一个单独的 logstash 实例,它将输入到 redis 中。然后主 logstash(启动时)将从队列中读取并处理事件。这让我可以启动一个新的 logstash 配置,而不用担心丢失事件。这些天,我尝试将事件写入文件(使用 snmptrapd 等),而不依赖于任何 logstash 运行ning 24x7x365.
认识才几天ELK Stack
。我们正尝试在我们的企业应用程序中使用它,但有一些架构问题。我看过并阅读了 ELK
及其架构 especially in linkedin 的一些用例,但没有人讨论过网络错误对 his/her 架构的潜在影响。
在传统的应用程序中,通常会将日志写入文件,导致系统崩溃的唯一原因是 Disk is Full
错误,这种情况很少见。但是在集中式日志系统中,日志通过网络发送,由于网络错误很常见,我认为系统很容易崩溃!!尤其是in/for网络不可靠的军团。
此外,正如我在许多 ELK
用例中看到的那样,JMS Provider
的单个实例或换句话说 Pub/Sub Provider
像 Kafka
或 Redis
与 ELK
一起使用。我想除了前面的问题,JMS Provider
在这些架构中是一个single point of failure
!除非,那将是集群。
我认为如果我们在单个节点上的每个 Shipper[s]
旁边使用像 Kafka
这样的 JMS Provider
,我认为我们可以摆脱这两个问题,如下所示(一个 Kafka
对于每个节点):
((log-generator)+ (logstash)? Kafka)* -> Logstash -> Elasticsearch -> Kibana
请告诉我这个架构是否有意义?
如果它不成功,欢迎任何其他容错架构:)
答案取决于允许的风险有多大、您可能会在哪里遇到此类风险以及您预计事件会持续多长时间。
如果写入本地文件,可以使用 Filebeat 将文件发送到远程 logstash。如果该 logstash(或下游 Elasticsearch 集群)施加背压,filebeat 将减慢或停止发送日志。这为您提供了远程机器上的分布式缓存(不需要代理)。不利的一面是,如果中断持续时间很长,日志文件可能会从 filebeat 的 glob 模式下轮换出来,然后它永远不会发货。
对于多个 logstash 实例,您可以将 filebeat 配置为传送到它们的列表,从而提供一些生存能力。如果您有 "one-time" 事件(如 snmptraps、系统日志等),您需要多考虑一下可能的中断。
我曾经 运行 为这些类型的事件创建一个单独的 logstash 实例,它将输入到 redis 中。然后主 logstash(启动时)将从队列中读取并处理事件。这让我可以启动一个新的 logstash 配置,而不用担心丢失事件。这些天,我尝试将事件写入文件(使用 snmptrapd 等),而不依赖于任何 logstash 运行ning 24x7x365.