是否有可能为ElasticBeanstalk Docker应用程序提供集中式日志logging?

我们在Elastic Beanstalk Docker容器环境中运行定制的Docker Web应用程序。 想要让应用程序日志可以在外面查看。 无需通过实例或AWS控制台进行下载。

到目前为止,这两种解决办法都不能接 也许有人实现Elastic Benastalk Dockerized应用程序的集中式日志logging?

解决scheme1:AWS控制台日志下载

不可接受 – 需要下载日志,每次提取。 非实时的。

解决scheme2:S3 + Elasticsearch + Fluentd

fluentd没有从S3中检索日志的插件这里有优秀的S3插件,但是它只能用于S3的日志输出。 不是来自S3的input日志。

解决scheme3:S3 + Elasticsearch + Logstash

缺点:只能从整个桶里取出所有的日志,或者什么都没有。

问题在于Elastic Beanstalk S3日志存储结构。 您不能指定文件名称模式。 这是要么所有的日志或没有。 ElasticBeanstalk将日志保存在包含随机实例和环境ID的path中:

s3.bucket/resources/environments/logs/publish/e-<random environment id>/i-<random instance id>/my.log@ 

Logstash s3插件只能指向resources / environments / logs / publish /。 当您尝试将其指向environments / logs / publish / * / my.log时,它不起作用。 这意味着你不能拉特定的日志和标签/键入它能够在Elasticsearch中find。 由于AWS将来自所有环境和实例的日志保存在相同的文件夹结构中,因此甚至不能select该实例。

解决scheme4:AWS CloudWatch控制台日志查看器

可以将自定义日志转发到CloudWatch控制台。 做到这一点,将configuration文件放在应用程序包的.ebextensionspath中: http ://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html

有一个名为cwl-webrequest-metrics.config的文件,它允许你指定日志文件以及警报等等。 除了configuration文件格式既不是yaml,xml或Json,也没有logging。 这个文件绝对没有提到,它是AWS文档网站或网上任何地方的格式。 而获取一个日志文件出现在CloudWatch中并不是简单地添加configuration行。 得到这个工作的唯一可能的方法似乎是反复试验。 大!? 除了您需要重新部署您的环境的每一个尝试。

只有一个参考如何使这个工作与自定义日志: http : //qiita.com/kozayupapa/items/2bb7a6b1f17f4e799a22我不知道如何反向工程的文件格式。

缺点:

  • Cloudwatch似乎无法在显示时将日志分​​割成列,因此您不能轻松过滤优先级等。
  • AWS控制台日志查看器没有自动刷新以跟踪日志。
  • 梦魇无证的configuration文件格式,没有办法testing。 试验和错误需要重新部署整个实例。

AWS Lambda函数可能适用?

写一些转储所有通知的JavaScript,然后看看你可以用这些做什么。

写完一个对象之后,你可以在同一个桶中重命名它?

或者通知您自己的日志pipe理服务有关创build一个新的对象?

有很多的可能性…

我现在开始使用Sumologic。 有一个免费的试用,然后免费的一级(500MB /天,7天的保留)。 我还没有走出试用期,我的EB应用程序几乎没有任何东西(这只是Nginx在Docker容器中提供的一些HTML页面,看起来像是一旦你遇到任何严重的日志,它可能会变得昂贵。

到目前为止它工作正常。 您需要创build一个有权访问您要读取的S3存储桶的IAM用户,然后将日志吸收到Sumologic服务器上,并在那里进行所有处理和search。 有点设置,但我真的不知道它是如何更简单,它有相当充分的文件。

它可以让你用通配符提供不同的pathexpression式,然后给这些不同的path分配一个“sourceCategory”。 然后使用这些sourceCategories来过滤日志search到特定types的日志logging。

我的计划长期是使用类似于你的解决scheme3,但是这让我走得很短,所以我可以转移到其他的东西。

您可以使用Multicontainer环境,将日志文件夹与您偏好的工具共享到另一个Docker容器以集中日志,在我们的情况下,我们连接了Apache Flume以将文件移动到HDFS。 希望这可以帮助你。

我发现最简单的方法是通过rsyslog和.ebextensions使用papertrail,但是logging所有内容都非常昂贵。

很好的一部分是rsyslog,你可以在任何地方发送你的日志,而且你不会被束缚住。

示例ebextension

我发现loggly是最方便的。
这是一个托pipe的服务,可能不是你想要的。 但是,如果您查看他们的设置页面,您可以看到您的情况支持的多种方式( docker专用解决scheme ,以及像10个亚马逊特定的选项)。 即使loggly不符合您的口味,您也可以查看这些解决scheme,并轻松了解其中一些解决scheme如何应用于您可能使用或编写的大多数集中式日志logging解决scheme。