如何灵活使用OSS监控数据动态调整OSS服务参数

如题,本文的目的是为了提供一种使用OSS监控服务的数据灵活控制OSS服务形态的例子,以方便大家能够举一反三,实现更多的通用方法解决多样的需求。

        其实OSS监控服务已经提供了报警功能,能够方便用户对OSS已经提供的metric指标进行监控报警,及时发现问题并进行处理。但是这种报警也只是做到了通知用户,通过邮件、旺旺、短信的方式,然而接下来如何行动,还是要靠用户自己了。另外,监控项的监控,仅仅是当前的监控情况,还没有对一段时间内的数据累计(或者求峰谷值、平均值等等)情况进行监控的功能。

        虽然如此,别忘了OSS监控服务提供了数据访问的Open API,还有多种语言的SDK,方便你处理你的数据。如果能够用好这些监控数据,联结各种产品的提供的接口,可以解决很多特制的需求。

        这里我举个使用的场景吧。之前在论坛上看到过用户吐槽OSS没有流量监控功能,后来监控服务上线之后,又有位童鞋给我留言说还是不能满足他的需求,因为他希望OSS在流量使用的“累计总值”超过他设置的阈值之后,能够自动限制对他的Bucket资源的请求情况。

下面呢,我就结合OSS监控服务的SDK和OSS的SDK,给大家演示一下,满足一下这位童鞋的需求哈。

需求分析:

在bucket的权限为public read的情况下,用户的bucket可以接受任何合法的读请求访问,获取数据,从而产品流出流量。而公网流出流量我们是会收取流量资费的。

如果用户希望控制每日的费用支出,那么可以在每天流量消耗到一定的程度,就收回bucket的public read权限,改为private。那么在流量超限之后,所有的请求将会受到“AccessDeny”错误码。

这样,你的目的就到达了,是吧。

代码示例:

这里简单写个代码示例演示一下,如何满足以上需求功能:

代码功能:

        从进程启动开始监控流量使用总量,每10分钟获取一次流量监控数据(每分钟一个值),如果总量超过设置的阈值,那么设置bucket的acl为private,退出进程。

#!/bin/env python
#-*- coding:utf-8 -*-

from aliyunsdkcore import client
from aliyunsdkcms.request.v20151020 import QueryMetricRequest

import oss2
import time
import json

# 请填好您的配置
access_id = 'your access id'
access_key = 'your access key'
bucket_name = 'your bucket'
endpoint = 'your endpoint'

# util func
def date_2_sec(s, format = '%Y-%m-%d %H:%M:%S'):
    tp = time.strptime(s, format)
    return int(time.mktime(tp))

def sec_2_date(sec, format = '%Y-%m-%d %H:%M:%S'):
    tp = time.localtime(sec)
    return time.strftime(format, tp)

def get_throughput_metric_from_cms(start_time, end_time):
    '''
    从OSS监控服务中获取公网流出流量在一点时间范围内的指标
    :param start_time: 监控数据的起始时间,格式"2016-07-23 22:59:00"
    :param end_time: 监控数据的结束时间,格式"2016-07-23 23:09:00"
    :return
    '''
    project = 'acs_oss'
    metric = 'InternetSend'
    dimensions = '{"BucketName":"%s"}' % bucket_name
    clt = client.AcsClient(access_id, access_key,'cn-hangzhou')
    request = QueryMetricRequest.QueryMetricRequest()
    request.set_accept_format('json')
    request.set_Project(project)
    request.set_Metric(metric)
    request.set_StartTime(start_time)
    request.set_EndTime(end_time)
    request.set_Dimensions(dimensions)
    request.set_Period('60')
    result = clt.do_action(request)
    result = json.loads(result)
    data_list = []
    for data in result['Datapoints']['Datapoint']:
        data_list.append(data[metric])
    print '[%s - %s]: %s' % (start_time, end_time, data_list)
    return data_list

def set_bucket_acl():
    auth = oss2.Auth(access_id, access_key)
    bucket = oss2.Bucket(auth, endpoint, bucket_name)
    bucket.put_bucket_acl(oss2.BUCKET_ACL_PRIVATE)
    print 'set bucket %s to %s' % (bucket_name, oss2.BUCKET_ACL_PRIVATE)

def limit_throughput_task(period, threshold):
    total_throughput = 0
    start_time = sec_2_date(int(time.time()))
    while True:
        time.sleep(period)
        end_time = sec_2_date(int(time.time()))
        data_list =  get_throughput_metric_from_cms(start_time, end_time)
        total_throughput += sum(data_list)
        print 'now total_throughput is %d' % total_throughput
        if total_throughput >= threshold:
            set_bucket_acl()
            break

        start_time = end_time

if __name__ == '__main__':
    # 每10分钟获取一次metric, 阈值设置为4000Byte
    limit_throughput_task(600, 4000)
    print 'task finished'

      监控指标除了公网流出流量之外,当然还有容量、可用性、请求个数等等;操作方式除了控制OSS bucket权限之外,还可以触发删除指定object、订阅MNS、导出监控数据到实时分析/离线分析系统等等。

各种组合形式,各种需求功能,就看你自己怎么用啦。

云监控SDK安装和使用参见[云监控SDK]。

OSS SDK安装和使用参见[OSS SDK]。

插播广告哈:

       存储服务是阿里云最核心的服务,我们不但支持文件/对象/表格/日志等多种形式的存储,也正在研发下一代事件驱动的serverless计算服务。在这里,你的代码可能运行在几十万台服务器上,不但处理整个阿里巴巴集团最核心的数据,也会成为整个阿里云平台上万千企业云上数据的坚实基础,甚至开启下一代计算的新篇章。

        所以,我们诚聘您的加入,简历投至shuting.yst@alibaba-inc.com,在校优秀人才、社会牛人看过来哦~~    

