Elastic Cloud 搭配 AWS FireLens:通过无代理数据采集,更快地获得洞见

blog-thumb-cloud-aws.png

客户现在可以使用 Amazon Web Services (AWS) FireLens 将容器日志和事件直接发送到 Elastic Cloud。AWS FireLens 是一个面向下列 Amazon Elastic Container Service (ECS) 启动类型的容器日志路由器:Amazon Elastic Compute Cloud (Amazon EC2) 和 AWS Fargate。借助这一集成,DevOps 和 DevSecOps 专家能够简化 AWS 日志的管理工作,从发送日志和经济有效地保留日志,到监测和分析威胁,都能予以简化。

在本篇博文中,我们将会讲解如何开始使用 AWS FireLens 来将数据通过无代理方式采集到 Elastic Cloud 中。

简化日志和事件的发送

传统上,将容器日志和事件发送到不同位置不仅耗时长,而且也充满了挑战。跟下面这些耗时费力的任务说拜拜吧,例如:将日志发送到 Cloudwatch,维护 Fluent Bit 边车日志聚合器,手动安装额外软件,或者编写更多代码。现在您可以快速配置任务定义,以将 ECS 上所运行的应用程序日志发送到 Elastic Cloud。

简化日志的搜索、分析和保留

使用 FireLens 传输完数据并将数据存储到 Elasticsearch 中之后,您就能够搜索而且分分钟内便能使用 Kibana 完成可视化。您还可以将来自其他服务器、虚拟机和容器的日志、指标和跟踪数据发送到 Elastic,并使用单一管理平台进行分析。

通过 Elastic 可观测性,获得深入的应用程序可见性,并减少在根源分析上所花费的时间。快速且轻松地分析代码层级的跟踪数据、日志和指标,对复杂的服务依赖项进行映射,并通过基于 Machine Learning 的异常检测和自动关联让“未知的未知”浮现出来。

通过 Elastic 安全,让平均检测时间趋近于零。扩展同一数据的使用方式,以实现更加全面的保护和响应 (XDR)。将信息安全和事件管理 (SIEM) 和终端安全数据集中到一处,便于预防、检测最新的网络安全威胁并进行响应。

随着您的数据的增加,Elastic 的自动扩展和索引生命周期功能可以确保在平衡性能和存储成本的同时不丢失任何数据。

开始使用 Elastic 和 AWS FireLens

我们开始看一个例子,看看如何使用 FireLens 将容器日志从 Amazon ECS 转发到 Elastic Cloud。此处的参考架构图展示了相对标准的日志转发过程:FireLens 通过 Amazon ECS 中的一个容器将容器日志转发到 Elastic Cloud。
将容器日志从 Amazon ECS 转发到 Elastic Cloud

FireLens 任务配置步骤:

1. 配置任务定义。您可以从 GitHub 上的 Amazon ECS FireLens 示例中找到一个示例定义。

2. 更新 AWS 身份和访问管理 (IAM) 角色,将其替换成您自己任务的 RoleArn,executionRoleArn IAM roles, Elastic Cloud_Auth and Cloud_ID。实施此解决方案所需的更新后任务定义和 readme 文件可在 GitHub 存储库中找到。您也可以查看下方的任务详情,将其作为一个示例。
{
   "family": "firelens-EC2-elastic",
   "taskRoleArn": "CHANGE ME",
   "executionRoleArn": "CHANGE ME",
   "containerDefinitions": [{
           "name": "log_router",
           "image": "amazon/aws-for-fluent-bit:latest",
           "essential": true,
           "firelensConfiguration": {
               "type": "fluentbit",
               "options": {
                   "enable-ecs-log-metadata": "true"
               }
           },
           "logConfiguration": {
               "logDriver": "awslogs",
               "options": {
                   "awslogs-create-group": "true",
                   "awslogs-group": "firelens-container",
                   "awslogs-region": "us-east-2",
                   "awslogs-stream-prefix": "firelens"
               }
           },
           "memoryReservation": 50
       },
       {
           "name": "nginx-test",
           "image": "nginx",
           "portMappings": [{
               "containerPort": 80
           }],
           "essential": true,
           "environment": [],
           "logConfiguration": {
               "logDriver": "awsfirelens",
               "secretOptions": [
                       {
                               "valueFrom": "CHANGE ME",
                               "name": "Cloud_Auth"
                       }
               ],
               "options": {
                   "Name": "es",
                   "Port": "9243",
                   "Tag_Key tags": "tags",
                   "Include_Tag_Key": "true",
                   "Cloud_ID": "CHANGE ME",
                   "Index": "elastic_firelens”,
                   "tls": "On",
                   "tls.verify": "Off"
               }
           },
           "memoryReservation": 100
       }
   ]
}

