AWS S3 监控请求数及流量
AWS S3 云存储 是按照存储容量,请求数,及网络流量三个维度进行收费。而如果涉及到使用S3 对外提供SaaS服务,成本分布及估算自然称为比较重要的需求。自然而言需要监控以上三个指标。先上官网说明性文档:https://docs.amazonaws.cn/AmazonS3/latest/dev/monitoring-overview.html文章目录1 监控指标2 Cloudwatch使用2..
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' } ] }
更多推荐
所有评论(0)