基于访问日志实现OSS监控-阿里云开发者社区

开发者社区> 1704048249035724> 正文

基于访问日志实现OSS监控

简介: 对象存储OSS是阿里云提供的云存储服务,能够以低成本为用户提供高可靠性的海量数据存储服务。作为基础服务,用户需要时刻关注OSS的使用状况,检测异常状态,从而及时作出响应。
+关注继续查看

背景

对象存储OSS是阿里云提供的云存储服务,能够以低成本为用户提供高可靠性的海量数据存储服务。作为基础服务,用户需要时刻关注OSS的使用状况,检测异常状态,从而及时作出响应。

阿里云日志服务(SLS)是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能,全面提升研发、运维、运营和安全等场景数字化能力。

image

用户在访问对象存储 OSS 的过程中,会产生大量的访问日志。SLS允许一键接入OSS 访问日志,方便用户完成操作审计、访问统计、异常事件回溯和问题定位等工作。

image

  • 问题一:存储空间持续增加

以 1000 QPS 的请求量计算,每条日志 1500 Bytes,一个月累计后达到 3.8 TB。但 访问日志随时间推移逐渐从温数据变为冷数据,这带来一笔不小的存储开销。

  • 问题二:分析计算消耗大

假设对 30 天的数据分析小时级流量特征,如果每次对全量数据做即时分析,计算成本是巨大的,计算延时的增加也影响了体验。

以 bucket、method 分组计算小时级流量特征为例:

* | select (__time__ - __time__ % 3600) as dt, bucket, http_method, sum(request_length)/1024.0/1024.0 as request_MB, sum(response_body_length)/1024.0/1024.0 as response_MB, avg(response_time) as avg_latency group by dt, bucket, http_method order by dt asc limit 10000

随着查询时间范围增加,计算引擎需要扫描更多的数据量做计算,增加了资源开销与分析延时。

数据查询范围

扫描日志条数 

计算耗时

24 hours

5,153,426

1,767ms

30 days

35,754,384

4,636ms

方案

本文介绍一种将日志转为指标的方案,允许用户快速查询分析OSS指标。常见的Log转Metric的方法可以有两种:

image

  • 聚合日志产生指标,类似sql做group by以后产生对应的统计值。
  • 将日志格式做格式转换,使其符合Metric格式. 对应SLS数据加工e_to_metric场景

本文主要介绍第一种方案,可以实现:

  1. 降低分析延迟:将日志数据转为时序数据,存入时序存储分析;SLS时序库针对指标场景做了大量优化;
  2. 优化数据存储:只存储监控相关数据,移除多余字段;
  3. 能够使用Prometheus生态:时序存储支持Prometheus查询语句,同时支持Prometheus 查询API;

原理即为使用SLS提供的ScheduledSQL服务,在后台定时运行SQL计算任务,将统计结果存入时序存储。

OSS指标数据

OSS访问日志中包含多种信息,首先需要确定日志信息能够计算得到的指标数据种类。本文给出了部分常用指标,更多的指标用户可以根据需求自行构建。指标标签我们统一使用:bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation字段。用户可以根据自己的需用

访问次数

计算分钟级不同类型OSS请求的次数。

计算SQL

*|select bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, (__time__ - __time__ % 60) as time, count(1) as request_count from log group by bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, time

请求数据量

计算分钟级OSS请求数据量。

计算SQL

*|select bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, (__time__ - __time__ % 60) as time, sum(content_length_in) as request_size from log group by bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, time

响应数据量

计算分钟级OSS响应数据量。

计算SQL

*|select bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, (__time__ - __time__ % 60) as time, sum(content_length_out) as response_size from log group by bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, time

响应时间

计算分钟级OSS平均响应时间。

计算SQL

*|select bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, (__time__ - __time__ % 60) as time, avg(response_time) as response_time from log group by bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, time

为了便于计算,我们将上述多条SQL合并为一条,一次性计算所有指标。

