[英]ECS logs: Fargate vs EC2
当我通常使用Fargate在ECS中运行任务时,STDOUT会自动重定向到cloudwatch,并且可以轻松找到此应用程序日志。
例如,在C#中进行说明:
Console.WriteLine("log to write to CloudWatch")
当我将ECS与Fargate或Lambda函数一起使用时,该输出将自动重定向到CloudWatch日志
我想使用EC2做同样的事情。
将ECS与EC2结合使用的第一印象是,它不如Fargate自动化。 我对吗?
在查找信息时,我发现以下内容(其他较早的问题或帖子除外):
因此,总而言之,当我以与Fargate相同的方式将ECS与EC2一起使用时,有什么方法可以在cloudwatch中看到STDOUT吗?
因此,总而言之,当我以与Fargate相同的方式将ECS与EC2一起使用时,有什么方法可以在cloudwatch中看到STDOUT吗?
如果您的意思是EC2日志记录像Fargate一样容易而无需任何复杂的配置,则为no 。 您需要为EC2提供一些配置和实用程序,以允许登录到CloudWatch。 在我们启动的任何EC2实例中,ECS实例只是具有默认配置的某些操作系统的虚拟机,在这种情况下,即为Amazon ECS优化的AMI 。 我们应自行提供的其他服务和配置。
除了上面提供的链接之外,我还找到了这个CloudFormation模板 , 该模板将EC2 Spot Fleet配置为以第二个链接所描述的相同方式登录到CloudWatch。
我认为您不正确。 ECS任务启动中的StdOut日志与Fargate一样容易编写和访问,在EC2下运行。
据我所知,任务定义中只有这个,与Fargate中的相同:
"containerDefinitions": [
{
"dnsSearchDomains": null,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "my-log-family",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "my-stream-name"
}
}
...
启动后,您应该在my-log-family
下看到您的日志
如果您尝试将应用程序日志放入CloudWatch,那是另一回事...这通常是使用CloudWatch logs代理完成的,您必须将其安装到容器中,但是以上内容将捕获StdOut。
这就是我做的。
使用块:AWS.Logger.AspNetCore
使用示例:
static async Task Main(string[] args)
{
Logger loggerObj = new Logger();
ILogger<Program> logger = await loggerObj.CreateLogger("test", "eu-west-1");
logger.LogInformation("test info");
logger.LogError("test error");
}
public async Task<ILogger<Program>> CreateLogger(string logGroup, string region)
{
AWS.Logger.AWSLoggerConfig config = new AWS.Logger.AWSLoggerConfig();
config.Region = region;
config.LogStreamNameSuffix = "";
config.LogGroup = logGroup;
LoggerFactory logFactory = new LoggerFactory();
logFactory.AddAWSProvider(config);
return logFactory.CreateLogger<Program>();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.