开发者社区> 婷宝要你疼> 正文

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

简介: 本文的目的是为了提供一种使用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,在校优秀人才、社会牛人看过来哦~~    

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
150 0
使用 OSS 图片处理服务|学习笔记
快速学习使用 OSS 图片处理服务
406 0
阿里云开通OSS存储服务详细流程
阿里云开通OSS存储服务详细流程
206 0
基于访问日志实现OSS监控
对象存储OSS是阿里云提供的云存储服务,能够以低成本为用户提供高可靠性的海量数据存储服务。作为基础服务,用户需要时刻关注OSS的使用状况,检测异常状态,从而及时作出响应。
264 0
SLS Logstore模拟接入OSS访问日志和主机监控
在使用SLS的过程中,在试用一些功能时,还未接入正式的数据,往往不能很好的体验SLS功能,SLS提供了模拟接入的功能,可以对一些常见类型的日志进行模拟接入,接入后就可以看到一些mock的数据,本文介绍两种常见的模拟接入。
406 0
SLS新版告警入门-监控OSS访问日志
在业务中经常会有波峰波谷的现象,使用同一个监控阈值往往不能满足告警需求;基于SLS,可以使用日环比方式,配置SLS新版告警,来监控PV日环比是否有陡增或陡降,比如陡增10%或者陡降10%,会发出告警;本文以此为背景,来讲解如何配置告警并发出通知。
568 0
OSS 监控
场景:云监控 OSS 出现 "数据不足" 先看下 OSS 控制台的监控的 http code 、以及 QPS 分析,如果 OSS 请求量比较小,而 OSS 对应的时间点有没有请求就会出现数据不足的情况,这种问题最好设置合理的监控数据上报时间。
605 0
OSS生成m3u8文件动态签名
针对对象存储OSS私有bucket权限的使用场景,每个object都需要生成一次签名URL。针对m3u8的索引文件,索引里的每一个ts都需要生成一次签名地址。这里提供一个通过m3u8设置header带到签名里,从而实现获取的ts带签名的方法。
4151 0
OSS在private权限下的无参数访问(Nginx反向代理实现)
本文主要介绍内容 oss默认权限策略是private,当修改到public-read或更高权限时会提示存在安全风险。如果需要访问oss资源需要在地址上添加签名内容,不利于地址的存储和使用。本文会介绍如何利用nginx反向代理实现private权限下无参数访问oss资源。
4032 0
+关注
婷宝要你疼
欢迎技术交流,期待你的加入!
文章
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
百问百答-OSS (上)
立即下载
百问百答-OSS (下)
立即下载
阿里云 JindoFS+OSS 数据上云实战
立即下载