利用金山云SDK获取KS3存储值的办法
之前曾经写过获得金山云云存储KS3的方法,http://chenx1242.blog.51cto.com/10430133/1968857 但是这个方法的缺点很明显,就是“要先list再算值”,消耗时间太多。于是乎还是得用SDK来达到获取值得目的。
比如说我现在想的到js-online-private的"9.29TB"这个值,如图:
使用adk之前,需要先#pip install ksc-sdk-python,整个脚本内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/usr/bin/env python # -*- encoding:utf-8 -*- from kscore.session import get_session
import json
#** ACCESS_KEY_ID = "这里填写帐号ak"
SECRET_ACCESS_KEY = "这里填写帐号sk"
s = get_session()
def gettodayoss():
client = s.create_client( "monitor" , "区域名称" ,ks_access_key_id = ACCESS_KEY_ID, ks_secret_access_key = SECRET_ACCESS_KEY)
m = client.get_metric_statistics(InstanceID = "这里填写bucket名" ,Namespace = "ks3" ,MetricName = "ks3.bucket.capacity.total.sd" ,StartTime = "2017-10-22T10:00:00Z" ,EndTime = "2017-10-23T11:00:00Z" ,Period = "86400" ,Aggregate = "sum" )
data = json.dumps(m,sort_keys = True ,indent = 4 )
print (data)
if __name__ = = "__main__" :
gettodayoss()
|
执行效果如图:
单位换算一下:
metric支持如下几个参数:
ks3.bucket.capacity.total: 总容量(存储量)
ks3.bucket.capacity.add:增加容量(存储量)
ks3.bucket.capacity.del: 删除容量(存储量)
ks3.bucket.flow.up: 上传流量(外网)
ks3.bucket.flow.down:下载流量(外网)
ks3.bucket.bandwidth:下载带宽
ks3.bucket.getcount: get次数
ks3.bucket.putcount:put次数
这里有几点注意!
1)**一定是要填写帐号的ak/sk,而不是云存储权限的ak/sk,我也知道这样填写权限过大,是一个很危险的事儿,但是没办法,金山云就是这么设计的;
2)查看云存储的话,区域名称一定要写cn-beijing-6,因为ks3的监控数据都在北京存储;
3)StartTime和EndTime之间一定要大于24小时;
4)金山云的云存储统计跟阿里云的云存储统计一样都是有延迟的,不过金山云的延迟是一天,也就是说StartTime和EndTime要至少写昨天的;
新的知识点!
例子脚本获到的是一个json的数据结构,那么如何从那一大串内容里得到sum这个值呢?
json的数据结构其实是一个str类型,而它基本上是key/value的,这个类型在python里就是字典,那么就应该有字典的方式去读取。
将json转化成字典类型,一般来说用json模块的read方法。
1
|
a = json.read(data)
|
如果发现使用read方法出现了“AttributeError: 'module' object has no attribute 'read'”这个错误,那么就改成loads方法:
1
|
a = json.loads(data)
|
那么返回来看一下我们得到的这个json字符串,它最外的一层是getMetricStatisticsResult,然后datapoints,再然后member,然后就是两个值,分别是sum和timestamp,而我们要的是sum。于是乎,经过这一层层好像剥洋葱的过程,要得到sum这个值结尾处应该这么写:
1
2
3
|
data = json.dumps(m,sort_keys = True ,indent = 4 )
today_storage = json.loads(data)
print "today:" + today_storage[ 'getMetricStatisticsResult' ][ 'datapoints' ][ 'member' ][ 0 ][ 'sum' ]
|
这样得到的就是单纯的sum值了,如图:
最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!