如何使用 AWS SDK 跟踪 Go 中 DynamoDB 表的上次访问时间

问题描述 投票:0回答:1

问题陈述:

我正在开发一个 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 应用程序中实现此功能的推荐方法是什么?

go amazon-dynamodb aws-sdk-go
1个回答
0
投票

您应该将 SuccessfulRequestLatency 与 SampleCount 指标一起使用,而不是 ConsumedCapacity,这样会产生更准确的结果。

© www.soinside.com 2019 - 2024. All rights reserved.