前两天看了下阿里云api的使用,测试了下使用api获取RDS性能监控数据,中间遇到了些坑,在此记录一下,以警后人!

前言 阿里云api使用

RDS和ECS的API使用方法相同,都是先生成request对象,然后set各种属性,最后通过AcsClient对象实现request请求获取response消息体即可。下边直接上实例代码:

点击(此处)折叠或打开

  1. from aliyunsdkrds.request.v20140815 import DescribeDBInstancesRequest
  2. from aliyunsdkrds.request.v20140815 import DescribeDBInstancePerformanceRequest

  3. time_format = "%Y-%m-%dT%H:%MZ"
  4. ……

  5. def getPerformance(client, n_minutes_before):
  6.     m15_before = timeDelta(n_minutes_before)
  7.     request = DescribeDBInstancePerformanceRequest.DescribeDBInstancePerformanceRequest()
  8.     request.set_DBInstanceId("rm-xxxxxxxxxxxx")
  9.     request.set_Key("MySQL_IOPS")
  10.     request.set_StartTime(m15_before)
  11.     request.set_EndTime(current_time)
  12.     request.set_action_name("DescribeDBInstancePerformance")
  13.     response = client.do_action_with_exception(request)
  14.     response = json.loads(response)
  15.     print(response)

坑之一

StartTime和EndTime的时间格式。
必须是ISO8601时间格式,形如“YYYY-mm-ddTHH:MMZ”(注意:只能到分钟,如果精确到秒回报错。。);
必须是UTC时区,由于我们这边跟UTC时区时间相差8小时,当前时间需要转换一下,如:

点击(此处)折叠或打开

  1. current_time = (datetime.now()-timedelta(hours=8)).strftime(time_format)


坑之二

无法获取实时数据。
如果是通用型RDS,最多只能获取5分钟之前的数据,想要将刷新频率设置到1m/次需要额外收费。。

10-09 13:02