SLS投递OSS功能升级:打造更顺畅的日志入湖体验

简介: SLS 在2017年推出了开箱即用,按量付费的投递 OSS 功能,面对新的需求场景下,SLS投递 OSS 功能进行了全新升级,本文会介绍日志数据投递 OSS 新版特性,并以一个案例实践做展开。介绍下SLS的日志数据入湖方案和实践。

前言

日志数据有以下的特点,种类繁多,缺乏 schema 规划,而且写多读少,最常使用的功能是OLAP和搜索用作运维。但是随着时代发展,我们发现一些在场景需求上的变化:一是日益严格的合规要求,日志数据要求留存时间变长,二是日志的价值被进一步挖掘,机器学习、离线分析、数据发现等。总结来看,日志的生命周期中,除了基本的OLAP和搜索能力做DevOps,还有用于数据洞察,合规审计,规则告警,和DevOps下一形态AIOps等,数据湖的优势是能够在低存储成本下很好满足长期存储、查询、分析、读取,并在此基础上做数据发现,BI,ML等。

阿里云提供的企业级数据湖解决方案,存储层基于阿里云对象存储 OSS 构建。日志服务(SLS)是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能,全面提升研发、运维、运营和安全等场景数字化能力。SLS支持开箱即用的OSS投递入湖功能,实现日志数据端到端的入湖,SLS 在2017年推出了开箱即用,按量付费的投递 OSS 功能,面对新的需求场景下,今天我们对投递 OSS 功能进行了全新升级,本文会介绍日志数据投递 OSS 新版特性,并以一个案例实践做展开。下面我介绍下SLS的日志数据入湖方案和实践。

架构设计

原始方案在日志增量产生时,满足用户设置的投递条件时生成投递任务,执行器会执行投递任务。

但原有的方案只支持增量投递,对于以下场景难以覆盖:

  1. 只能从当前时间开始投递,对于在创建LogStore之初就规划好冷存/审计/数据洞察等需求的用户能即时开启投递还好,但无法满足那些对于历史数据有归档、投递需求的用户。
  2. 无法启停,由于任务的产生依赖日志收集过程,在用户发现参数的配置不合理时,一阵验证修改重启折腾后却只能对新数据才能生效

历史方案的架构存在着一些历史原因,初始投递功能简单,技术实现的方案也是基于增量的数据而集成在日志的主处理流程中,开发和验证的成本很低。而随着用户需求的升级,我们针对性地支持了以下新的feature:

支持对历史数据归档投递

某客户日志存储的历史数据有需求不能删除,其设置的TTL(可以理解为存储的时间,超过则会过期)为永久,想转储历史数据进行分析和归档,原有投递方案只支持增量数据而无法满足。而客户评估如果通过自建来实现,开发维护成本很高,而且对于大文件处理、压缩和投递,内存、计算资源的消耗也是比较大的。

针对客户的需求,我们升级后的方案去除了对数据增量过程的依赖,每个投递任务自行记录checkpoint,用户可以选择任务的任意开始时间(TTL - Now)范围,可以对历史数据回溯投递。而且支持用户随时启动停止任务,在调试好后可从停止时的checkpoint继续运行。

同一日志库多种投递需求

某客户对投递的数据有多种需求,一份用来压缩归档,一份用来分析计算,由于之前只能对单个logstore绑定一个投递任务,用户需要数据采集到两个logstore或者通过logstore拷贝到另一个logstore,用户需要额外付一份logstore的存储费用。

针对客户的需求,升级后的方案中一个logstore可绑定多个投递任务,用户额外的投递任务不会产生多余的logstore费用,只需要按照总投递量付费。

支持数据链路的可观测性和监控告警

数据投递功能开箱即用,但用户在原有方案中只能看到增量数据产生的多个任务和执行结果,整体数据链路和处理过程是个黑盒。用户希望能够提供更强的可观测性,能观测到投递的质量(是否能达到近实时性、参数是否配置错误比如角色权限配置不正确导致投递不成功等等),如果遇到数据有异常或者后端抖动,用户可以及时观测到,而且最好能够实时被触达到。

针对这个需求,升级后的方案中,对于后端处理的整个流程会产生详细的诊断日志,并基于诊断日志为每个投递任务自动生成功能丰富的诊断仪表盘,包含读/写数据量,处理速率,处理延时,运行异常,运行信息等等。并配置了相对应的报警规则模版,用户可以根据其使用的数据量和速率等的阈值配置自己的报警规则和行动策略(支持钉钉等多自定义渠道及时报警)。

