亚马逊AWS官方博客

AWS Fargate 容器使用 AWS FireLens 和 Sumo Logic 来收集和分析日志

AWS FargateAmazon ECS 的计算引擎,它允许您运行容器而无需管理服务器或集群。Fargate 可管理集群的预置、配置和扩展。Fargate 让您可以专注于应用程序设计和实现,而不必担心基础架构。

在本文中,我们将介绍如何检索 Fargate 容器日志,并使用 AWS FireLens 将这些日志发送到 Sumo Logic,以便监控容器和应用程序问题并对其进行故障排除。

AWS Firelens for Amazon ECS 让您可以使用任务定义参数将日志路由到 AWS 服务或 AWS 合作伙伴网络 (APN) 目标以进行日志存储和分析。FireLens 利用开源技术 Fluentd 和 Fluent Bit

Fluentd 是用于统一日志记录层的开放源数据收集器。 Fluentd 允许您统一数据收集和使用,以便更好地使用和理解数据。Fluentd 是用 C 语言和 Ruby 编写的,只需占用很少的系统资源。普通实例运行 30-40MB 的内存,每个核心每秒可以处理 13000 个事件。

Fluent Bit 是 Fluentd 的轻量级转发器。它包含多个 Fluentd 插件,可对指标进行解析和格式化,并使用元数据进行充实。数据经过充实和标记,包括其在集群中所处位置的详细信息;服务、部署、命名空间、节点、pod、容器及其标签。 然后,将日志和指标转发到托管收集器上的 HTTP 源。Fluent Bit 是一个开源的多平台日志处理器和转发器,允许您从不同的源收集数据/日志,然后将其统一并发送到多个目的地。它与 Docker 和 Kubernetes 环境完全兼容。

Sumo Logic 是 AWS 合作伙伴网络 (APN) 高级技术合作伙伴,在安全性、数据和分析以及开发运营方面具有 AWS 能力。Sumo Logic 致力于帮助组织更好地实时了解他们的 IT 基础架构。Sumo Logic 集成了多种云服务和本地服务,使跨不同服务聚合数据变得轻松而又简单,并让用户全面了解其运营、业务和安全分析。

AWS Fargate 日志收集设置

在 Amazon ECS 中运行 Docker 容器需要任务定义。您可以在任务定义中定义多个容器。用于任务定义的参数取决于任务的启动类型。有关可用参数以及适用于任务定义的启动类型的更多信息,请参阅 ECS 任务定义参数文档

Amazon ECS 允许两种启动类型 Fargate 和 EC2。

●      Fargate:ECS 管理集群。
●      EC2:您自己管理集群。

借助 AWS FireLens,您可以在 ECS 任务定义中为 AWS Fargate 和 Amazon EC2 配置开源收集器 Fluentd 或 Fluent Bit。在这两种收集器代理中,建议使用 Fluent Bit,因为它的资源利用率明显低于 Fluentd。下图显示了 FireLens 如何将容器日志从 Fargate 发送到 Sumo Logic。

使用 AWS Firelens 将 AWS Fargate 日志摄取到 Sumo logic 中。

图 1:使用 AWS Firelens 将 AWS Fargate 日志摄取到 Sumo logic 中

集成配置步骤如下所示:

在 Sumo Logic 中配置托管收集器和 HTTP 日志源

部署中的本地系统上未安装托管收集器。相反,Sumo Logic 在 AWS 中托管收集器及其源。通过托管收集器,您可以创建源以从各种服务收集数据。单个托管收集器可以配置任意数量的源。

HTTP 日志和指标源是一个终端节点,用于接收上载到为该源生成的唯一 URL 的日志和指标数据。该 URL 对收集器和源信息进行安全编码。 您可以将任意数量的 HTTP 日志和指标源添加到单个托管收集器。

您将获取源的 HTTP URL,其中包含终端节点和令牌,以便在后续步骤中使用。

使用 Fluent 或 Fluent Bit 创建 FireLens 日志路由器容器定义,并将其标记为 FireLens 容器


