是否可以为ElasticBeanstalk Docker应用程序进行集中日志记录?

Rom*_*man 22 amazon-cloudwatch logstash docker amazon-elastic-beanstalk

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

到目前为止,这两种解决方 也许有人为Elastic Benastalk Dockerized应用程序实现了集中式日志记录?

解决方案1:AWS Console日志下载

不可接受 - 需要下载日志,每次都提取.非实时.

解决方案2:S3 + Elasticsearch + Fluentd

fluentd没有从S3检索日志的插件有优秀的S3插件,但它仅用于日志输出到S3.不适用于S3的输入日志.

解决方案3:S3 + Elasticsearch + Logstash

缺点:只能从整个桶中提取所有日志或什么也不能.

问题在于Elastic Beanstalk S3 Log存储结构.您无法指定文件名模式.它可以是所有日志,也可以不是.ElasticBeanstalk在包含随机实例和环境ID的路径中将日志保存在S3上:

s3.bucket/resources/environments/logs/publish/e-<random environment id>/i-<random instance id>/my.log@
Run Code Online (Sandbox Code Playgroud)

Logstash s3插件只能指向resources/environments/logs/publish /.当您尝试将其指向environment/logs/publish/*/my.log时,它不起作用.这意味着你无法拉出特定的日志并标记/输入它以便能够在Elasticsearch中找到它.由于AWS将所有环境和实例中的日志保存在相同的文件夹结构中,因此您甚至无法选择实例.

解决方案4:AWS CloudWatch控制台日志查看器

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

有一个名为cwl-webrequest-metrics.config的文件,它允许您指定日志文件以及警报等.太棒了!?除了配置文件格式既不是yaml,xml或json,也没有记录.该文件绝对没有提及,它的格式要么在AWS文档网站上,要么在网络上的任何地方.要在CloudWatch中显示一个日志文件,不仅仅是添加配置行.实现这项工作的唯一可行方法似乎是反复试验.大!?除了您需要重新部署环境的每次尝试.

关于如何使用自定义日志进行此操作只有一个参考:http://qiita.com/kozayupapa/items/2bb7a6b1f17f4e799a22我不知道该人如何逆向设计文件格式.

缺点:

  • Cloudwatch在显示时似乎无法将日志拆分为列,因此您无法轻松按优先级等进行过滤.
  • AWS Console日志查看器没有自动刷新以跟踪日志.
  • 梦魇没有文档配置文件格式,没办法测试.试验和错误需要重新部署整个实例.

Sho*_*orn 0

我现在已经开始使用 Sumologic 了。有免费试用版和免费套餐(500mb/天,保留 7 天)。我还没有结束试用期,我的 EB 应用程序实际上什么也没做(它只是由 Nginx 在 docker 容器中提供的几个 HTML 页面。不过,一旦您遇到大量日志,它可能会变得昂贵。

到目前为止工作正常。您需要创建一个 IAM 用户,该用户有权访问您想要读取的 S3 存储桶,然后它将日志吸收到 Sumologic 服务器并在那里进行所有处理和搜索。设置起来有点麻烦,但我真的不明白它如何能更简单,而且有相当详细的文档记录。

它允许您提供带有通配符的不同路径表达式,然后为这些不同的路径分配“sourceCategory”。然后,您可以使用这些 sourceCategories 将日志搜索过滤到特定类型的日志记录。

我的长期计划是使用像你的解决方案 3 这样的东西,但这让我在很短的时间内进行,这样我就可以继续做其他事情。