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 @   蒲公英PGY  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示