TCE 虚拟机、磁盘、快照、监控数据获取
[defaults]
SecretId=xx
SecretKey=yy
[params]
Limit = 100
MetricName = [
"CPUUsage",
"MemUsage",
"CvmDiskUsage"
]
[label]
label_endpoint=tag.tencentcloudapi.com
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)
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)
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)
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
![]()