【问题标题】:Is it possible to have Centralised Logging for ElasticBeanstalk Docker apps?是否可以为 ElasticBeanstalk Docker 应用程序提供集中式日志记录?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    也许AWS Lambda function 是适用的?

    编写一些转储所有通知的 javascript,然后看看你能用这些做什么。

    对象写入后,可以在同一个bucket中重命名吗?

    或者通知您自己的日志管理服务创建新对象?

    那里有很多可能性......

    【讨论】:

    • 我也听说过这个解决方案。你有一些例子吗?
    【解决方案3】:

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

    使用 rsyslog 的好处是,您基本上可以将您的日志发送到任何地方,而且您不会被 papertrail 所束缚。

    example ebextension

    【讨论】:

      【解决方案4】:

      您可以使用多容器环境,使用您喜欢的工具将日志文件夹共享到另一个 docker 容器以集中日志,在我们的示例中,我们连接了 Apache Flume 以将文件移动到 HDFS。希望这对您有所帮助。

      【讨论】:

        【解决方案5】:

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

        到目前为止一切正常。您需要创建一个 IAM 用户,该用户有权访问您要从中读取的 S3 存储桶,然后它将日志吸入 Sumologic 服务器并在那里进行所有处理和搜索。设置起来有点繁琐,但我真的不明白它怎么能更简单,而且它的文档也相当完善。

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

        我的长期计划是使用类似于您的解决方案 3 之类的东西,但这让我在很短的时间内就开始了,这样我就可以继续做其他事情了。

        【讨论】:

        • 如何将 Sumologic 与 EB 一起使用?除了这个 Gist 之外,没有其他任何信息:gist.github.com/jorihardman/f3507764762e876cc9df
        • 那个看起来像是将日志直接从实例流式传输到 SumoLogic 的服务器。我将我的 EB 环境配置为“发布日志”(它将日志文件放在弹性 beanstalk 存储桶中)。然后使用允许从 EB 存储桶读取日志的凭据配置 SumoLogic(在 sumologic 网站上)。 SL 然后登录,将日志拉到他们的站点,然后处理日志。
        猜你喜欢
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        相关资源
        最近更新 更多