1. 程式人生 > 其它 >TCE-虛擬機器、快照、雲盤、監控資料獲取

TCE-虛擬機器、快照、雲盤、監控資料獲取

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