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。
| 启动类型 | EC2 | Fargate |
| 通过 Site24x7 服务器监控代理收集日志 | 是 | 否 |
| 通过 Lambda 函数使用 CloudWatch 收集日志 | 是 | 是 |
| 使用 FireLens 插件收集日志 | 是 | 是 |
通过 Site24x7 服务器监控代理收集日志
- 登录您的 Site24x7 账户。
- 在 EC2 实例上下载并安装 Site24x7 服务器监控代理(Windows | Linux)。
- 转到管理 > AppLogs > 日志配置文件,点击添加日志配置文件。
- 从选择日志类型下拉菜单中选择 AWS ECS Logs。
- 默认情况下,ECS 容器配置为将日志写入以下文件路径:
Windows:C:\ProgramData\Docker\containers\*\*.log
Linux:/var/lib/docker/containers/*/*.log - 从将此日志配置文件关联到以下服务器下拉菜单中选择服务器。
- 点击保存。
要编辑日志类型,可以导航至 管理 > 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_name、container_hostname、cluster_name、image、image_id 和 Labels。
完成。您已准备好使用 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 收集日志。
- 从 Site24x7 Web 控制台,导航至管理 > AppLogs > 日志配置文件 > 添加日志配置文件,然后:
- 在配置文件名称字段中为您的日志配置文件输入一个名称。
- 从选择日志类型下拉菜单中选择 AWS ECS Logs。
- 点击选择日志类型下拉菜单旁边的
图标。 - 这将打开编辑日志类型窗口。
- 将示例日志字段中的以下示例日志替换为:
{"timestamp":1556785146165,"message":"Starting image"} - 点击日志模式字段旁边的
图标,更新以下日志模式,然后点击
图标保存模式:
json $timestamp:date:unixm$ $message$ $ecs_cluster:config:@filepath:0$ $container_name:config:@filepath:1$
- 点击保存以保存日志类型。
- 将示例日志字段中的以下示例日志替换为:
- 现在,从日志来源下拉菜单中选择 Amazon Lambda。
- 点击保存以保存日志配置文件。
- 按照此文档的 AWS 设置章节中的说明收集 CloudWatch 日志并在 Site24x7 中查看。但请确保选择 AWS ECS Logs、其 logtypeconfig 以及 ECS 容器日志组,然后继续按同一文档中定义的说明操作。

完成。您已准备好使用 AppLogs 监控 Amazon ECS 日志。
使用 FireLens 插件收集日志
- 登录您的 Site24x7 账户。
- 转到管理 > AppLogs > 日志类型,点击添加日志类型。
- 从日志类型下拉菜单中选择 AWS ECS Logs。
- 输入显示名称。
- 在示例日志字段中,用以下示例日志替换现有的示例日志:
{
"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"
}
- 点击日志模式字段旁边的
图标,更新以下日志模式,然后点击
图标保存模式。
json $date:date:unixm$ $ecs_task_arn$ $container_name$ $log$ $ecs_cluster$ $source$ $container_id$ $ecs_task_definition$

注意请参阅本文档中的相关章节,以根据您的日志格式自定义日志模式。
- 启用 API 上传。
- 记下 URL,更新容器配置时需要用到日志驱动程序详情。

- 点击保存并继续创建日志配置文件。
注意
无需创建日志配置文件。请继续进行以下 AWS FireLens 配置。
AWS FireLens 配置
您可以在 FireLens 中使用 FluentBit HTTP 输出插件从 ECS Fargate 收集日志。

- 您必须将 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。 - 以下是 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"
}
}
完成上述更改后,将更改部署到您的集群。完成。您已准备好使用 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"
}
在这种情况下,您可以如下自定义日志模式,将该信息提取到各个字段,例如 Date、LogLevel、LogLevelID、Thread、ClassName 和 Message。请参阅此文档以定义模式字段。
根据上述示例日志格式自定义的日志模式
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$

创建告警以获取错误通知
开始将日志推送到 AppLogs 后,您可以创建已保存的搜索和告警来监控您的日志。
例如,您可以保存以下用于过滤包含错误的日志的查询。已保存的搜索默认添加到仪表板。
logtype="AWS ECS Logs" and loglevel CONTAINS "ERROR"

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

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


