从Amazon EC2实例收集日志有什么好方法?
我的应用托pipe在Amazon EC2集群上。 每个实例将事件写入日志文件。 我需要在每天结束时收集(和数据挖掘)这些日志。 在中央位置收集这些日志的build议方法是什么? 我想到了几个select,不知道要走哪条路:
- 使用cron作业将它们scp到一个实例
- 将所有事件通过TCP / IPlogging到一个实例
我们在每个主机(通过Puppet部署)上使用Logstash来收集日志事件并将其发送到中央主机上的消息队列(RabbitMQ,但可能是Redis)。 另一个Logstash实例检索事件,处理它们并将结果填充到ElasticSearch中 。 Kibana网页界面用于search这个数据库。
它非常有能力,容易扩展,非常灵活。 Logstash有大量的filter来处理来自各种input的事件,并可以输出到许多服务,ElasticSearch就是其中之一。 我们目前每天从我们的EC2实例,在轻型硬件上发送大约一千二百万次日志事件。 从事件到可search的日志事件的延迟在我们的设置中大约为1秒。
这里有一些关于这种设置的文档: https ://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html,以及带有一些实时数据的Kibanasearch界面演示。
这个问题现在已经很老了(2014年12月),但在谷歌search这个话题时仍然排在前列。
亚马逊现在通过CloudWatch提供了一些方法来实现这一点。 它能够模式匹配日志消息,并根据应用程序中发生的事件触发警报。 根据需要完成的数据挖掘的性质,可以使用API来获取所需的聚合事件。 见http://aws.amazon.com/blogs/aws/cloudwatch-log-service/
我一直在使用Loggly,它似乎有伎俩
它允许我通过tcp发送我的所有日志到他们的服务,并有一个中央的地方来监视我所有的日志文件,
它也允许我将我的日志文件存档到S3,这也不错
我没有为此尝试过,但亚马逊似乎build议使用SimpleDB:
http://aws.amazon.com/simpledb/usecases_logging/
这里有一个你可能会觉得有用的包 – 它说你可以用它来捕获到SimpleDB的stdout / stderr:
看一下Splunk的免费版本 – 它将处理远程日志文件收集,并给你一些非常好的search和分析工具。
使用syslog-ng,一种通过TCP传输日志消息的stream行工具,可selectencryption。
我还没有实现,但我碰到了Facebook Scribe,这似乎是一个好主意。 https://github.com/facebookarchive/scribe
直到我得到了这一切,我一直在做你刚刚提到的#1 – 我有一个使用sftp拉文件的cron作业。 我之所以select这个,是因为即使我做了#2,我也遇到了ec2机器崩溃的情况,而且我最终不得不把日志文件关掉。