整体方案如下:多个投递任务的执行不再依赖用户biz log的增量日志产生,可以选择从不同的时间点开始。而且可以指定不同参数指定不同的目标bucket(或者相同bucket不同的目录),分别用来压缩归档和计算。而且执行过程中会存储详细的诊断日志,同时提供了详细的仪表盘和报警。而且初次之外我们还优化了一些细节,比如有的客户希望指定不同的时区来生成分区路径,有的客户希望自行制定文件后缀等等。另一个重要的点是,在升级后我们仍然保证投递可以按照日志数据流量的变化做到Auto Scaling,弹性的处理能力。

下面我将进行一次SLS投递到OSS中的实践。

实践步骤

前提条件

  • SLS日志项目(project)和日志库(logstore)
  • OSS Bucket

日志投递

下方我们选择logstore中的数据处理 - 导出 - OSS(对象存储)来创建OSS投递功能。

Step1:填写基本目标信息

  • OSS Bucket:填写目标的OSS Bucket。
  • 文件投递目录:数据将会放置在目标Bucket的文件目录下,也可以理解是一个文件路径的前缀。
  • 文件后缀(可选):以此为后缀或由存储格式和压缩类型自动生成。
  • 分区格式:对于计算引擎Spark、Flink等了解的同学对数据分区(partition)的概念不会陌生。目前SLS的OSS投递功能支持用户使用自定义的时间格式来按照时间生成分区(业务时间或者其他自定义字段规划中)。

Step2 配置权限

使用RAM角色来配置好LogStore的读取权限和OSS的写权限,用户还可以通过自定义角色配置粒度更细(如特定Bucket的写权限,特定Logstore的读权限等)。

对写OSS的RAM角色增加相关配置后可以支持做跨账号的投递

Step3 配置输出格式

  • 投递大小:代表着会收集投递大小的日志数据量进行投递,用户可根据实际情况选择所需大小(5-256MB),对于一些计算引擎或者数据湖上层的数据管理系统,过大的文件会影响读写的延时,而投递大小设置偏小会导致文件数过多,会导致对元数据管理或对象存储的List等接口压力过大。
  • 压缩方式:压缩可以降低用户的存储成本,目前仅支持snappy(压缩速度较快,适合计算引擎,未来会支持gzip/zstd等,有进一步提高压缩率降成本的选择)。

  • 具体格式
  • JSON格式:应用广泛,可读性好,是非常好的原始数据格式。用户可以选择不投递日志中的tag字段减少日志大小。

  • CSV格式:结构相对于JSON更加紧凑,几乎大部分的数据相关软件或者系统都能处理,虽然无法存储太复杂的数据结构,但总体非常适合日志场景。用户可以配置具体的字段名和分隔符转义符等定制所需格式。

  • Parquet格式:是一种列式的存储格式,列存带来许多好处如读取速度快,IO小,压缩比高,支持谓词下推等;被许多计算引擎和数据湖的数据管理系统所支持。用户可自定义日志需要投递的字段和每个字段所需要的字段类型(string/int64/int32/double/float等)。

  • 之后更多的格式orc/avro 已在规划中...

Step4 配置时间选项

  • 投递时间:决定任务的生成间隔,投递大小或者投递时间满足任一条件会完成一次投递,所以用户可以根据自己使用场景配置合理的投递时间,比如在用户流量较小的情况下,可选择偏长的投递时间,防止出现过多小文件。
  • 开始时间:为开始投递的起始日志收集的时间,可选择ttl-now任意的时间。
  • 时区选择:时区选择会影响到最后具体的分区partition路径。

最后点击确定启动

Step5 投递概览和任务管理

在配置结束后会跳转到数据投递概览页面,也可以在 作业 - 数据投递(新版)中找到创建的任务。

我们可以在基础信息中预览基础的配置,如选择的日志库和OSS bucket等。在这个界面我们可以停止任务和启动任务,当然也可以点击修改投递配置,来直接一键重启任务。

点击修改好投递的配置后,点击 修改配置并重启作业 即可,此时状态会进入重启中,可点击刷新确认是否重启完成。

统计报表

