之前曾經寫過獲得金山云云存儲KS3的方法,http://chenx1242.blog.51cto.com/10430133/1968857 但是這個方法的缺點很明顯,就是“要先list再算值”,消耗時間太多。於是乎還是得用SDK來達到獲取值得目的。
比如說我現在想的到js-online-private的"9.29TB"這個值,如圖:
使用adk之前,需要先#pip install ksc-sdk-python,整個腳本內容如下:
#!/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方法。
a=json.read(data)
如果發現使用read方法出現了“AttributeError: 'module' object has no attribute 'read'”這個錯誤,那麼就改成loads方法:
a=json.loads(data)
那麼返回來看一下我們得到的這個json字符串,它最外的一層是getMetricStatisticsResult,然後datapoints,再然後member,然後就是兩個值,分別是sum和timestamp,而我們要的是sum。於是乎,經過這一層層好像剝洋蔥的過程,要得到sum這個值結尾處應該這麼寫:
data=json.dumps(m,sort_keys=True,indent=4) today_storage=json.loads(data) print "today:" + today_storage['getMetricStatisticsResult']['datapoints']['member'][0]['sum']
這樣得到的就是單純的sum值了,如圖:
最後的最後,如果您覺得本文對您升職加薪有幫助,那麼請不吝贊助之手,刷一下下面的二維碼,贊助本人繼續寫更多的博文!