{
    "image": "amazon/aws-for-fluent-bit:latest",
    "name": "log_router_sumo",
    "memory": 100,
    "essential": true,
    "firelensConfiguration": {
      "type": "fluentbit",
      "options": {
         "enable-ecs-log-metadata": "true"
       }
     }
}

创建将 AWS FireLens 用于日志的应用程序容器,并配置 Sumo Logic HTTP 源终端节点和令牌以将日志发送到 Sumo Logic


{
  "essential": true,
  "image": "httpd",
  "name": "app",
  "logConfiguration": {
    "logDriver": "awsfirelens",
    "options": {
      "Name": "http",
      "Host": "<endpoint>",
      "URI": "/receiver/v1/http/<token>",
      "Port": "443",
      "tls": "on",
      "tls.verify": "off",
      "Format": "json_lines"
     }
   },
   "memory": 100
}

现在,您的容器日志已配置为发送到 Sumo Logic,请按照我如何判断是否正在收集数据?中的说明来验证是否确实正在收集日志

有关更多详细说明,请参阅 Sumo Logic 关于收集 AWS ECS Fargate 和 EC2 容器日志的说明。

在 Sumo Logic 中搜索容器日志以进行故障排除

配置日志收集后,日志将开始流入 Sumo Logic。以下是 Apache Webserver 日志的示例:

Apache Web 将日志摄取到 Sumo Logic。
图 2:Apache Web 将日志摄取到 Sumo Logic

FireLens 添加了 ECS 元数据,这对于调查非常有用。通过搜索,您可以轻松确定容器的错误、性能和运行状况。

利用 App 控制面板

根据 Fargate 容器中运行的应用程序,您可以使用 Sumo Logic 应用程序自动获取数据洞察。

在上面的示例中,由于 Apache 日志被摄取到 Sumo Logic,则可以安装 Sumo Logic Apache 应用程序,通过现成的控制面板分析日志和趋势。

此应用程序中的 Apache – Overview 控制面板提供了访问者位置和流量分布的一览视图:

Apache 中的访问者位置和流量分布。

图 3:Apache 中的访问者位置和流量分布

有关如何在此应用程序中设置 Apache 应用程序和其他控制面板的更多详细信息,请参阅关于安装 Sumo Logic Apache 应用程序的说明。

清理

为了避免您的 AWS 账户在未来产生费用,为此项目删除在您的 AWS 账户中创建的资源。您只需转到 Sumo Logic 网页中的 Administration > Account(管理 > 账户)删除 Fargate 集群并删除您创建的 Sumo Logic 免费试用版。在页面底部的 Delete this Organization from Sumo Logic?(从 Sumo Logic 删除此组织?)部分下,选择 Delete Org(删除组织)。在对话框 Delete This Organization from Sumo Logic? 中,输入 DELETE 以确认并单击 Delete Org(删除组织)

小结

在本文中,我们介绍了 Sumo Logic 如何与 AWS ECS 集成,以便您:

  • 借助利用开源技术 Fluentd 和 Fluent Bit 的 AWS Firelens 从 AWS Fargate 收集容器日志。
  • 使用 Sumo Logic 搜索进行故障排除并调查问题。
  • 利用现成的 Sumo Logic 应用程序以获得即时洞察。

后续步骤

要开始使用,请查看 Sumo Logic ECS 日志收集帮助文档。 如果您还没有 Sumo Logic 账户,可以注册免费试用版

有关安全性和 DevSecOps 方面的更多内容,请查看 Sumo Logic 博客

Arun Patyal

Arun Patyal

Arun Patyal 是 Sumo Logic 的高级集成工程师,在开发和集成应用程序方面拥有超过 12 年的经验。在此之前,Arun 是 Saba Software Inc. 的专业服务顾问。Arun 毕业于印度 I2IT- Pune,拥有高级软件技术硕士学位。他工作之余的兴趣包括徒步旅行、旅游和帮助流浪狗

本博文中的内容和意见属于第三方作者,AWS 不对本博文的内容或准确性负责。