就我个人而言,我会在你的应用程序旁边的另一个容器中运行 fluent 或 fluentbit https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch
您可以将日志直接发送到 ES,然后无需任何 cloudwatch 费用。
编辑
这是最终的解决方案,以防万一有人在寻找更便宜的解决方案。
在您的应用程序旁边的另一个容器中运行 Fluentd/Fuentbit
使用Github Config,我能够通过以下配置将日志转发到 ES。
{
"family": "workflow",
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "log_router",
"image": "docker.io/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": "your_log_group",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
"memoryReservation": 50
},
{
"name": "ContainerName",
"image": "YourImage",
"cpu": 0,
"memoryReservation": 128,
"portMappings": [
{
"containerPort": 5005,
"protocol": "tcp"
}
],
"essential": true,
"command": [
"YOUR COMMAND"
],
"environment": [],
"logConfiguration": {
"logDriver": "awsfirelens",
"secretOptions": [],
"options": {
"Name": "es",
"Host": "YOUR_ES_DOMAIN_URL",
"Port": "443",
"tls": "On",
"Index": "INDEX_NAME",
"Type": "TYPE"
}
},
"resourceRequirements": []
}
]
}
log_router 容器收集日志并将其发送到 ES。更多信息,请参考Custom Log Routing
请注意,在 Fargate 的情况下需要 log_router 容器,但在 ECS 的情况下不需要。
这是我所知道的最便宜的解决方案,它不涉及 Cloudwatch、Lamdas、Kinesis。