帮助手册

Amazon ECS 日志

Amazon Elastic Container Service (ECS) 是一种完全托管的容器编排服务,可自动完成基于容器的应用程序的部署、管理和扩展。

监控 Amazon ECS 日志可以:

  • 识别并排查容器化应用程序中的问题。
  • 确保应用程序平稳高效地运行。
  • 深入了解应用程序和基础架构的性能。

ECS 支持两种启动类型:Amazon Elastic Compute Cloud (EC2) 和 AWS Fargate。使用 EC2,您可以完全访问和控制基础架构,因为您的容器化应用程序运行在注册到 Amazon ECS 集群的 EC2 实例上。使用 Fargate,您只需管理应用程序,因为它是无服务器的,AWS 完全管理基础架构和容器。

您可以根据启动类型选择以下方式之一,将日志从 Amazon ECS 转发到 AppLogs

通过 Site24x7 服务器监控代理收集日志

  1. 登录您的 Site24x7 账户。
  2. 在 EC2 实例上下载并安装 Site24x7 服务器监控代理(Windows | Linux)。
  3. 转到管理 > AppLogs > 日志配置文件,点击添加日志配置文件
  4. 选择日志类型下拉菜单中选择 AWS ECS Logs
  5. 默认情况下,ECS 容器配置为将日志写入以下文件路径:
    Windows:C:\ProgramData\Docker\containers\*\*.log
    Linux:/var/lib/docker/containers/*/*.log
  6. 将此日志配置文件关联到以下服务器下拉菜单中选择服务器。
  7. 点击保存

要编辑日志类型,可以导航至 管理 AppLogs 日志类型 > 点击要编辑的日志类型。

日志模式

json $log$ $stream$ $time:date:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'$ $container_name$ $container_hostname$ $containerid$ $cluster_name$ $image$ $image_id$ $Labels:json-object$
注意

请参阅本文档中的相关章节,以根据您的日志格式自定义日志模式

这是 Site24x7 根据以下示例为解析 AWS ECS 日志定义的默认模式。

示例日志
{"log":"Starting image","stream":"stdout","time":"2019-06-04T11:29:54.295671087Z","container_name" : "/ecs-agent","container_hostname" : "3e9ceb8286e3", "containerid": "323e26da-67d4-4ae8-ad17-a30abcb9e007", "image" : "amazon/amazon-ecs-agent:latest", "image_id": "sha256:c3503596a2197b94b7b743544d72260374c8454453553d9da5359146b9e2af98","Labels": {"org.label-schema.build-date": "2022-11-16T20:43:16.419Z","org.label-schema.license": "Elastic License"},"cluster_name":"ECS"}

上述示例日志可分解为以下字段,每个字段将从此处获取其各自的值,然后上传到 Site24x7。

字段名称 字段值
log Starting image
stream stdout
time 2019-06-04T11:29:54.295671087Z
container_name /ecs-agent
container_hostname 3e9ceb8286e3
containerid 323e26da-67d4-4ae8-ad17-a30abcb9e007
cluster_name ECS
image amazon/amazon-ecs-agent:latest
image_id sha256:c3503596a2197b94b7b743544d72260374c8454453553d9da5359146b9e2af98
Labels Labels.key Labels.value
org.label-schema.license Elastic License
org.label-schema.build-date 2022-11-16T20:43:16.419Z

注意

1. 如果您需要 Labels 信息,可以通过点击编辑字段配置 > 切换在源头忽略此字段并切换为来启用它。请参阅此文档以了解有关在源头过滤日志行的更多详情

2. 我们的自定义解析器提取包含容器元信息的字段,例如 container_namecontainer_hostnamecluster_nameimageimage_idLabels

完成。您已准备好使用 AppLogs 监控 Amazon ECS 日志。

通过 Lambda 函数使用 CloudWatch 收集日志

使用 awslogs 日志驱动程序和 Lambda 函数,您可以通过 CloudWatch 日志将容器日志转发到 Site24x7。

为此,您需要在任务定义的应用程序容器中将日志驱动程序定义为 awslogs

以下是配置 awslogs 日志驱动程序的任务定义片段:
{
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "sample-application/container",
"awslogs-region": "us-east-2",
"awslogs-create-group": "true",
"awslogs-stream-prefix": "sample-application"
}
}
}

注意

要使用 awslogs-create-group 选项创建日志组,您的任务执行 IAM 角色策略或 EC2 实例角色策略必须包含 logs: CreateLogGroup 权限。否则,您必须手动创建日志组。请参阅 Amazon 文档以了解有关在任务定义中使用 awslogs 日志驱动程序的更多信息。

然后,按照以下步骤通过 CloudWatch 收集日志。

  1. 从 Site24x7 Web 控制台,导航至管理 > AppLogs > 日志配置文件 > 添加日志配置文件,然后:
    1. 配置文件名称字段中为您的日志配置文件输入一个名称
    2. 选择日志类型下拉菜单中选择 AWS ECS Logs
    3. 点击选择日志类型下拉菜单旁边的 编辑 图标。
    4. 这将打开编辑日志类型窗口。
      1. 示例日志字段中的以下示例日志替换为:
        {"timestamp":1556785146165,"message":"Starting image"}
      2. 点击日志模式字段旁边的 编辑 图标,更新以下日志模式,然后点击 确认 图标保存模式:
        json $timestamp:date:unixm$ $message$ $ecs_cluster:config:@filepath:0$ $container_name:config:@filepath:1$
      3. 点击保存以保存日志类型。
    5. 现在,从日志来源下拉菜单中选择 Amazon Lambda
    6. 点击保存以保存日志配置文件。
  2. 按照此文档AWS 设置章节中的说明收集 CloudWatch 日志并在 Site24x7 中查看。但请确保选择 AWS ECS Logs、其 logtypeconfig 以及 ECS 容器日志组,然后继续按同一文档中定义的说明操作。

完成。您已准备好使用 AppLogs 监控 Amazon ECS 日志。

使用 FireLens 插件收集日志

  1. 登录您的 Site24x7 账户。
  2. 转到管理 > AppLogs > 日志类型,点击添加日志类型
  3. 日志类型下拉菜单中选择 AWS ECS Logs
  4. 输入显示名称
  5. 示例日志字段中,用以下示例日志替换现有的示例日志:
    {
    "date": 1684129842.901607,
    "log": "Starting image",
    "container_id": "e961d005829f458dasd32342377ffec-1159264102",
    "container_name": "sample-fargate-app",
    "source": "stderr",
    "ecs_cluster": "Applog_ECS_CLUSTER",
    "ecs_task_arn": "arn:aws:ecs:us-east-2:12736187623:task/Applog_ECS_CLUSTER/e961d005829f458dasd32342377ffec",
    "ecs_task_definition": "fargate-task-definition:1"
    }
  6. 点击日志模式字段旁边的  图标,更新以下日志模式,然后点击 确认 图标保存模式。
    json $date:date:unixm$ $ecs_task_arn$ $container_name$ $log$ $ecs_cluster$ $source$ $container_id$ $ecs_task_definition$

    注意

    请参阅本文档中的相关章节,以根据您的日志格式自定义日志模式

  7. 启用 API 上传
  8. 记下 URL,更新容器配置时需要用到日志驱动程序详情。
  9. 点击保存并继续创建日志配置文件
    注意

    无需创建日志配置文件。请继续进行以下 AWS FireLens 配置

AWS FireLens 配置

您可以在 FireLens 中使用 FluentBit HTTP 输出插件从 ECS Fargate 收集日志。

  1. 您必须将 Fluent Bit FireLens 日志路由容器添加到现有的 Fargate 任务中。有关配置 FireLens 的详细帮助,请参阅 Amazon 官方文档

    将以下代码片段添加到任务定义中。
    {
    "essential": true,
    "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest",
    "name": "log_router",
    "firelensConfiguration": {
    "type": "fluentbit"
    }
    }
    在同一 Fargate 任务中,为所需容器定义日志配置以传送日志。此配置的日志驱动程序应为 awsfirelens,数据输出到 Fluent Bit

  2. 以下是 FireLens 作为日志驱动程序并将数据输出到 Fluent Bit 的任务定义示例片段。
    "logConfiguration": {
    "logDriver": "awsfirelens",
    "secretOptions": null,
    "options": {
    "tls.verify": "off",
    "net.keepalive": "off",
    "Format": "json",
    "Port": "443",
    "compress": "gzip",
    "Host": "logc.site24x7.com",
    "tls": "on",
    "URI": "/event/receiver?rawLogs=true&token={TOKEN}",
    "Name": "http"
    }
    }
    完成上述更改后,将更改部署到您的集群。
    注意

    您必须从步骤 8 中提到的 API URL 提供 HostURI 键值。对于 URI 键,请将 {TOKEN} 替换为从步骤 8 获取的令牌值。

    完成。您已准备好使用 AppLogs 监控 Amazon ECS 日志。

根据日志格式自定义日志模式

由于每个应用程序以不同的模式写入日志,您可以根据示例日志行自定义日志模式。

例如,如果您的服务在日志字段中写入自定义消息,包含日期、日志级别、日志级别 ID、线程、类名和消息,如以下示例日志行所示,则可以根据日志格式自定义日志模式。
示例日志
{
"date": 1684129842.901607,
"log": "2023-05-16 13:00:16.109 ERROR 1 --- [zylker-thread] zylker.classname : zylkermethod",
"container_id": "e961d005829f458dasd32342377ffec-1159264102",
"container_name": "sample-fargate-app",
"source": "stderr",
"ecs_cluster": "Applog_ECS_CLUSTER",
"ecs_task_arn": "arn:aws:ecs:us-east-2:12736187623:task/Applog_ECS_CLUSTER/e961d005829f458dasd32342377ffec",
"ecs_task_definition": "fargate-task-definition:1"
}

在这种情况下,您可以如下自定义日志模式,将该信息提取到各个字段,例如 DateLogLevelLogLevelIDThreadClassNameMessage请参阅此文档以定义模式字段

根据上述示例日志格式自定义的日志模式

json $ecs_task_arn$ $container_name$ $log:pattern:$Date:date:yyyy-MM-dd HH:mm:ss.SSS$ $LogLevel$ $LogLevelId$ --- [$Thread$] $ClassName$ :$Message$$ $ecs_cluster$ $source$ $container_id$ $ecs_task_definition$

注意

如果您在创建日志模式时仍遇到问题,可以点击"报告问题"。这将把日志模式和配置的示例日志发送给我们的支持团队进行分析,或者您可以联系 support@site24x7.com

创建告警以获取错误通知

开始将日志推送到 AppLogs 后,您可以创建已保存的搜索告警来监控您的日志。

例如,您可以保存以下用于过滤包含错误的日志的查询。已保存的搜索默认添加到仪表板。

logtype="AWS ECS Logs" and loglevel CONTAINS "ERROR"


您还可以创建告警以通知您发生的任何错误。

注意

通过 Amazon Elastic Container 服务监控集成,在集群和服务级别监控 EC2 启动类型和 Fargate 启动类型的利用率统计信息和 EC2 指标。

相关日志类型

本文档对您有帮助吗?

您愿意帮助我们改进文档吗?请告诉我们哪些方面可以做得更好。


很抱歉本文档未能让您满意。我们希望了解可以从哪些方面改进您的体验。


感谢您抽出时间分享反馈。我们将利用您的反馈来改进在线帮助资源。

短链接已复制!