如果您计划发送的是 Amazon ECS Fargate 容器日志,则将前面几行替换为下面的配置。

{
    "family": "firelens-fargate-elastic",
    "taskRoleArn": "",
    "taskRoleArn": "CHANGE ME",
    "executionRoleArn": "CHANGE ME",
    "cpu": "512",
    "memory": "1024",
    "requiresCompatibilities": [
        "FARGATE"
    ],

配置步骤:

1. 确保已安装 ECS CLI 和 AWS CLI,如未安装,请首先按照此处的 AWS 安装指南完成安装。

2. 打开一个名为“enable-fluent-log-driver.sh”的新文件,然后存储下面的信息,以在 ECS 代理中启用 Fluentd 日志驱动程序:

#!/bin/bash
echo "ECS_AVAILABLE_LOGGING_DRIVERS=[\"awslogs\",\"fluentd\"]" >> 
/etc/ecs/ecs.config
3. 使用下面的命令在 ECS 上创建一个 EC2 或 Fargate 集群
ecs-cli up \
--size 2 \
--instance-type t2.medium \
--extra-user-data enable-fluent-log-driver.sh \
--keypair <changeme> \
--capability-iam \
--region=us-east-2 \
--ecs-profile=<changeme> \
--cluster-config <changeme>

4.  将任务定义保存到名为 `task_definition.json` 的本地文件,并使用 AWS CLI 对其进行注册:

aws ecs register-task-definition --cli-input-json file://task_definition.json

5.  创建 ECS 服务:

aws ecs create-service --cluster cluster-name --service-name demo-service --task-definition firelens-example-cloudwatch --desired-count 1 --launch-type 
"EC2"

6. 服务开始运行时,您通过 Kibanan 应该能够看到日志开始流到 Elasticsearch 中。下图描述的是 Elastic 中运行的一个查询,其可在 Kibana 中进行可视化。

服务开始运行时,您通过 Kibanan 应该能够看到日志开始流到 Elasticsearch 中。下图描述的是 Elastic 中运行的一个查询,其可在 Kibana 中进行可视化。

在 Kibana 中,您还可以对您的 Elastic 索引中的数据进行可视化。然后您可以创建仪表板,并基于您在 Elastic 上所运行的查询在仪表板上显示相关的可视化。通过使用 Elastic 聚合来提取和处理数据,您可以创建图表和图形,从而了解您全部数据的起伏状态和变化趋势。下图显示了一个 Kibana 仪表板的示例。

下图显示了一个 Kibana 仪表板的示例。

Elastic 与 AWS 之间的合作包括像 FireLens 这样能够简化数据采集的技术集成,而且 Elastic 为 DevOps 和 DevSecOps 专家提供了带有内在安全和合规性控制的单一平台。借助 Elastic 的即用型 AWS 集成和仪表板,您可以在 AWS 和本地部署环境中实现一体化的可见性,从而更深入地了解基础架构、应用程序和业务的表现与整体运行状况。

总结

准备好简化数据采集并在单一管理平台上管理您的所有容器日志和事件了么?Elastic 致力于不断改进,为客户提供轻松流畅的体验,使他们能够在选择运行地点和方式时随心所欲;与 AWS 的简化集成就是我们在不断进步的一个例证。Elastic Cloud 延伸了 Elastic Stack 的价值, 让您可以更快地完成更多事务,所以它是体验我们平台的最佳方式。有关其他 AWS 集成的更多信息,请访问 Elastic 集成库。要在 AWS 上开始使用 Elastic,请访问 AWS Marketplace (Elastic)elastic.co 。如果您准备参加下周的 AWS re:Invent 活动,请务必光临我们的 1567 号展台并了解更多信息。

本文所描述的任何功能或特性的发布及上市时间均由 Elastic 自行决定。当前尚未发布的任何功能或特性可能无法按时提供或根本不会提供。