*|select bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, (__time__ - __time__ % 60) as time, count(1) as request_count, sum(content_length_in) as request_size, sum(content_length_out) as response_size, avg(response_time) as response_time from log group by bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation, time

Scheduled SQL 实践

计算配置

资源池有免费(Project 级别 15 并行度)、增强型(收费,但资源可扩展,适用于大量计算且有 SLA 要求的业务场景)两种,按照你的需求来设置即可。

image

写入模式

写入模式有三种选择,当源为日志库时,可以选择日志库导入日志库以及日志库导入时序库;当源为时序库时,可以选择时序库导入时序库。因为oss访问数据为日志库,计算结果为时序数据,所以此处选择日志库导入时序库。

指标列

指标列用于选择计算结果列,类型必须为数字,这里选择request_count, request_size, response_size以及response_time,分别表示请求次数,请求大小,响应大小以及响应延迟。这里需要注意的是,如果结果中某行数据的指标列无效(无法转为数字),ScheduledSQL任务会忽略该错误,并继续执行。

Labels

Labels选择作为指标标签的列,类型没有限制,这里选择bucket, bucket_location, bucket_storage_type, http_method, http_status, object, operation。

哈希列

如果时序库中同一label的数据写入到固定的hard中,可以增强局部性,提升查询效率。因此可以选择常用的过滤标签,作为哈系列,使给定标签相同的指标存入同一shard中。这里选择bucket。

时间列

时间列用于指定该条指标的具体时间,类型必须为数字,这里直接使用time列即可。

调度配置

设置 SQL 每 5 分钟执行一次,每次执行处理最近 5 分钟窗口的数据。

注意:

1. 设置延迟执行参数,上游 Logstore 的数据到来可能延迟,建议设置大一些的值做等待来保证计算数据的完整性。

2. SQL 运行超过指定次数或指定时间后,这一次的 SQL 实例会失败并继续下一个实例的调度。

image

任务管理

在SLS控制台可以查看之前创建的ScheduledSQL作业。

image

在作业管理页面内,可以查看到每一次执行的实例列表。

image

每个实例信息中有 SQL 查询区间,如果任务失败(权限、SQL 语法等原因)或 SQL 处理行数指标为 0(数据迟到或确实没有数据),可以对指定实例做重试运行(失败告警功能开发中)。

效果

计算完成之后,可以在时序库中查询oss访问指标。

image

不同Bucket请求次数

image

不同类型请求次数

image

不同Bucket平均请求延迟

image

总结

通过SLS提供的ScheduledSQL功能,用户可以轻松将日志数据转为时序数据,存入到SLS的时序库中,满足用户监测系统指标的需求。

更多内容请参考:

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

相关文章
日志系列--前端访问日志的统计分析
简介 很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段: 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求。 分析nginx的access log,从日志中挖掘有用信息。
4164 0
python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动
用python监控您的window服务 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://world77.blog.51cto.com/414605/782935     最近比较烦,研发给的pc服务版本在虚拟机上已经开始给客户使用了,服务老是莫名的死翘翘,客户不停的电话给我,搞的我心情很差,于是在一个下午,静下心来,用python写了个简单的监控进程的脚本,当发现进程消失的时候,立即调用服务,开启服务。
1557 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4402 0
PHP中利用文件锁实现日志写入和网站接口访问等常见场景下的并发控制
针对并发环境下网站、日志文件写入产生的脏数据、更新丢失等情况的解决思路之一
2587 0
使用Logstash将日志导入OSS
前言 logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。 目前logstash已经支持了很多输入和输出插件,本文主要介绍如何使用logstash output oss插件将日志导入OSS。
3087 0
PostgreSQL 12: 新增 pg_stat_progress_create_index 视图监控索引创建进度
PostgreSQL 12 版本之前,对PostgreSQL大表创建索引时是一个比较痛苦的过程,创建索引过程中无法得知索引创建进度,PostgreSQL 12 在运维监控功能方面得到增强,新增 pg_stat_progress_create_index 视图可以监控索引的创建进度,本文简单演示。
1306 0
10
文章
0
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载