数据投递作业内基础信息下方是统计报表内容,包含了以下内容。

读取日志监控overview,监控了一定时间段内数据读取的数据条数和公网流量。

投递数据overview,监控了一定时间段内数据投递成功的条数和公网流量

注意:目前尚未支持跨region的投递,所以目前公网流量都为0。

处理速率观测,监控了一定时间段内的处理速率,可用来观测日志流量和处理能力的变化。

任务进度观测,监控了一段时间内每个处理实例的延时,可用来观测数据投递的近实时性。

运行细节:包含运行状态与运行异常。我们可以通过运行状态来查看数据读取和投递的实例、数量、耗时和额外信息等,比如OSS投递的额外信息还会展示投递的名称和大小等。运行异常包含了处理的异常信息,用户可以根据异常信息来判断是否是参数配置错误或是运行过程异常等问题。

配置报警

用户可以在告警中心中找到SLS数据投递预置规则中添加和开启报警。目前SLS内置了五条数据投递的监控报警规则,分别是:

  • 数据投递延迟监控:根据每个投递实例的延迟,超过一定阈值进行报警。可以通过这个判断是否数据投递的近实时性变差,方便监控问题产生。
  • 数据投递流量(绝对值)监控:对一段时间内的投递数据量进行监控,低于一定数据量的时候报警。
  • 数据投递异常报错监控:对一段时间内的出现的异常报错进行监控,超过一定阈值时报警。
  • 数据投递失败条数监控:对一段时间内出现的投递失败条数进行监控,超过一定阈值时报警。
  • 数据投递流量(日同比)监控:对一段时间内的数据流量与前一日进行比较,超过一定阈值时会报警。

这五个报警监控包含了运行中可能出现的大部分异常情况:运行异常、有部分数据失败、处理延迟、流量异常(过低或者波动过大)。用户还可以配置具体的行动策略,可以通过钉钉或者其他渠道实时地通知触达。

总结

SLS提供了开箱即用的OSS数据投递入湖功能,而且,我们在收集到用户一些需求痛点后对原有投递功能进行了升级,也方便未来拓展更丰富的格式和功能支持;在可观测性方面,增加了整个数据链路的仪表盘和告警,即使此功能是数据链路无需用户搭建、开箱即用的,对用户来说也绝不是一个黑盒。SLS也将继续完善日志投递入湖的体验,增强增强更多的格式:入湖模板扩展 zstd/gzip/avro/orc 等新压缩方式/格式支持,优化 parquet 构建模式,提升湖分析效率、降低湖存储成本;更灵活的投递调度:例如每天凌晨 1 点,定时投递[now-31day, now-30day)的数据到 OSS,实现无缝的冷(OSS)、热(SLS)存储。希望能够帮助用户使用SLS发掘日志价值,助力业务发展。


您可以通过以下方式联系我们:

  • 钉钉(SLS 用户交流群)

  • 微信、B 站

相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
3月前
|
存储 调度 C++
16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造
大规模数据如何进行语义检索? 当前 SLS 已经支持一站式的语义检索功能,能够用于 RAG、Memory、语义聚类、多模态数据等各种场景的应用。本文分享了 SLS 在语义检索功能上,对模型推理和部署、构建流水线等流程的优化,最终带给用户更高性能和更低成本的针对大规模数据的语义索引功能。
375 28
|
3月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
295 0
|
8月前
|
监控 Kubernetes Go
日志采集效能跃迁:iLogtail 到 LoongCollector 的全面升级
LoongCollector 在日志场景中实现了全面的重磅升级,从功能、性能、稳定性等各个方面均进行了深度优化和提升,本文我们将对 LoongCollector 的升级进行详细介绍。
641 87
|
9月前
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
595 118
|
8月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
856 54
|
10月前
|
存储 SQL Oracle
|
10月前
|
运维 监控 虚拟化
除了实时性能监控,Hyper-V还支持日志记录和警报功能你知道吗?
Hyper-V不仅支持实时性能监控,还具备强大的日志记录和警报功能。通过事件查看器可访问详细的日志文件,涵盖虚拟机管理、配置及Hypervisor事件,帮助故障排查和性能分析。警报功能支持预定义和自定义规则,可通过多种方式通知管理员,确保及时响应问题,保障虚拟化环境的稳定运行。
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
3975 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
386 9