我正在开发一个 Go 应用程序,我需要实现一种机制来跟踪 DynamoDB 表的上次访问时间。我正在使用适用于 Go 的 AWS 开发工具包 (
github.com/aws/aws-sdk-go-v2
)。
这是我的 Go 程序的简化版本:
// getLastAccessTime retrieves the last access time of a DynamoDB table using CloudWatch metrics
func getLastAccessTime(cloudWatchClient *cloudwatch.CloudWatch, tableName string) (time.Time, error) {
endTime := time.Now()
startTime := endTime.Add(-1 * time.Hour) // Look back 1 hour for example, adjust as needed
// Specify the CloudWatch metric query
metricDataQuery := &cloudwatch.GetMetricDataInput{
EndTime: aws.Time(endTime),
StartTime: aws.Time(startTime),
MetricDataQueries: []*cloudwatch.MetricDataQuery{
{
Id: aws.String("m1"),
MetricStat: &cloudwatch.MetricStat{
Metric: &cloudwatch.Metric{
Namespace: aws.String("AWS/DynamoDB"),
MetricName: aws.String("ConsumedReadCapacityUnits"),
Dimensions: []*cloudwatch.Dimension{
{
Name: aws.String("TableName"),
Value: aws.String(tableName),
},
},
},
Period: aws.Int64(60), // The granularity of the returned data in seconds
Stat: aws.String("Sum"),
},
},
},
}
// Retrieve CloudWatch metric data
result, err := cloudWatchClient.GetMetricData(metricDataQuery)
if err != nil {
return time.Time{}, err
}
// Extract the timestamp of the last data point
if len(result.MetricDataResults[0].Timestamps) > 0 {
return *result.MetricDataResults[0].Timestamps[len(result.MetricDataResults[0].Timestamps)-1], nil
}
return time.Time{}, fmt.Errorf("no data points found for table %s", tableName)
}
--它为每个表显示相同的时间。我如何才能准确地获得上次访问时间。此代码是否有任何错误,您可以向我提供您的版本吗?
AWS SDK for Go 中是否有直接方法来检索 DynamoDB 表的上次访问时间? 如果没有直接的方法,在 Go 应用程序中实现此功能的推荐方法是什么?
您应该将 SuccessfulRequestLatency 与 SampleCount 指标一起使用,而不是 ConsumedCapacity,这样会产生更准确的结果。