如题,本文的目的是为了提供一种使用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 QueryMetricRequestimport 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_nameclt = 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_listdef 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 = 0start_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_throughputif total_throughput >= threshold:set_bucket_acl()breakstart_time = end_timeif __name__ == '__main__':# 每10分钟获取一次metric, 阈值设置为4000Bytelimit_throughput_task(600, 4000)print 'task finished'

监控指标除了公网流出流量之外,当然还有容量、可用性、请求个数等等;操作方式除了控制OSS bucket权限之外,还可以触发删除指定object、订阅MNS、导出监控数据到实时分析/离线分析系统等等。
各种组合形式,各种需求功能,就看你自己怎么用啦。
云监控SDK安装和使用参见[云监控SDK]。
OSS SDK安装和使用参见[OSS SDK]。

插播广告哈:

       存储服务是阿里云最核心的服务,我们不但支持文件/对象/表格/日志等多种形式的存储,也正在研发下一代事件驱动的serverless计算服务。在这里,你的代码可能运行在几十万台服务器上,不但处理整个阿里巴巴集团最核心的数据,也会成为整个阿里云平台上万千企业云上数据的坚实基础,甚至开启下一代计算的新篇章。
        所以,我们诚聘您的加入,简历投至shuting.yst@alibaba-inc.com,在校优秀人才、社会牛人看过来哦~~    

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

  1. 动态调整线程池参数实践

    欢迎大家关注我的微信公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.线程池遇到的挑战 我们上一篇 <一文读懂线程池的实现原 ...

  2. 基于 Nacos Config 事件监听 动态调整线程池参数

    一.Nacos Config 事件监听 在实际项目中一般都会使用线程池解决一些异步并发问题,不过线程池核心参数很大程度上一次性进行设置,但系统运行起来总有可能出现各种各样的问题,如果修改线程池的参数则 ...

  3. 【Web技术】1486- 在页面关闭时提交监控数据的4个解决方案

    概览 本文以 "前端监控上报数据" 的业务场景,重点解析在 页面实例关闭 时,如何将监控数据上传到服务端的解决方案. 其中,涉及到4种方案,分别为: 同步XMLHttpReques ...

  4. 【Web技术】1424- 4 种在页面关闭时上传监控数据的解决方案

    来自:掘金,作者:我是leon 链接:https://juejin.cn/post/7106365076197605413 概览 本文以 "前端监控上报数据" 的业务场景,重点解析 ...

  5. python可视化脉搏和血氧数据并通过阈值动态调整、动态可视化异常值

    python可视化脉搏和血氧数据并通过阈值动态调整.动态可视化异常值的情况 # 导入基础库和包: import sys import os import pandas as pd import num ...

  6. vba动态二维数组_VBA实战技巧05: 动态调整数组以存储所需数据

    学习Excel技术,关注微信公众号: excelperfect 数组是一种常用的数据结构,可用来存储一组相同类型的数据,你可以将一个数组变量视为一个迷你的电子表格,通过引用数组中的位置来存储或者获取数 ...

  7. 基于matplotlib.animation和python的流数据动态监控原型

    流数据动态监控原型的内容概述 开发环境:Python3.6 代码行数:不到40行代码 代码风格:详细注解 代码特点:一定能跑起来 附加资料:带详细注释的九个animation实例 Decay The ...

  8. 基于Grafana的监控数据钻取功能应用实践

    互联网企业中,随着机器规模以及业务量的爆发式增长,监控数据逐渐成为一种大数据,对监控大数据的分析,包括数据采集.数据缓存.数据聚合分析.数据存储.数据展现等几个阶段.不同阶段有不同的解决方案及支撑工具 ...

  9. 分布式作业 Elastic Job 如何动态调整

    转载自   分布式作业 Elastic Job 如何动态调整 前面分享了两篇分布式作业调度框架 Elastic Job 的介绍及应用实战. ElasticJob-分布式作业调度神器 分布式作业 Ela ...

最新文章

  1. html页面怎样禁止复制粘贴,javascript中如何禁止复制粘贴?
  2. isp 图像算法(二)之dead pixel correction坏点矫正
  3. tarjan对有向图的缩点(求强连通分量)
  4. 计算机论文搜索技巧【一】
  5. 20个开发人员非常有用的Java功能代码(二)
  6. android sdk build tools 版本,SDK Build Tools 版本说明
  7. idea项目能放入eclipse_IDEA导入eclipse项目并且部署到tomcat的步骤详解
  8. Java中的BlockingQueue队列
  9. ASP.NET在Web窗体上输出九九乘法表
  10. 卸载神器:geek(绝对好用,中国人不骗中国人)
  11. 【转载】分析Windows的死亡蓝屏(BSOD)机制
  12. 【Python3】简易爬虫实现船舶的MMSI的获取
  13. python 折线图 excel_如何使用python读取excel数据并绘制折线图
  14. 软件体系结构——批处理风格
  15. 如何把阿拉伯数字转换为中文大写?
  16. 《Windows不欢迎你,你爱用什么系统就用什么去吧》
  17. 完美解决 - 如何将一个项目打包到本地maven库,然后供另一个项目中引用。
  18. 采油工计算机试题库,数字化采油工题库完整.pdf
  19. Windows定时开关机
  20. autocad.net将Geometry对象转换为Database对象

热门文章

  1. rcp异步多参数实例
  2. centos 搭建php运行环境
  3. php将对象转换成数组
  4. iview 后台管理系统 搭建
  5. Spring Cloud微服务系列-Eureka Client源码解析(二)
  6. android连接此设备时打开,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...
  7. 如何在 go 中实现一个 worker-pool?
  8. 关于负载均衡的几个问题
  9. 并发容器(J.U.C)中的队列类
  10. Dynamics CRM2011 通过DeveloperToolkit在VS中部署遇到的问题