基于访问日志实现OSS监控

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 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,搭建一个在线教育视频课程分享网站。
相关文章
|
2月前
|
存储 Prometheus 监控
程序开发中的监控和日志分析
监控和日志分析在软件开发中至关重要,它们帮助实时了解应用状态、及时发现并解决问题。监控确保系统稳定运行,优化性能和资源;日志分析则助于追踪问题根源、监测用户行为并提供安全审计。利用如Prometheus、ELK Stack等工具可实现高效监控与日志管理,从而优化应用性能和用户体验。
104 0
|
9天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
1月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
63 9
|
2月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
2月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
2月前
|
存储 运维 监控
监控与日志管理:保障系统稳定运行与高效运维的基石
【8月更文挑战第16天】监控与日志管理是保障系统稳定运行和高效运维的基石。它们不仅能够帮助企业及时发现并解决问题,还能够为性能调优、资源优化和业务决策提供有力支持。因此,在构建系统架构时,企业应高度重视监控与日志管理的规划和实施,确保它们能够充分发挥作用,为企业的发展保驾护航。同时,随着技术的不断进步和应用场景的不断拓展,监控与日志管理也将持续演进和创新,为企业带来更多的价值和便利。
|
1月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
66 0
|
2月前
|
SQL 数据库 Java
Hibernate 日志记录竟藏着这些秘密?快来一探究竟,解锁调试与监控最佳实践
【8月更文挑战第31天】在软件开发中,日志记录对调试和监控至关重要。使用持久化框架 Hibernate 时,合理配置日志可帮助理解其内部机制并优化性能。首先,需选择合适的日志框架,如 Log4j 或 Logback,并配置日志级别;理解 Hibernate 的多级日志,如 DEBUG 和 ERROR,以适应不同开发阶段需求;利用 Hibernate 统计功能监测数据库交互情况;记录自定义日志以跟踪业务逻辑;定期审查和清理日志避免占用过多磁盘空间。综上,有效日志记录能显著提升 Hibernate 应用的性能和稳定性。
38 0
|
2月前
|
开发者 前端开发 编解码
Vaadin解锁移动适配新境界:一招制胜,让你的应用征服所有屏幕!
【8月更文挑战第31天】在移动互联网时代,跨平台应用开发备受青睐。作为一款基于Java的Web应用框架,Vaadin凭借其组件化设计和强大的服务器端渲染能力,助力开发者轻松构建多设备适应的Web应用。本文探讨Vaadin与移动设备的适配策略,包括响应式布局、CSS媒体查询、TouchKit插件及服务器端优化,帮助开发者打造美观且实用的移动端体验。通过这些工具和策略的应用,可有效应对屏幕尺寸、分辨率及操作系统的多样性挑战,满足广大移动用户的使用需求。
35 0
|
2月前
|
存储 JSON 监控
FastAPI日志之谜:如何揭开Web应用监控与调试的面纱?
【8月更文挑战第31天】在现代Web开发中,日志记录对于监控应用状态、诊断问题和了解用户行为至关重要。FastAPI框架提供了强大的日志功能,使开发者能轻松集成日志记录。本文将详细介绍如何在FastAPI中设置和利用日志,包括基础配置、请求响应日志、错误处理和结构化日志等内容,帮助提升应用的可维护性和性能。
56 0

热门文章

最新文章

相关产品

下一篇
无影云桌面