基于访问日志实现OSS监控

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 对象存储OSS是阿里云提供的云存储服务,能够以低成本为用户提供高可靠性的海量数据存储服务。作为基础服务,用户需要时刻关注OSS的使用状况,检测异常状态,从而及时作出响应。

背景

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

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

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

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

以 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的方法可以有两种:

  • 聚合日志产生指标,类似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 要求的业务场景)两种,按照你的需求来设置即可。

写入模式

写入模式有三种选择,当源为日志库时,可以选择日志库导入日志库以及日志库导入时序库;当源为时序库时,可以选择时序库导入时序库。因为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 实例会失败并继续下一个实例的调度。

任务管理

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

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

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

效果

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

不同Bucket请求次数

不同类型请求次数

不同Bucket平均请求延迟

总结

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

更多内容请参考:

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
21天前
|
监控 关系型数据库 MySQL
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
40 3
|
4月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
2月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。
|
2天前
|
域名解析 弹性计算 应用服务中间件
基于nginx反向代理实现OSS固定域名IP访问
本文基于阿里云OSS手册:https://help.aliyun.com/zh/oss/use-cases/use-an-ecs-instance-that-runs-centos-to-configure-a-reverse-proxy-for-access-to-oss,继续深入讨论如何利用nginx反向代理,实现固定的IP/域名访问OSS bucket。官方文档能够解决大部分的反向代理固定IP访问oss bucket的场景,但是对于必须使用域名作为endpoint的系统,会出现signatrue鉴权问题。本文继续在官方文档的基础上,将反向代理需要域名作为endpoint的场景补齐方案。
|
4天前
|
存储 运维 监控
【Docker专栏】Docker日志管理与监控的最佳方法
【5月更文挑战第7天】本文探讨了Docker容器的日志管理与监控,强调其在运维中的重要性。Docker默认使用`json-file`日志驱动,可通过`docker logs`命令查看。建议选择合适日志驱动,配置日志选项,并集成ELK Stack等工具进行高级分析。实时监控、设置警报、分析数据和审计日志是实践关键。最佳实践包括日志数据与容器数据分离、使用日志代理、保护敏感信息及遵守法规。关注新技术以提升系统稳定性和安全性。
【Docker专栏】Docker日志管理与监控的最佳方法
|
5天前
|
监控 安全 数据可视化
中间件应用日志记录和监控
中间件应用日志记录和监控
19 3
|
11天前
|
Prometheus 监控 Cloud Native
【Go语言专栏】Go语言中的日志记录与监控
【4月更文挑战第30天】Go语言在软件开发和运维中扮演重要角色,提供灵活的日志记录机制和与多种监控工具的集成。内置`log`包支持基本日志记录,而第三方库如`zap`、`zerolog`和`logrus`则扩展了更多功能。监控方面,Go应用可与Prometheus、Grafana、Jaeger等工具配合,实现系统指标收集、可视化和分布式追踪。健康检查通过HTTP端点确保服务可用性。结合日志和监控,能有效提升Go应用的稳定性和性能。
|
11天前
|
存储 监控 关系型数据库
PHP编写的电脑监控软件:用户登录日志记录与分析
使用PHP编写简单但功能强大的电脑监控软件,记录用户登录日志并进行分析。代码示例展示了如何获取并存储用户IP地址和登录时间到数据库,然后进行登录数据的分析,如计算登录频率和常见登录时间。此外,还介绍了如何通过定时任务自动将监控数据提交到网站,以便实时监控用户活动,提升系统安全性和稳定性。
34 0
|
11天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
25天前
|
存储 Prometheus 监控
Flask监控与日志记录:掌握应用运行状况
【4月更文挑战第16天】本文介绍了在Flask应用中实现监控和日志记录的方法,以确保应用稳定性和问题排查。推荐使用Prometheus、Grafana、New Relic或Flask-MonitoringDashboard等工具进行监控,并通过Python的logging模块记录日志。监控集成涉及安装配置工具、添加监控代码,而日志管理则需要集中存储和使用分析工具。安全是关键,要防止未授权访问和数据泄露,避免记录敏感信息。监控和日志记录有助于提升应用性能和用户体验。

相关产品