【发布时间】:2015-02-04 03:16:16
【问题描述】:
我们在 Elastic Beanstalk Docker 容器环境中运行了自定义 Docker Web 应用程序。 希望有应用程序日志可供外部查看。无需通过实例或 AWS 控制台下载。
到目前为止,这两种解决方案都不可接受。也许有人为 Elastic Benastalk Dockerized 应用实现了集中式日志记录?
解决方案 1:AWS 控制台日志下载
不可接受 - 需要下载日志,每次都提取。非实时。
解决方案 2:S3 + Elasticsearch + Fluentd
fluentd 没有从 S3 检索日志的插件 有优秀的 S3 插件,但它仅用于将日志输出到 S3。不适用于来自 S3 的输入日志。
解决方案 3:S3 + Elasticsearch + Logstash
缺点:只能从整个存储桶中提取所有日志或什么都不提取。
问题在于 Elastic Beanstalk S3 日志存储结构。您不能指定文件名模式。它要么是所有日志,要么什么都没有。 ElasticBeanstalk 将 S3 上的日志保存在包含随机实例和环境 ID 的路径中:
s3.bucket/resources/environments/logs/publish/e-<random environment id>/i-<random instance id>/my.log@
Logstash s3 插件只能指向资源/环境/日志/发布/。当您尝试将其指向 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 控制台日志查看器没有自动刷新来跟踪日志。
- Nightmare 未记录的配置文件格式,无法测试。反复试验需要重新部署整个实例。
【问题讨论】:
-
对于“*/my.log”,s3 输入的“前缀”选项是否有效? "如果指定,则桶中文件名的前缀必须匹配(不是正则表达式)"
-
关于发送docker日志到logstash这个更一般的问题,相信可以在主机和容器之间共享一个mountpoint。将您的日志放在那里并从主机发送它们。
-
这里是一位 Fluentd 维护者。您能否详细说明您希望如何从 S3 中获取数据?
-
@KiyotoTamura 与 Logstash 的 S3 插件基本相同 - 指向 S3 存储桶和路径。插件会定期下载日志。
-
@KiyotoTamura 我不确定我是否理解您的问题。您在问应该如何在编程级别或配置级别上完成?还是在概念层面?与 Logstash 插件一样,它使用配置的路径模式和 S3 凭据下载日志。
标签: docker logstash amazon-elastic-beanstalk amazon-cloudwatch