2017-08-02 54 views
0

我試圖通過雲手表getMetricStatistics獲取我的S3存儲桶的存儲桶大小(BucketSizeBytes)。AWS節點SDK雲手表返回零數據點

我覺得我已經把一切都成立,但SDK沒有返回的數據點:

{ ResponseMetadata: { RequestId: 'ad520gfd4-7764-11e7-8084-2718255a18ba' }, 
    Label: 'BucketSizeBytes', 
    Datapoints: [] } 

我設置運行下面的代碼節點的應用程序:

const AWS = require('aws-sdk'); 
AWS.config.loadFromPath('./config.json'); 
const cloudwatch = new AWS.CloudWatch(); 

var startTime = new Date(2017, 07, 15); 
var endTime = new Date(2017, 08, 01); 

var params = { 
    EndTime: endTime, 
    MetricName: 'BucketSizeBytes', 
    Namespace: 'AWS/S3', 
    Period: 3600, 
    StartTime: startTime, 
    Dimensions: [ 
    { 
     Name: 'StorageType', 
     Value: 'StandardStorage' 
    } 
    ], 
    Statistics: [ 
    'Average' 
    ], 
    Unit: 'Bytes' 
}; 

cloudwatch.getMetricStatistics(params, function(err, data){ 

    if(err) { 
     console.log(err, err.stack); 
    } else { 
     console.log(data); 
    } 

}); 

我在配置文件中設置爲法蘭克福(eu-central-1),並且確保我已經在同一個文件中列出了我的存儲桶,並試圖連接到S3:

我也嘗試在AWS雲監視界面中設置完全相同的startDate和endDate以確保它具有數據。它做了。所以我只是不明白爲什麼我沒有收到任何數據點?關於我能做些什麼來解決它的任何想法?

+1

我通常會發現在這種情況下轉向aws-cli並從一個簡單的請求開始,返回的結果比我想要的要多得多,然後弄清楚如何一次添加一個參數以獲得更少的結果,直到我有我想要的。一旦你從CLI中找到你需要的東西,它可以很容易地轉換成任何其他SDK,因爲它們最終都會與相同的後端服務API進行交流。給那個鏡頭? –

+0

這幫我找到了問題。謝謝一堆。 –

回答

0

原來問題在於我的日期變量。我仍然習慣於JavaScript日期爲0的奇怪事實,所以我實際上試圖從未來的日期範圍獲取數據(令人尷尬)。用下面的更換日期變量解決了這個問題:

var startTime = new Date(2017, 06, 19); // 2017-07-18T22:00:00.000Z 
var endTime = new Date(2017, 07, 02); // 2017-08-01T22:00:00.000Z 

非常感謝您Michael - sqlbot的小費。不得不將它輸入aws cli迫使我輸入日期值,並且我收回了我期望的結果。

+0

嗨,我只是想知道'Period:3600'設置適合你嗎?我嘗試了與AWS JS SDK以及CLI相同的配置,它僅在白天返回數據。 – gustavH