我正在寻找一个解决scheme,可以让我自动捕获在Amazon EC2上运行的进程的STDOUT / STDERR,并将其发送(远程)到另一台服务器。
听起来很简单,除了:
我考虑过的几个想法,但每个都有一个问题:
也许有远程日志logging的“系统日志”解决scheme? 但是这需要一个单独的“按需”实例来收集信息?
任何提示和想法,将不胜感激。
谢谢,-g
我希望有一些“追加只”或“大部分追加”服务亚马逊是专为logging。
像亚马逊Kinesis,也许?
借助Amazon Kinesis,您可以让生产者直接将数据推送到Amazon Kinesisstream中。 例如,系统和应用程序日志可以提交给Amazon Kinesis,并可在几秒内处理。 这样可以防止在前端或应用程序服务器出现故障时日志数据丢失。 Amazon Kinesis提供加速的数据采集,因为在提交服务器之前,您并没有在服务器上存储数据。“
我还没有尝试过,因为我有一个使用S3和SQS的自制程序监督过程…在stream的开始处,它为临时文件(在实例上)创build唯一名称,以捕获日志并发送通过SQS的消息导致有关进程及其日志文件位置的信息被存储在数据库中; 当进程停止(这些是预定的或事件驱动的,而不是连续运行的作业)时,发送另一个SQS消息,其中包含关于临时文件的位置的冗余信息,并给出了进程的退出状态; 那么这两个日志(out和error)都被压缩并上传到S3,每个进程都会生成额外的SQS消息来报告S3的上传状态。
如您所见,SQS消息在很大程度上是多余的,但是这样做的目的是为了消除我不知道过程存在的可能性,因为所有4条消息(start,stop,stdout-upload-info ,stderr-upload-info)在S3中包含足够的信息来标识主机,进程,参数以及日志文件将去或者已经去除的位置。 当然,所有这些冗余几乎是完全没有必要的,因为这个过程和SQS / S3是非常稳定的,但是如果需要,冗余也是存在的。
我不需要实时logging这些工作,但是如果我这样做,另一个select是修改日志采集器,以便不保存日志,然后将它们整体发送到S3,我可以为每个“ x“收集的日志或运行时间的每”y“秒 – 以先发生者为准 – 将”累计“数据”刷新“为SQS消息……不需要为每条线路发送SQS消息。
首先,关于你在EC2上运行的事实,没有什么特别的。 使用任何集中式日志logging基础架构,您都希望尽可能减less日志丢失的可能性,因此需要尽快获取日志。
其次,不要指望魔术在这里。 您需要将日志消息保存在某处 ,因此您可能需要运行一个长时间运行的实例(在EC2或其他地方)来收集和存储消息。
以下是我的build议:
一些额外的评论: