使用 AWS-SDK 将数据发送到 CloudWatch
Sending data to CloudWatch using the AWS-SDK
我想使用 AWS-SDK(或任何可行的方法)将数据写入 CloudWatch。
我看到了这个:
唯一看起来像是将数据发布到 CloudWatch 的方法是 putMetricData
方法。但是很难找到使用它的示例。
有谁知道如何将数据发布到CloudWatch?
当我这样调用时:
cw.putMetricData({
Namespace: 'ec2-memory-usage',
MetricData: [{
MetricName:'first',
Timestamp: new Date()
}]
}, (err, result) => {
console.log({err, result});
});
我收到这个错误:
{ err:
{ InvalidParameterCombination: At least one of the parameters must be specified.
at Request.extractError (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/protocol/query.js:50:29)
at Request.callListeners (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
message: 'At least one of the parameters must be specified.',
code: 'InvalidParameterCombination',
time: 2019-07-08T19:41:41.191Z,
requestId: '688a4ff3-a1b8-11e9-967e-431915ff0070',
statusCode: 400,
retryable: false,
retryDelay: 7.89360948163893 },
result: null }
您收到此错误是因为您没有指定任何指标数据。您只设置指标名称和时间戳。您还需要为指标发送一些值。
假设您的应用程序正在测量请求的延迟,您观察到 5 个请求,延迟分别为 100 毫秒、500 毫秒、200 毫秒、200 毫秒和 400 毫秒。将此数据导入 CloudWatch 的选项很少(因此出现 At least one of the parameters must be specified.
错误)。
- 您可以通过在指标数据对象中设置
Value
一次发布这 5 个值。这是最简单的方法。 CloudWatch 为您完成所有聚合,您可以获得指标的百分位数。如果您需要发布许多观察结果,我不会推荐这种方法。此选项将导致向 CloudWatch 发出的请求最多,如果您开始发布过多的观察结果,这可能会导致 CloudWatch 方面的大额账单或限制。
例如:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
Value: 100
}]
- 您可以自己汇总数据并构建和发布
StatisticValues
。这对您来说更复杂,但对 CloudWatch 的请求最少。例如,您可以聚合一分钟,每分钟针对每个指标执行 1 次放置。这不会为您提供百分位数(因为您是在自己这边聚合数据,CloudWatch 不知道您观察到的确切值)。如果您不需要百分位数,我会推荐这个。
例如:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
StatisticValues: {
Maximum: 500,
Minimum: 100,
SampleCount: 5,
Sum: 1400
}
}]
- 您可以计算观察结果并发布
Values
和 Counts
。这有点两全其美。您这边有些复杂,但可以说计数比汇总到 StatisticValues 更容易。您仍在发送每个观察结果,因此 CloudWatch 将为您进行聚合,因此您将获得百分位数。该格式还允许发送比选项 1 中更多的数据。如果您需要百分位数,我会推荐这种格式。
例如:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
Values: [100, 200, 400, 500],
Counts: [1, 2, 1, 1]
}]
有关每个选项的更多详细信息,请参阅此处:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html#putMetricData-property
我想使用 AWS-SDK(或任何可行的方法)将数据写入 CloudWatch。
我看到了这个:
唯一看起来像是将数据发布到 CloudWatch 的方法是 putMetricData
方法。但是很难找到使用它的示例。
有谁知道如何将数据发布到CloudWatch?
当我这样调用时:
cw.putMetricData({
Namespace: 'ec2-memory-usage',
MetricData: [{
MetricName:'first',
Timestamp: new Date()
}]
}, (err, result) => {
console.log({err, result});
});
我收到这个错误:
{ err:
{ InvalidParameterCombination: At least one of the parameters must be specified.
at Request.extractError (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/protocol/query.js:50:29)
at Request.callListeners (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/Users/alex/codes/interos/jenkins-jobs/jobs/check-memory-ec2-instances/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
message: 'At least one of the parameters must be specified.',
code: 'InvalidParameterCombination',
time: 2019-07-08T19:41:41.191Z,
requestId: '688a4ff3-a1b8-11e9-967e-431915ff0070',
statusCode: 400,
retryable: false,
retryDelay: 7.89360948163893 },
result: null }
您收到此错误是因为您没有指定任何指标数据。您只设置指标名称和时间戳。您还需要为指标发送一些值。
假设您的应用程序正在测量请求的延迟,您观察到 5 个请求,延迟分别为 100 毫秒、500 毫秒、200 毫秒、200 毫秒和 400 毫秒。将此数据导入 CloudWatch 的选项很少(因此出现 At least one of the parameters must be specified.
错误)。
- 您可以通过在指标数据对象中设置
Value
一次发布这 5 个值。这是最简单的方法。 CloudWatch 为您完成所有聚合,您可以获得指标的百分位数。如果您需要发布许多观察结果,我不会推荐这种方法。此选项将导致向 CloudWatch 发出的请求最多,如果您开始发布过多的观察结果,这可能会导致 CloudWatch 方面的大额账单或限制。
例如:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
Value: 100
}]
- 您可以自己汇总数据并构建和发布
StatisticValues
。这对您来说更复杂,但对 CloudWatch 的请求最少。例如,您可以聚合一分钟,每分钟针对每个指标执行 1 次放置。这不会为您提供百分位数(因为您是在自己这边聚合数据,CloudWatch 不知道您观察到的确切值)。如果您不需要百分位数,我会推荐这个。
例如:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
StatisticValues: {
Maximum: 500,
Minimum: 100,
SampleCount: 5,
Sum: 1400
}
}]
- 您可以计算观察结果并发布
Values
和Counts
。这有点两全其美。您这边有些复杂,但可以说计数比汇总到 StatisticValues 更容易。您仍在发送每个观察结果,因此 CloudWatch 将为您进行聚合,因此您将获得百分位数。该格式还允许发送比选项 1 中更多的数据。如果您需要百分位数,我会推荐这种格式。
例如:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
Values: [100, 200, 400, 500],
Counts: [1, 2, 1, 1]
}]
有关每个选项的更多详细信息,请参阅此处:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html#putMetricData-property