AWS S3 監控請求數及流量

AWS S3 雲存儲 是按照存儲容量,請求數,及網絡流量三個維度進行收費。而如果涉及到使用S3 對外提供SaaS服務,成本分佈及估算自然稱爲比較重要的需求。自然而言需要監控以上三個指標。

先上官網說明性文檔:
https://docs.amazonaws.cn/AmazonS3/latest/dev/monitoring-overview.html


1 監控指標

本人用到主要就是監控上訴存儲容量,請求數,及網絡流量 三個維度。而cloudwatch方式完全滿足需求
https://docs.amazonaws.cn/AmazonS3/latest/dev/cloudwatch-monitoring.html

這裏歸類一下本人用到的監控指標及相應限制

BucketSizeBytes
(桶大小)
此值通過彙總存儲桶中所有對象(當前對象和非當前對象)的大小計算得出,包括所有向存儲桶進行分段上傳而未完成的所有部分的大小。
NumberOfObjects
(桶對象總數)
存儲桶中存儲的除 GLACIER 存儲類之外的所有存儲類的對象總量。
AllRequests
(總請求數)
向 Amazon S3 存儲桶提出的 HTTP 請求 (不論類型如何) 的總數
GetRequests
(對象get請求數)
向 Amazon S3 存儲桶中的對象提出的 HTTP GET 請求的數量
PutRequests
(對象Put請求數)
向 Amazon S3 存儲桶中的對象提出的 HTTP PUT 請求的數量。
BytesDownloaded 爲向 Amazon S3 存儲桶提出的請求下載的字節數(請求的響應包含正文)。
BytesUploaded 包含向 Amazon S3 存儲桶提出的請求正文的已上傳字節數。

有了上面的指標,已經可以知道

  • 存儲容量: 桶存儲容量大小,桶對象數
  • 請求: 可以知道總請求數及GET PUT請求數了
  • 流量: 下載容量

如果需要更多指標請參考本節開頭文檔。

這裏要描述一下遇到的問題:
請求數及流量,可以使用監控過濾器進行統計。即可以根據S3 存儲前綴及 S3存儲標籤 來統計。
比如不同客戶使用不同篩選條件匹配S3前綴進行統計。主要這裏的監控條件均需要付費。
但存儲容量並不能使用這種方式進行監控。容量監控粒度大小僅能到桶

2 Cloudwatch使用

2.1 S3創建監控指標

在 AWS S3 控制檯管理 項目可以以前綴或tag 創建監控篩選條件。
正如上面所說這種篩選器只能統計請求及流量不能統計存儲容量。

在這裏插入圖片描述

2.2 調用Cloudwatch獲取指標數據

獲取指標主要用到AWS SDK 中Cloudwatch 類中 getMetricStatistics 這裏提供一個sample(Nodejs) 進行說明
一下函數爲統計當前月的數據(流量及請求數)
該函數AWS 文檔:https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html

以下有部分代碼爲獲取月初時間和月末時間

const AWS = require('aws-sdk');
const cloudwatch = new AWS.CloudWatch({accessKeyId: '', secretAccessKey: '',  region: 'cn-northwest-1'});
const time = new Date();
const startTime = new Date(time);
startTime.setDate(1);
startTime.setHours(0, 0, 0, 1);
const endTime = new Date(time);
const endTimeMonth = endTime.getMonth();
if(endTimeMonth+1 === 12){
  const endTimeYear =endTime.getFullYear();
  endTime.setFullYear(endTimeYear+1);
  endTime.setMonth(0);
  endTime.setDate(1);
  endTime.setHours(0, 0, 0, 0);
}else{
  endTime.setMonth(endTimeMonth+1);
  endTime.setDate(1);
  endTime.setHours(0, 0, 0, 0);
} 
console.info(startTime);
console.info(endTime);


const params = {
  EndTime: endTime, /* required */
  MetricName: 'GetRequests', //'AllRequests' BytesDownloaded BytesUploaded  1.1中指的各指標
  Namespace: 'AWS/S3', //S3 指標
  Period: 3600*24*31, /* required */ //以月份爲座標軸刻度
  StartTime: startTime, /* required */
  Dimensions: [
    {
      Name: 'BucketName', /* required */
      Value: 'TESTBucketName'//桶名
    },
    {
      Name: 'FilterId', /* required */
      Value:"5d132dd06d0da00d01000110" //篩選器ID
    },
  ],
  Statistics: [
    'Sum'//' ',  計數方式
  ]
};
cloudwatch.getMetricStatistics(params, function(err, data) {
  if (err){
    console.info(err);
  }
  else{
    console.info(data);          // successful response
  }  
});

返回的值如下:
GetRequests:

{ ResponseMetadata: { RequestId: '697567b9-c912-4c55-80da-62a602f62e47' },
  Label: 'GetRequests',
  Datapoints:
   [ { Timestamp: 2019-11-30T16:00:00.000Z, Sum: 128, Unit: 'Count' } ] }

BytesDownloaded:

{ ResponseMetadata: { RequestId: 'd5253e68-7a36-4235-a1e1-3442409d6fbb' },
  Label: 'BytesDownloaded',
  Datapoints:
   [ { Timestamp: 2019-11-30T16:00:00.000Z,
       Sum: 17243087,
       Unit: 'Bytes' } ] }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章