使用 Winston 设置 AWS Cloudwatch
AWS Cloudwatch setup with Winston
我一直在阅读各种 articles/docs 并观看有关该主题的一些视频。我的问题是它们都以这样或那样的方式发生冲突。
我的目标是使用 winston 将所有控制台。logs/error 消息从我的 ec2 服务器发送到 Cloudwatch,这样 ec2 终端本身就不会记录任何日志。
困惑点:
- 如果我使用 winston-aws-cloudwatch or winston-cloudwatch,我是否仍需要在 AWS 上设置一个 IAM 用户,或者这些会在 Cloudwatch 中自动生成日志吗?
- 如果我按照 AWS documentation 设置 Cloudwatch,它会自动将任何 console.logs 从 EC2 服务器流式传输到 Cloudwatch 还是两者都会执行?如果是第一个,那我就不需要温斯顿了?
- 我可以将日志从我的本地开发服务器发送到 Cloudwatch(仅用于测试目的,一旦确定它可以正常工作,然后我将测试暂存并最终将其移至生产环境)还是必须来自EC2 实例?
- 我假设 AWS Cloudwatch 密钥与我用于帐户其余部分的 AWS 密钥相同?
当前代码:
var winston = require('winston'),
CloudWatchTransport = require('winston-aws-cloudwatch');
const logger = new winston.Logger({
transports: [
new (winston.transports.Console)({
timestamp: true,
colorize: true
})
]
});
const cloudwatchConfig = {
logGroupName: 'groupName',
logStreamName: 'streamName',
createLogGroup: false,
createLogStream: true,
awsConfig: {
aws_access_key_id: process.env.AWS_KEY_I_USE_FOR_AWS,
aws_secret_access_key: process.env.AWS_SECRET_KEY_I_USE_FOR_AWS,
region: process.env.REGION_CLOUDWATCH_IS_IN
},
formatLog: function (item) {
return item.level + ': ' + item.message + ' ' + JSON.stringify(item.meta)
}
};
logger.level = 3;
if (process.env.NODE_ENV === 'development') logger.add(CloudWatchTransport, cloudwatchConfig);
logger.stream = {
write: function(message, encoding) {
logger.info(message);
}
};
logger.error('Test log');
- 是
- 取决于您配置的传输。如果您只配置 CloudWatch,那么它只会在那里结束。目前您的代码有 2 个传输,一个是普通的控制台,另一个是 CloudWatchTransport,所以对于您当前的代码,两者都是。
- 只要您像通常使用任何 AWS 服务(S3、DB 等)那样指定您的密钥,您就可以将日志从您的 local/dev 设备推送到 CloudWatch。
- 取决于您的 IAM 用户是否拥有权限。但这是可能的。
我一直在阅读各种 articles/docs 并观看有关该主题的一些视频。我的问题是它们都以这样或那样的方式发生冲突。
我的目标是使用 winston 将所有控制台。logs/error 消息从我的 ec2 服务器发送到 Cloudwatch,这样 ec2 终端本身就不会记录任何日志。
困惑点:
- 如果我使用 winston-aws-cloudwatch or winston-cloudwatch,我是否仍需要在 AWS 上设置一个 IAM 用户,或者这些会在 Cloudwatch 中自动生成日志吗?
- 如果我按照 AWS documentation 设置 Cloudwatch,它会自动将任何 console.logs 从 EC2 服务器流式传输到 Cloudwatch 还是两者都会执行?如果是第一个,那我就不需要温斯顿了?
- 我可以将日志从我的本地开发服务器发送到 Cloudwatch(仅用于测试目的,一旦确定它可以正常工作,然后我将测试暂存并最终将其移至生产环境)还是必须来自EC2 实例?
- 我假设 AWS Cloudwatch 密钥与我用于帐户其余部分的 AWS 密钥相同?
当前代码:
var winston = require('winston'),
CloudWatchTransport = require('winston-aws-cloudwatch');
const logger = new winston.Logger({
transports: [
new (winston.transports.Console)({
timestamp: true,
colorize: true
})
]
});
const cloudwatchConfig = {
logGroupName: 'groupName',
logStreamName: 'streamName',
createLogGroup: false,
createLogStream: true,
awsConfig: {
aws_access_key_id: process.env.AWS_KEY_I_USE_FOR_AWS,
aws_secret_access_key: process.env.AWS_SECRET_KEY_I_USE_FOR_AWS,
region: process.env.REGION_CLOUDWATCH_IS_IN
},
formatLog: function (item) {
return item.level + ': ' + item.message + ' ' + JSON.stringify(item.meta)
}
};
logger.level = 3;
if (process.env.NODE_ENV === 'development') logger.add(CloudWatchTransport, cloudwatchConfig);
logger.stream = {
write: function(message, encoding) {
logger.info(message);
}
};
logger.error('Test log');
- 是
- 取决于您配置的传输。如果您只配置 CloudWatch,那么它只会在那里结束。目前您的代码有 2 个传输,一个是普通的控制台,另一个是 CloudWatchTransport,所以对于您当前的代码,两者都是。
- 只要您像通常使用任何 AWS 服务(S3、DB 等)那样指定您的密钥,您就可以将日志从您的 local/dev 设备推送到 CloudWatch。
- 取决于您的 IAM 用户是否拥有权限。但这是可能的。