TCE-虛擬機器、快照、雲盤、監控資料獲取
阿新 • • 發佈:2021-08-11
TCE 虛擬機器、磁碟、快照、監控資料獲取
- setting.ini
[defaults]
SecretId=xx
SecretKey=yy
[params]
Limit = 100
MetricName = [
"CPUUsage",
"MemUsage",
"CvmDiskUsage"
]
[label]
label_endpoint=tag.tencentcloudapi.com
- main.py
import json import configparser import os import xlwt import tce_cvm_get import tce_snap_list import tce_cbs_info import tce_cvm_monitor class excel_write(object): def __init__(self, filepath): style = xlwt.XFStyle() font = xlwt.Font() pattern = xlwt.Pattern() alignment = xlwt.Alignment() font.colour_index = 1 # 字型顏色 font.name = "宋體" # 字型 font.bold = True # 加粗 alignment.horz = 2 # 對齊方式,居中 pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = 23 # 背景顏色 style.alignment = alignment style.pattern = pattern style.font = font self.style = style self.Workbook = xlwt.Workbook() self.filepath = filepath def data_write(self, line_title, datas, sheet_name): sheet1 = self.Workbook.add_sheet(sheet_name, cell_overwrite_ok=True) for x in range(len(line_title)): sheet1.col(x).width = (15*367) sheet1.write(0, x, line_title[x], self.style) i = 1 # i 值為excel從第幾行開始寫 for data in datas: for j in range(len(data)): sheet1.write(i, j, str(data[j])) i = i + 1 self.Workbook.save(self.filepath) if __name__ == '__main__': config = configparser.ConfigParser() config.read("setting.ini", encoding="utf-8") params = {} cvms = tce_cvm_get.getCvmInfo(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey')) cvms.getCvmInfo() cvm_list = cvms.cvm_info_clean() cbs = tce_cbs_info.getCbsInfo(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey')) cbs.getCbsInfo(params) cbs_list = cbs.cbs_info_clean() snap = tce_snap_list.snap_list_get(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey')) snap.snap_list_get(params) snap_list = snap.snap_list_clean() cvminfo = tce_cvm_monitor.getCvmInfo(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey')) instances = cvminfo.getCvmInfo() monitor_info = tce_cvm_monitor.getCvmMonitor(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey'), instances, json.loads(config.get('params', 'MetricName'))) monitor_data = monitor_info.getCvmMonitorData() path = os.path.dirname(os.path.abspath(__file__)) final_path = os.path.join(path, "tce_cvm_cbs_snap.xls") cvm_title = ['InstanceId', 'InstanceName', 'InstanceType', 'InstanceState', 'OsName', 'ImageId', 'Uuid', 'CPU', 'Memory', 'PrivateIpAddresses', 'SysDiskId', 'SystemDisk', 'DataDisks', 'VpcId', 'SubnetId', 'CreatedTime', 'SecurityGroupIds'] cbs_title = ['DiskId', 'DiskName', 'InstanceType', 'DiskUsage', 'DiskSize', 'Zone', 'InstanceId', 'SnapshotCount', 'DiskType', 'DiskState', 'CreateTime'] snap_title = ['SnapshotId', 'SnapshotName', 'SnapshotState', 'SnapshotType', 'DiskUsage', 'DiskId', 'DiskSize', 'ImageCount', 'Zone', 'CreateTime'] monitor_title = ['InstanceId', 'InstanceName', 'InstanceState', 'OsName', 'CPU', 'Memory', 'PrivateIpAddresses', 'CpuUage', 'MemoryUsage', 'DiskUsage'] sheet_cvm = "CVM清單" sheet_cbs = "CBS清單" sheet_snap = "快照清單" sheet_monitor = "CVM監控資料" excel_output = excel_write(final_path) excel_output.data_write(cvm_title, cvm_list, sheet_cvm) excel_output.data_write(cbs_title, cbs_list, sheet_cbs) excel_output.data_write(snap_title, snap_list, sheet_snap) excel_output.data_write(monitor_title, monitor_data, sheet_monitor)
- 虛擬機器模組 tce_cvm_get.py
import json import configparser import os import xlwt from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.cvm.v20170312 import cvm_client, models def setStyle(name): style = xlwt.XFStyle() font = xlwt.Font() pattern = xlwt.Pattern() alignment = xlwt.Alignment() font.colour_index = 1 # 字型顏色 font.name = name # 字型 font.bold = True # 加粗 alignment.horz = 2 # 對齊方式,居中 pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = 23 # 背景顏色 style.alignment = alignment style.pattern = pattern style.font = font return style def data_write(filepath, datas): f = xlwt.Workbook() sheet1 = f.add_sheet(u'虛擬機器清單', cell_overwrite_ok=True) line_01 = ['InstanceId', 'InstanceName', 'InstanceType', 'InstanceState', 'OsName', 'ImageId', 'Uuid', 'CPU', 'Memory', 'PrivateIpAddresses', 'SysDiskId', 'SystemDisk', 'DataDisks', 'VpcId', 'SubnetId', 'CreatedTime', 'SecurityGroupIds'] for x in range(len(line_01)): sheet1.write(0, x, line_01[x], setStyle("宋體")) i = 1 # i 值為excel從第幾行開始寫 for data in datas: for j in range(len(data)): sheet1.write(i, j, str(data[j])) i = i + 1 f.save(filepath) class getCvmInfo(object): def __init__(self, SecretId, SecretKey): self.SecretId = SecretId self.SecretKey = SecretKey self.cvm_info = "" def getCvmInfo(self): try: cred = credential.Credential(self.SecretId, self.SecretKey) httpProfile = HttpProfile() httpProfile.endpoint = "cvm.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cvm_client.CvmClient(cred, "ap-guangzhou", clientProfile) req = models.DescribeInstancesRequest() params = { "Limit": 100 } req.from_json_string(json.dumps(params)) resp = client.DescribeInstances(req) self.cvm_info = resp.to_json_string() except TencentCloudSDKException as err: print(err) def cvm_info_clean(self): cvm_lists = [] cvm_data = json.loads(self.cvm_info) if not cvm_data: print("the cvm info is not get") else: for cvm in cvm_data.get('InstanceSet'): cvm_list = [] cvm_list.append(cvm.get("InstanceId")) cvm_list.append(cvm.get("InstanceName")) cvm_list.append(cvm.get("InstanceType")) cvm_list.append(cvm.get("InstanceState")) cvm_list.append(cvm.get("OsName")) cvm_list.append(cvm.get("ImageId")) cvm_list.append(cvm.get("Uuid")) cvm_list.append(cvm.get("CPU")) cvm_list.append(cvm.get("Memory")) cvm_list.append(cvm.get("PrivateIpAddresses")) cvm_list.append(cvm.get("SystemDisk").get('DiskId')) cvm_list.append(cvm.get("SystemDisk").get('DiskSize')) # cvm_list.append(cvm.get("SystemDisk").get('DiskType')) if len(cvm.get('DataDisks')) > 0: tmp = [] for disk in cvm.get('DataDisks'): disk_info = disk.get('DiskId') + ":" + str(disk.get('DiskSize')) # disk.get('DiskId') # disk.get('DiskSize') tmp.append(disk_info) cvm_list.append(tmp) else: cvm_list.append("Null") # cvm_list.append(cvm.get("DataDisks")) # cvm_list.append(cvm.get("DataDisks").get('DiskType')) cvm_list.append(cvm.get("VirtualPrivateCloud").get('VpcId')) cvm_list.append(cvm.get("VirtualPrivateCloud").get('SubnetId')) cvm_list.append(cvm.get("CreatedTime")) cvm_list.append(cvm.get("SecurityGroupIds")) cvm_lists.append(cvm_list) return cvm_lists if __name__ == '__main__': config = configparser.ConfigParser() config.read("setting.ini", encoding="utf-8") cvminfo = getCvmInfo(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey')) cvminfo.getCvmInfo() data = cvminfo.cvm_info_clean() path = os.path.dirname(os.path.abspath(__file__)) final_path = os.path.join(path, "test.xls") # print(data) data_write(final_path, data) # print(cvminfo.getCvmInfo())
- 虛擬機器監控資料 tce_cvm_monitor.py
import json import configparser import os import xlwt from datetime import datetime, timedelta from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.monitor.v20180724 import monitor_client, models as monitor_models from tencentcloud.cvm.v20170312 import cvm_client, models class getCvmInfo(): def __init__(self, Id, Key): self.SecretId = Id self.SecretKey = Key def getCvmInfo(self): try: cred = credential.Credential(self.SecretId, self.SecretKey) httpProfile = HttpProfile() httpProfile.endpoint = "cvm.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cvm_client.CvmClient(cred, "ap-guangzhou", clientProfile) req = models.DescribeInstancesRequest() params = { "Limit": 100 } req.from_json_string(json.dumps(params)) resp = client.DescribeInstances(req) # return resp data = json.loads(resp.to_json_string()) cvm_tmp = [] for cvm in data.get('InstanceSet'): instances = {} instances['InstanceId'] = cvm.get('InstanceId') instances['InstanceName'] = cvm.get('InstanceName') instances['InstanceState'] = cvm.get('InstanceState') instances['OsName'] = cvm.get('OsName') instances['CPU'] = cvm.get('CPU') instances['Memory'] = cvm.get('Memory') instances['PrivateIpAddresses'] = cvm.get('PrivateIpAddresses') cvm_tmp.append(instances) return cvm_tmp except TencentCloudSDKException as err: print(err) class getCvmMonitor(): def __init__(self, Id, Key, instances, MetricName): self.SecretId = Id self.SecretKey = Key self.instances = instances self.MetricName = MetricName def getCvmMonitorData(self): try: cred = credential.Credential(self.SecretId, self.SecretKey) httpProfile = HttpProfile() httpProfile.endpoint = "monitor.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = monitor_client.MonitorClient(cred, "ap-guangzhou", clientProfile) req = monitor_models.GetMonitorDataRequest() date_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") date_last_5min = datetime.now() - timedelta(minutes=5) date_str = date_last_5min.strftime("%Y-%m-%d %H:%M:%S") final_value = [] for instance in self.instances: monitor_list = [] monitor_list.append(instance.get('InstanceId')) monitor_list.append(instance.get('InstanceName')) monitor_list.append(instance.get('InstanceState')) monitor_list.append(instance.get('OsName')) monitor_list.append(instance.get('CPU')) monitor_list.append(instance.get('Memory')) monitor_list.append(instance.get('PrivateIpAddresses')) for metric in self.MetricName: params = { "Namespace": "QCE/CVM", "MetricName": metric, "Period": 300, "StartTime": date_str, "EndTime": date_now, "Instances": [ { "Dimensions": [ { "Name": "InstanceId", "Value": instance.get('InstanceId') } ] } ] } req.from_json_string(json.dumps(params)) resp = client.GetMonitorData(req) monitor_data = json.loads(resp.to_json_string()) value = monitor_data.get('DataPoints')[0] # print(value.get('Values')) if len(value.get('Values')) > 0: avg_value = sum(value.get('Values'))/len(value.get('Values')) else: avg_value = 0 # print(round(avg_value, 2)) monitor_list.append(round(avg_value, 2)) final_value.append(monitor_list) return final_value except TencentCloudSDKException as err: print(err) def setStyle(name): style = xlwt.XFStyle() font = xlwt.Font() pattern = xlwt.Pattern() alignment = xlwt.Alignment() font.colour_index = 1 # 字型顏色 font.name = name # 字型 font.bold = True # 加粗 alignment.horz = 2 # 對齊方式,居中 pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = 23 # 背景顏色 style.alignment = alignment style.pattern = pattern style.font = font return style def data_write(filepath, datas): f = xlwt.Workbook() sheet1 = f.add_sheet(u'虛擬機器清單', cell_overwrite_ok=True) line_01 = ['InstanceId', 'InstanceName', 'InstanceState', 'OsName', 'CPU', 'Memory', 'PrivateIpAddresses', 'CpuUage', 'MemoryUsage', 'DiskUsage'] for x in range(len(line_01)): sheet1.write(0, x, line_01[x], setStyle("宋體")) i = 1 # i 值為excel從第幾行開始寫 for data in datas: for j in range(len(data)): sheet1.write(i, j, str(data[j])) i = i + 1 f.save(filepath) if __name__ == '__main__': config = configparser.ConfigParser() config.read("setting.ini", encoding="utf-8") cvminfo = getCvmInfo(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey')) instances = cvminfo.getCvmInfo() monitor_info = getCvmMonitor(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey'), instances, json.loads(config.get('params', 'MetricName'))) monitor_data = monitor_info.getCvmMonitorData() path = os.path.dirname(os.path.abspath(__file__)) final_path = os.path.join(path, "monitor.xls") data_write(final_path, monitor_data)
- 雲盤清單 tce_cbs_info.py
import json
import configparser
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.cbs.v20170312 import cbs_client, models
class getCbsInfo(object):
def __init__(self, SecretId, SecretKey):
self.SecretId = SecretId
self.SecretKey = SecretKey
self.cbsinfo = ""
def getCbsInfo(self, params):
try:
cred = credential.Credential(self.SecretId, self.SecretKey)
httpProfile = HttpProfile()
httpProfile.endpoint = "cbs.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = cbs_client.CbsClient(cred, "ap-guangzhou", clientProfile)
req = models.DescribeDisksRequest()
req.from_json_string(json.dumps(params))
resp = client.DescribeDisks(req)
self.cbsinfo = resp.to_json_string()
except TencentCloudSDKException as err:
print(err)
def cbs_info_clean(self):
cbs_data = json.loads(self.cbsinfo)
cbs_lists = []
if not cbs_data:
print("please execute obj.getcbsinfo() first")
else:
for cbs_disk in cbs_data.get('DiskSet'):
cbs_list = []
cbs_list.append(cbs_disk.get('DiskId'))
cbs_list.append(cbs_disk.get('DiskName'))
cbs_list.append(cbs_disk.get('InstanceType'))
cbs_list.append(cbs_disk.get('DiskUsage'))
cbs_list.append(cbs_disk.get('DiskSize'))
cbs_list.append(cbs_disk.get('Placement').get('Zone'))
cbs_list.append(cbs_disk.get('InstanceId'))
cbs_list.append(cbs_disk.get('SnapshotCount'))
cbs_list.append(cbs_disk.get('DiskType'))
cbs_list.append(cbs_disk.get('DiskState'))
cbs_list.append(cbs_disk.get('CreateTime'))
# print(cbs_list)
cbs_lists.append(cbs_list)
return cbs_lists
if __name__ == '__main__':
config = configparser.ConfigParser()
config.read("setting.ini", encoding="utf-8")
cbs = getCbsInfo(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey'))
params = {}
cbs.getCbsInfo(params)
cbs_info = cbs.cbs_info_clean()
print(cbs_info)
- 快照清單 tce_snap_list.py
import json
import configparser
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.cbs.v20170312 import cbs_client, models
class snap_list_get(object):
def __init__(self, SecretId, SecretKey):
self.SecretId = SecretId
self.SecretKey = SecretKey
self.snaps = ""
def snap_list_get(self, params):
try:
cred = credential.Credential(self.SecretId, self.SecretKey)
httpProfile = HttpProfile()
httpProfile.endpoint = "cbs.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = cbs_client.CbsClient(cred, "ap-guangzhou", clientProfile)
req = models.DescribeSnapshotsRequest()
# params = {
# }
req.from_json_string(json.dumps(params))
resp = client.DescribeSnapshots(req)
self.snaps = resp.to_json_string()
# print(resp.to_json_string())
except TencentCloudSDKException as err:
print(err)
def snap_list_clean(self):
snap_data = json.loads(self.snaps)
snap_lists = []
if not snap_data:
pass
else:
for snap in snap_data.get('SnapshotSet'):
snap_list = []
snap_list.append(snap.get('SnapshotId'))
snap_list.append(snap.get('SnapshotName'))
snap_list.append(snap.get('SnapshotState'))
snap_list.append(snap.get('SnapshotType'))
snap_list.append(snap.get('DiskUsage'))
snap_list.append(snap.get('DiskId'))
snap_list.append(snap.get('DiskSize'))
snap_list.append(snap.get('ImageCount'))
snap_list.append(snap.get('Placement').get('Zone'))
snap_list.append(snap.get('CreateTime'))
snap_lists.append(snap_list)
return snap_lists
if __name__ == '__main__':
config = configparser.ConfigParser()
config.read("setting.ini", encoding="utf-8")
snap = snap_list_get(config.get('defaults', 'SecretId'), config.get('defaults', 'SecretKey'))
params = {}
snap.snap_list_get(params)
snap_list = snap.snap_list_clean()
print(snap_list)
- 清單資料tce_cvm_cbs_snap.xls