时间: 2024-10-02 13:08:38

如何灵活使用OSS监控数据动态调整OSS服务参数的相关文章

Zabbix与RRDtool绘图篇之用ZabbixAPI取监控数据

一起来看一个Zabbix与RRDtool绘图篇之用ZabbixAPI取监控数据技巧文章,希望下文可以帮助到各位. 经过一个星期的死磕,Zabbix取数据和RRDtool绘图都弄清楚了,做第一运维平台的时候绘图取数据是直接从Zabbix的数据库取的,显得有点笨拙,不过借此也了解了Zabbix数据库结构还是有不少的收获. 学习Zabbix的API官方文档少不了,官方文档地址链接https://www.zabbix.com/documentation/ 大家选择对应的版本就好了,不过2.0版本的API

号外号外~~OSS监控服务上线啦!!

还在为以下问题发愁吗: 访问指定url返回500,发工单怒找OSS support,绕了一大圈调查发现是业务自己的WEB应用导致的500!? 业务应用对网络流量使用的太多,费用太高,抱怨OSS没有对计量数据的实时监控和使用提醒,一觉醒来房子都归阿里了!? 应用请求不稳定,时慢时快,而网络链路长,抱怨没有端到端的性能监控,定位性能问题难!? ......       现在,大家有福啦,上面那些问题都不要不要的,不要啦!!!     经过小伙伴们4个多月的共同努力,     OSS监控服务终于成功上

MySQL5.7: 动态调整buffer pool size

在5.7.5中提供了一个新功能,能够动态的对buffer pool size进行调整. 对应的changelog entry: InnoDB: The innodb_buffer_pool_size parameter is now dynamic, allowing you to resize the buffer pool without restarting the server. The resizing operation, which involves moving pages to

基于表格存储的高性能监控数据存储计算方案

概述         随着软件架构的愈发复杂,了解系统现状.调查问题的困难度也增加了很多.此时,一套完善的监控方案能够让开发和运维工程师快速排查问题,更好的维护系统的稳定性.        开源监控方案中,Zabbix.Nagios都是不错的监控软件,可以针对数十万的设备监控数百万的指标,强大的功能让开发和运维都很赞叹.但是,网上经常看到的抱怨是其写入和存储能力的不足,以Zabbix为例,文章[1]提到使用NoSQL方案(HBase.Cassandra.Riak)比利用传统RDBMS方案(MyS

如何对硬盘进行无损动态调整分区

  小编推荐一个软件PAGreen,纯粹的免费工具,可是实现动态的磁盘格式转换,不会损失任何数据哦!而且还能够对磁盘进行无损的动态调整分区大小! 从http://www.disktool.cn/下载软件,小编推荐下载绿色版.注意解压后有许多可执行文件,主程序是其中的"PartAssist.exe",可以把它拽到任务栏,或者发送到桌面快捷方式中. 运行程序,选择左侧栏中的"NTFS与FAT32转换器".注意,如果你相对C盘(系统分区)进行动态转换,最好是把软件存放在W

DataV 使用 POP API 调用云监控数据

根据云监控的接口文档:https://help.aliyun.com/document_detail/28615.html 可以通过 POP API 的方式调用云监控的接口,获取 ECS.RDS 等资源的监控数据 DataV 支持 POP API 的调用,因此可以使用云监控的数据作为组件的数据源,步骤如下: 配置云监控的 POP API 数据源 Endpoint 参考https://help.aliyun.com/document_detail/28616.html 配置接口参数(以QueryM

SQL SERVER 监控数据文件增长情况

   在项目前期评估数据库的增长情况,然后根据数据库数据量的增长情况来规划存储的分配其实是一件比较麻烦的事情.因为项目没有上线,用什么来评估数据库的数 据增长情况呢? 如果手头没有实际的数据,我们只能从表的数量以及预计一天的数据增长情况来预估数据增长量.当然这里猜测的成分较大.这个是非常不靠谱,也是不准确的.当 然我们可以监控测试环境的数据库大小的增长情况来评估数据增长情况.我们可以监控数据库大小的变化来估计生产环境的数据增长情况.当然生产环境和测试环境 的区别还是蛮大的.但是这样比那种瞎猜式的

基于云平台的电信数据仓库文件备份和分布动态调整算法

基于云平台的电信数据仓库文件备份和分布动态调整算法 杨苗苗 李跃辉 刘静 许静 Hadoop利用统一的备份机制来确保数据的可用性和容错性.然而对于重要的文件块,只能通过修改配置文件来设置副本数量.通过分析电信业数据仓库文件的访问情况,提出文件备份与存放动态调整算法(BPDA)来提高数据局部性,以减少数据传输带来的I/O和网络消耗,提高查询效率.运用多副本一致性哈希算法,概率采样和竞争力弱化算法,得到每一个文件的最佳备份数和备份位置.实验结果验证了该算法可以提高查询关联效率. 基于云平台的电信数据

用javascript动态调整iframe高度

javascript|动态 当你在页面上使用了iframe之后,一般来说会不希望iframe显示难看的滚动条,以使iframe里面的内容和主页面的内容浑然一体.这时候你会设置 scrolling="no" 属性.但是这样一来如果iframe里面的内容是变化的,高度会随之内容的变化而变化的时候,你的iframe就会显得太长导致底下一大片空白,或者正好相反,由于iframe的高度太小导致一部分内容会被挡住.这里我提供一个兼容IE/NS/Firefox的javascript脚本实现动态调整i