Logging 什么';从AmazonEC2实例收集日志的好方法是什么?

Logging 什么';从AmazonEC2实例收集日志的好方法是什么?,logging,amazon-s3,amazon-ec2,Logging,Amazon S3,Amazon Ec2,我的应用程序托管在Amazon EC2集群上。每个实例都将事件写入日志文件。我需要在每天结束时收集(并挖掘)这些日志。在中心位置收集这些日志的推荐方法是什么?我想到了几个选择,但不确定该走哪条路: 使用cron作业将它们映射到实例 通过TCP/IP将所有事件记录到实例 我还没有实现它,但我遇到了Facebook Scribe,这似乎是个好主意 在我开始之前,我一直在做你所说的#1-我有一个cron工作,它使用sftp来提取文件。我之所以选择这一点,是因为即使我选择了#2,我也有过ec2机器崩溃的

我的应用程序托管在Amazon EC2集群上。每个实例都将事件写入日志文件。我需要在每天结束时收集(并挖掘)这些日志。在中心位置收集这些日志的推荐方法是什么?我想到了几个选择,但不确定该走哪条路:

  • 使用cron作业将它们映射到实例
  • 通过TCP/IP将所有事件记录到实例

  • 我还没有实现它,但我遇到了Facebook Scribe,这似乎是个好主意


    在我开始之前,我一直在做你所说的#1-我有一个cron工作,它使用sftp来提取文件。我之所以选择这一点,是因为即使我选择了#2,我也有过ec2机器崩溃的例子,我最终不得不删除日志文件

    看看的免费版本-它将处理远程日志文件收集,并为您提供一些非常好的搜索和分析工具。

    使用syslog ng,这是一种通过TCP传输日志消息的流行工具,可以选择加密


    我没有为此尝试过,但亚马逊似乎建议使用SimpleDB:

    下面是一个您可能会发现很有用的包—它说您可以使用它将stdout/stderr捕获到SimpleDB中:


    我一直在使用Loggly,它似乎起到了作用

    它允许我通过tcp将所有日志发送到他们的服务,并有一个中心位置来监视所有日志文件


    它还允许我将日志文件归档到S3,这也很好,我们在每个主机(通过Puppet部署)上使用S3来收集日志事件并将其发送到中央主机上的消息队列(RabbitMQ,但可以是Redis)。另一个Logstash实例检索事件,处理它们并将结果填充到日志中。使用web界面搜索此数据库

    它很有能力,很容易伸缩,非常灵活。Logstash有大量的过滤器来处理来自各种输入的事件,并可以输出到许多服务,ElasticSearch就是其中之一。目前,我们在轻型硬件上每天从EC2实例发送大约120万个日志事件。在我们的设置中,日志事件从事件到可搜索的延迟约为1秒

    这里有一些关于这种设置的文档:,还有一些实时数据的Kibana搜索界面演示。

    这个问题现在已经过时了(2014年12月),但在谷歌搜索这个主题时仍然排名靠前


    亚马逊现在提供了一种通过CloudWatch实现这一点的方法。它能够对日志消息进行模式匹配,并根据应用程序中发生的事情触发警报。根据需要进行的数据挖掘的性质,可以使用它们的API获取所需的聚合事件。请参见免责声明:我在相扑工作:

    相扑无逻辑也是一个相对容易的选择:


    此外,如果您发现logstash在主机上的性能要求太高,您可能需要研究一下。它是用golang编写的,比整个logstash项目的开销要小得多,但有足够的输入来完成将日志从主机上取下并输入日志系统的工作(在那里,您可以使用logstash的各种输入插件来破坏它们)。我建议将日志发送到S3,然后使用logstash+elasticsearch跟踪S3中的日志。(使用校验和生成elasticsearch ID,以消除由日志存储重新处理重新加载的文件引起的重复日志条目)。这样,您就不必担心丢失Elasticsearch群集,并使重新定位ES群集变得更加简单和干净。它还为您打开了更多更重的分析工具,如EMR和Redshift。Filebeat用于日志文件,Metricbeat用于度量,Packetbeat用于网络流量记录,等等。它们非常轻量级。此外,Logstash 5.4还有一个称为持久队列的功能,它减少了对单独消息队列的需要,从而使部署更容易。“它还允许我将日志文件归档到S3,这也很好”,这是否意味着loggly是您的第一个目的地?loggly将发送到那里,然后让loggly将压缩的归档发送到S3?我正试图通过集中监控所有日志文件来实现这个设置,但我仍然可以将归档的.gz文件保存在s3上