Amazon web services CLI和SDK之间的AWS Cloudwatch GetMetricData不一致

Amazon web services CLI和SDK之间的AWS Cloudwatch GetMetricData不一致,amazon-web-services,boto3,amazon-cloudwatch,aws-java-sdk,Amazon Web Services,Boto3,Amazon Cloudwatch,Aws Java Sdk,我正在尝试执行一个简单的CloudWatch查询来获取一些度量数据。我想得到实际的指标。使用AWS CLI,我获得了预期的行为。但是,使用客户端SDK(尝试了Python的Boto和Java的SDK),相同的(看起来)查询不会返回我的度量 我的查询条件在query.json中定义: [ { "Id": "test", "MetricStat": { "Metric": { "Namespace": "

我正在尝试执行一个简单的CloudWatch查询来获取一些度量数据。我想得到实际的指标。使用AWS CLI,我获得了预期的行为。但是,使用客户端SDK(尝试了Python的Boto和Java的SDK),相同的(看起来)查询不会返回我的度量

我的查询条件在
query.json
中定义:

[
    {
        "Id": "test",
        "MetricStat": {
            "Metric": {
                "Namespace": "MyNamespace",
                "MetricName": "MyMetric",
                "Dimensions": [
                    {
                        "Name": "SOURCE",
                        "Value": "TEST"
                    }
                ]
            },
            "Period": 3600,
            "Stat": "SampleCount",
            "Unit":"Seconds"
            },
        "ReturnData": true
    }
]
CLI这是可行的。返回我的度量值和时间戳

aws cloudwatch get-metric-data --max-items 10 --start-time "2020-05-01T00:00:00Z" --end-time "2020-06-01T00:00:00Z" --metric-data-queries file://./query.json
{
    "MetricDataResults": [
        {
            "Id": "test",
            "Label": "MyMetric",
            "Timestamps": [
                "2020-05-15T13:00:00Z",
...
            ],
            "Values": [
                1.0,
...
            ],
            "StatusCode": "Complete"
        }
    ],
    "Messages": []
}
Boto不会返回度量,即使来自同一个文件

In [77]: cw.get_metric_data(MetricDataQueries=json.load(open("query.json")), StartTime=datetime.datetime(2020,5,1), EndTime=datetime.datetime(2020,6,1), MaxDatapoints=10)
Out [77]: {'MetricDataResults': [{'Id': 'test',
   'Label': 'MyMetric',
   'Timestamps': [],       <--Why isn't this populated?
   'Values': [],
   'StatusCode': 'PartialData'}],

我不知道cli为什么会返回度量值,但我尝试过的两个CDK似乎都没有。有什么提示吗?

所以问题在于
MaxDataPoints

根据报告:

分页前请求应返回的最大数据点数。如果省略此项,则使用默认值100800

但是,在实践中,将该值设置得太低会导致返回no值。我可以推测,该值用于限制查询中检查的度量点或时段的数量,而不是返回

In [77]: cw.get_metric_data(MetricDataQueries=json.load(open("query.json")), StartTime=datetime.datetime(2020,1,5), EndTime=datetime.datetime(2020,1,6), MaxDatapoints=10)
...
{'MetricDataResults': [{'Id': 'test',
   'Label': 'Errors',
   'Timestamps': [],
   'Values': [],
   'StatusCode': 'PartialData'}],...
vs


也许有人能解释这种行为

因此问题在于
MaxDataPoints

根据报告:

分页前请求应返回的最大数据点数。如果省略此项,则使用默认值100800

但是,在实践中,将该值设置得太低会导致返回no值。我可以推测,该值用于限制查询中检查的度量点或时段的数量,而不是返回

In [77]: cw.get_metric_data(MetricDataQueries=json.load(open("query.json")), StartTime=datetime.datetime(2020,1,5), EndTime=datetime.datetime(2020,1,6), MaxDatapoints=10)
...
{'MetricDataResults': [{'Id': 'test',
   'Label': 'Errors',
   'Timestamps': [],
   'Values': [],
   'StatusCode': 'PartialData'}],...
vs


也许有人能解释这种行为

可能是因为cli和sdk处理日期的方式不同?一个可以使用utc时间,另一个可以使用您的本地时间?你有没有试过扩大boto3的射程?时间范围是一天,如果您的本地时间是use,或者utc时间,可能您的数据点超出范围?好主意,我认为您是对的,我的boto示例误用了日期规格。但仍然没有变化,我在时间范围内有完整的指标。可能是因为cli和sdk处理日期的不同?一个可以使用utc时间,另一个可以使用您的本地时间?你有没有试过扩大boto3的射程?时间范围是一天,如果您的本地时间是use,或者utc时间,可能您的数据点超出范围?好主意,我认为您是对的,我的boto示例误用了日期规格。但仍然没有变化,我有整个时间范围的完整指标。
In [78]: cw.get_metric_data(MetricDataQueries=json.load(open("query.json")), StartTime=datetime.datetime(2020,1,5), EndTime=datetime.datetime(2020,1,6), MaxDatapoints=1000)
...
{'MetricDataResults': [{'Id': 'test',
   'Label': 'Errors',
   'Timestamps': [datetime.datetime(2020, 5, 27, 15, 0, tzinfo=tzutc()),
    datetime.datetime(2020, 5, 27, 14, 0, tzinfo=tzutc()),
    datetime.datetime(2020, 5, 27, 13, 0, tzinfo=tzutc()),
...