从多个服务器发送日志到中央日志服务器的好方法是什么?

What would be a good approach for sending logs from multiple servers a centralized logging server?

我正在尝试从托管在多个 ec2 实例上的 php 应用程序发送日志,大量日志。

与其采用在每台服务器上安装 logstash 并使用 logstash-forwarder 将日志发送到日志服务器并由 logstash 解析日志并将其提供给 elasticsearch 的标准方法,这是否是一种更好的方法将 apache/nginx 日志写入 syslog 并让 rsylog 将其发送到 logstash,然后将其提供给 elasticsearch?

长问题短 - 什么是更好的方法?

  1. Apache/Nginx -> logstash-forwarder -> logstash -> redis (optional) -> elasticsearch

  2. Apache/Nginx -> syslog -> rsyslog -> logstash -> redis (optional) -> elastic search

据我所知:

  • 第一种方法,更简单,适用于可扩展性较差的小型基础设施。
  • 第二种方法,更复杂但更高效和可扩展,适用于大型基础设施(在我的中使用:大约 500 台服务器)。

我更喜欢选项一。它的移动部件更少,所有这些都包含在您可以从 Elasticsearch 购买的支持合同中,并且运行良好。我现在有 500 多台这样配置的服务器,今年计划再增加几千台。

如果 elasticsearch 繁忙,logstash 将会节流。如果 logstash 繁忙,logstash-forwarder 将节流。有了它,就不需要经纪人了。

请注意,如果您使用未节流的输入(例如 tcp、snmptrap、netflow 等),则需要代理。