统计阿里云ECS磁盘使用率

  1. 一、缘由
  2. 二、环境
  3. 三、代码实现

一、缘由

公司阿里云主机很多业务模块,经常受磁盘告警烦恼,尤其是在周末或者假期,运维不敢随意清理,就得找开发确认乐之后才能清理。

为了减少假期的磁盘告警,保证业务的正常运行,可在周五或者假期前一天统计所有主机的磁盘使用率,对于大于65%的,一一进行核对和清理。

二、环境

Python3.7 + 阿里云云监控SDK。

三、代码实现

调用阿里云云监控的接口,来查询磁盘使用率,并最终输出文档,按磁盘使用率倒序排列。

# -*- coding: utf-8 -*-
import sys
import json
import time

from typing import List
from operator import itemgetter

from alibabacloud_cms20190101.client import Client as Cms20190101Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_cms20190101 import models as cms_20190101_models


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client(
        access_key_id: str,
        access_key_secret: str,
    ) -> Cms20190101Client:
        """
        使用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='xxxxxxxxx',
            # 您的AccessKey Secret,
            access_key_secret='xxxxxxxx'
        )
        # 访问的域名
        config.endpoint = 'metrics.cn-hangzhou.aliyuncs.com'
        return Cms20190101Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client('accessKeyId', 'accessKeySecret')
        describe_metric_list_request = cms_20190101_models.DescribeMetricListRequest(
            metric_name='diskusage_utilization',
            namespace='acs_ecs_dashboard',
            period='60',
            start_time=args[1],
            end_time=args[2],
            length='100',
            next_token=args[0]
        )
        # 复制代码运行请自行打印 API 的返回值
        res = client.describe_metric_list(describe_metric_list_request)
        return res.body


def get_disk_usage(api_res):
    disk_list = []
    # print(dir(api_res))
    res_list = json.loads(api_res.datapoints)
    for i in range(0, len(res_list)):
        disk_list_tmp = [res_list[i]['instanceId'], res_list[i]['diskname'], res_list[i]['Average']]
        disk_list.append(disk_list_tmp)
    return disk_list


if __name__ == '__main__':
    token = 'init_data'
    disk_info = []
    # 不能取当前时间,当前时间太近了,没有最新的监控数据。
    day = time.strftime('%Y-%m-%d', time.localtime())
    start_time = str(round((time.time()-300)*1000))
    end_time = str(round((time.time()-240)*1000))
    while token:
        result = Sample.main([token, start_time, end_time])
        token = result.next_token
        disk_res = get_disk_usage(result)
        disk_info.extend(disk_res)
    order_disk_info = sorted(disk_info, key=itemgetter(2), reverse=True)
    with open('statistics_disk_{}.txt'.format(day), 'w') as f:
        f.write('ECS实例ID \t\t盘符 \t\t磁盘使用率\n')
        for i in range(0, len(order_disk_info)):
            f.write(str(order_disk_info[i])+'\n')

注意:输出文档只有实例ID,如果显示实例名称,可以参考另一篇文章的接口调用。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lxwno.1@163.com

×

喜欢就点赞,疼爱就打赏