python使用AliyunOpenApi获取MongoDB监控数据

python使用AliyunOpenApi获取MongoDB监控数据

Mongo_cpu.py

import sys
import json
import datetime,time
from json import loads, dumps
from typing import List
from alibabacloud_dds20151201.client import Client as Dds20151201Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dds20151201 import models as dds_20151201_models

# 时间处理函数
def time2iso(dt):
    """本地时间转UTC时间(-8:00)"""
    # print(dt)
    cr_date =  datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M')
    # print(cr_date)
    time_struct = time.mktime(cr_date.timetuple())
    utc_st = datetime.datetime.utcfromtimestamp(time_struct)
    # print(str(utc_st)[:-2])
    utc_st = (str(utc_st)[:-3]).replace(' ','T') + 'Z'
    return utc_st

class MongoDBIns():
    def __init__(self,starttime,endtime):
        self.starttime = time2iso(starttime[:-3])
        self.endtime = time2iso(endtime[:-3])
        self.keys = "CpuUsage,DiskUsage,MongoDB_IOPS,MemoryUsage,MongoDB_Connections,MongoDB_Network"
        self.ak = "AK_ID"
        self.sk = "AK_SRT"
        self.instance = 'dds-ddddddddddd'

    # @staticmethod
    def create_client(self) -> Dds20151201Client:
        """
        使用AK&SK初始化账号Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 您的AccessKey ID,
            access_key_id=self.ak,
            # 您的AccessKey Secret,
            access_key_secret=self.sk
        )
        # 访问的域名
        config.endpoint = 'mongodb.aliyuncs.com'
        # print(Dds20151201Client(config))
        return Dds20151201Client(config)


    # @staticmethod
    def main(self):
        client = self.create_client()
        # print(self.starttime,self.endtime)
        describe_dbinstance_performance_request = dds_20151201_models.DescribeDBInstancePerformanceRequest(
            dbinstance_id=self.instance,
            key=self.keys,
            start_time=self.starttime,
            end_time=self.endtime
        )
        # 复制代码运行请自行打印 API 的返回值
        resp = client.describe_dbinstance_performance(describe_dbinstance_performance_request)
        mon_con = []
        cpu = []
        disk = []
        iops = []
        mem = []
        net = []
        data = []
        for mrs in resp.to_map()["body"]["PerformanceKeys"]["PerformanceKey"]:
            if "MongoDB_Connections" in mrs.values():
                for val in mrs["PerformanceValues"]["PerformanceValue"]:
                    mon_con.append(val['Value'])
            if "CpuUsage" in mrs.values():
                for val in mrs["PerformanceValues"]["PerformanceValue"]:
                    cpu.append(val['Value'])
            if "DiskUsage" in mrs.values():
                for val in mrs["PerformanceValues"]["PerformanceValue"]:
                    disk.append(val['Value'])
            if "MongoDB_IOPS" in mrs.values():
                for val in mrs["PerformanceValues"]["PerformanceValue"]:
                    iops.append(val['Value'].split('&')[0])
                    iops.append(val['Value'].split('&')[1])
            if "MemoryUsage" in mrs.values():
                for val in mrs["PerformanceValues"]["PerformanceValue"]:
                    mem.append(val['Value'])
            if "MongoDB_Network" in mrs.values():
                for val in mrs["PerformanceValues"]["PerformanceValue"]:
                    net.append(val['Value'].split("&")[0])
                    net.append(val['Value'].split("&")[1])
        data = {"mon_con":max(mon_con),"cpu":max(cpu),"disk":str(max(disk))+"%","iops":max(iops),"mem":max(mem),"net":max(net)}
        # print(data)
        return data


posted @ 2022-06-07 13:58  蒲公英PGY  阅读(97)  评论(0编辑  收藏  举报