我应该在哪里处理logstash的日志事件? (代理与服务器)

时间:2014-10-29 19:00:30

标签: logging elasticsearch logstash kibana

这可能是非常通用的,取决于您的环境'问题类型,但我想知道基于您在处理logstash和日志聚合方面的经验的最佳实践。

所以,我正在尝试在我们的生产环境中集成logstash,并且我们有大量的日志事件(65K /分钟),这些事件将被收集在一个中心位置。我有10个VM放在不同的物理机器上,它们都将相应的日志发送到位于不同物理机箱上的logstash服务器。为了做一些分析和清理,我在每个日志事件(5个字段/事件)中添加了一些字段。问题是,我应该在哪里进行过滤并将字段添加到事件中?在10个虚拟机或服务器上运行的logstash代理上,每分钟收集650K消息?

即使我已经为服务器分配了足够的内存(32GB)并且它可以处理所有这些事件,但它会是" OK"在服务器上处理这么多的事件,或者我应该在客户端以更少的内存处理它们,但是不得不通过网络发送这些事件,这可能会导致网络拥塞。

非常感谢任何帮助和/或建议/经验!

3 个答案:

答案 0 :(得分:1)

就个人而言,我会采用“服务器”方式并在所述服务器上运行一个代理。强大的服务器应该很容易65 /分钟。主要有两个原因:

  1. 首先,如果您需要更改任何处理规则(GROK模式,KV规则等),您只需要在这台计算机上执行此操作,重新启动logstash进程,然后完成。

  2. 其次,由于所有处理都将在服务器上完成,因此您不必安装Java并在VM上分配这些资源。如果这些机器正在做其他事情,这可能是一个巨大的胜利。

  3. 在生产中,我让所有运行Logstash-Forwarder的应用服务器将所有原始日志转发到Logstash代理服务器上,该服务器执行所有日志的收集和处理。还没有任何问题。

答案 1 :(得分:1)

将完整的logstash作为托运人运行有两个好处:

  • 你可以为每个分布式机器添加一点负载 处理,而不是需要更强大的集中式机器 处理所有信息。
  • 您可以分析和限制发送到集中式计算机的信息(忽略某些日志条目等),从而节省 网络带宽。

这样做的缺点是:

  • 你在每台机器上运行JVM!
  • 当您进行更改时,必须将配置分发到每台计算机。

在任何地方运行JVM都不是很有吸引力,所以我放弃了好处并运行了一个轻量级的托运人(logstash-forwarder)来将日志发送到集中式机器。

至于添加字段,在集中式计算机上执行此操作会阻止您通过网络传输额外信息。

10k事件/秒对于logstash和elasticsearch来说是一个不错的负载。

祝你好运!

答案 2 :(得分:0)

我总是发现将Logstash与其处理的数据放在同一个盒子上最容易。在那里,您可以预处理和按摩数据,然后将其发送到ElasticSearch进行存储和搜索。

如果那是不可能的,那么它确实取决于您的环境和情况。在这种情况下,我会在您的服务器上执行此操作,因为管理额外字段的配置将是单点,并且听起来它具有足够的马力。