日志服务 SLS 和开源 ELK 全面对比

简介: 本文阐述了阿里云日志服务 SLS 和开源 ELK 在性能、成本、功能等维度的对比分析。如需了解从ES平滑迁移到SLS 攻略,请参考文章链接/article/1412611

概述

本文详细阐述了阿里云日志服务 SLS 和开源 ELK 在性能、成本、功能等维度的对比分析。

在日志存储与查询场景中,ElasticSearch(ES)是使用最多的方案。ES 的第一个版本在2010年发布,在 2015 年 ELK Stack(Elastic Logstash Kibana)推出的套件解决集中式日志采集、存储和查询问题。由于 ES 内核是基于 Lucene 实现的,因此对较短的日志场景仍有一定的发展空间:例如对于可观测数据(Log/Trace/Metric)的兼容性,大规模能力,查询稳定性,及场景需要的一些差异化功能(例如智能聚类 LogReduce、上下文查询、日志订阅等)。

阿里云日志服务 SLS 基于一套面向可观测数据采集、存储、分析场景设计的产品。面向 Log/Metric/Trace 等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能,全面提升研发、运维、运营和安全等场景数字化能力。

为了能够在日志存储查询场景上有一个直观地了解(非ES通用场景),我们在以下方面做了一定的对比:

  • 性能:在同样成本的介质上部署,SLS 能够提供更低的延时、以及更稳定的查询性能
  • 成本:这里的成本不光是部署成本,还需要包括使用成本。要维护良好状态的 ELK 集群,需要从容量规划、稳定性保障、性能调优、数据高可用,数据如何在不同系统间关联等多个方面下功夫。SLS 全托管免运维无需花费额外人力投入。百 TB 规模下,SLS 综合成本是 ELK 的 44%。
  • 易用性:SLS 对开源协议及组件相比 ELK 有更好的兼容性。利用 ELK 构建完整可观测分析平台需组合多款服务,这其中包括Logstash、Kibana、Kafka、Flink、TSDB、Prometheus等。SLS 在这个场景上无需多个组件搭配,支持一站式数据监控分析平台能力。
  • 互联互通与二次开发:在可观测场景中,我们需要跨多个数据源进行关联分析。SLS 可观测数据统一存储支持 log metric trace 数据存储,打通数据孤岛,并且提供开源友好的 API 接口进行使用。
  • 附加能力(新算子、告警等):开源 ELK 仅支持指标分析聚合、分桶聚合、管道分析、矩阵分析有限的聚合算法。SLS 针对数据分析场景支持 30+ 聚合计算函数,丰富的机器学习函数以及多渠道数据源,是 ELK 提供操作符的 5 倍,充分发掘数据分析能力。除此之外,SLS 内置告警功能可以快速开箱即用,无需搭建系统。

1. 性能比较(查询+分析场景)

SLS 可以支持百 PB 级的日志量,查询效率极高,百亿条数据数秒内出结果,多运算亿级数据 1 秒出结果。ELK 超过 10TB 就会遇到性能瓶颈。在大数据量查询场景上,SLS 性能高达自建 ELK 的十倍,且随着并发增加,延迟保持稳定。

查询场景性能测试:

  • 1/10 亿条数据查询 5 条件,并发 1/5/10 查询
  • 1 亿数据量规模下查询性能与 ES 持平
  • 10 亿数据量规模下性能高达 ES 的十倍
  • 随着并发增加,延时保持稳定

image.png

统计分析场景性能测试:

  • 1/10 亿条数据,并发 1/5/10 分析
  • SLS 分析性能高达 ES 的十倍
  • 随着并发增加,延时保持稳定

image.png

测试环境:

  • 测试机器 : 5台
  • Replica :1
  • 磁盘类型 : 本地盘, 所有磁盘都使用(* 4)
  • Index : 每个 Index 20 个shard
  • ES 版本: 7.10.1
  • ECS 规格: ecs.d1ne.2xlarge     8 vCPU 32 GiB (I/O优化)
  • ES jvm 配置: -Xms26g -Xmx26g
  • 检索 Query:Status: 200 and Method:PostLogStoreLogs and ProjectName: hangzhou and InFlow>2048 and UserAgent:"aliyun-log-java-producer"
  • 统计分析 SQL:select count(*), avg(Latency), sum(InFlow), ProjectName group by ProjectName

2. 成本比较(综合使用成本:包括服务器、运维难度、人力在内的综合成本)

百 TB 规模下,SLS 综合成本是 ELK 的 44%,很多 ELK 客户转向 SLS 的重要考虑是包括服务器、运维难度、人力在内的综合成本。参考【资源成本对比:全索引场景】

要维护良好状态的 ELK 集群,需要从容量规划、稳定性保障、性能调优、数据高可用,数据如何在不同系统间关联等多个方面下功夫。SLS 全托管免运维无需花费额外人力投入!参考【资源工作项对比】

现实场景中,自建资源成本受用户服务器选型、组合情况,以及供应链的议价能力影响,存在较大差异。以下仅以两个极限的实验环境场景对比,数据结果仅供参考。

资源成本对比:全索引场景

ECS SSD(7天热数据)+ 高效云盘磁盘(7天以上冷数据)vs SLS 标准版

  • 测试机型 ecs.g7.4xlarge:16Core、64GB、¥2208 /月
  • 写入吞吐: 每秒写入峰值 16MB/sec 平均 8MB/sec, 一天写入量 0.66TB 写多查少
  • 磁盘空间: 原始数据 * 1.1(膨胀率) *1.25 = 原始数据 * 1.375,ESSD-PL0  0.5元/GB/月 高效云盘 0.35元/GB/月,ES 0 副本

每天写入量

保存天数

计算需要机器数

需要存储空间(TB)

机器费用

存储费用

ELK费用每月

SLS费用每月

SLS/自建

10

30

15.15

96.25(热) + 316.25(冷)

?33454.55

?162624

?196078.55

?234954

1.19

10

90

15.15

96.25(热) + 1141.25(冷)

?33454.55

?458304

?491758.55

?339371

0.66

10

180

15.15

96.25(热) + 2378.75(冷)

?33454.55

?901824

?935278.55

?495997

0.69

ECS + ESSD(7天热数据)+ 高效云盘磁盘 (7天以上冷数据)vs SLS Query 版

  • 索引比例 100%,ES 为 0 副本

每天写入量

保存天数

计算需要机器数

需要存储空间(TB)

机器费用

存储费用

ELK 费用

SLS费用

SLS/自建

10

30

15.15

96.25(热) + 316.25(冷)

?33454.55

?162624

?196078.55

?158,154

0.80

10

90

15.15

96.25(热) + 1141.25(冷)

?33454.55

?458304

?491758.55

?287,147

0.53

10

180

15.15

96.25(热) + 2378.75(冷)

?33454.55

?901824

?935278.55

?443,773

0.44

开源 ELK 运维工作项解析

要维护一个处于较为良好运行状态下的 ELK 集群,仅简单的维持系统的正常运作是并不够的。还需要从容量规划,稳定性保障,性能调优,数据高可用,数据如何在不同系统间关联等多个方面下功夫。

运维工作项

详细内容

容量规划

原始数据 * 膨胀系数 *(1 + 副本数) * (1 + 预留空间), 一般膨胀系数取 1.1~ 1.3, 1 个副本,25% 的预留(剩余空间,临时文件等), 实际磁盘空间最终是原始空间的 2.75~3.5 倍。如果需要开启_all 参数设置的话,数据膨胀会更严重,也需要预留更多空间。自建 ES 集群在维护过程中需要持续关注水位,在必要时进行扩容。

冷热分离

所有数据全部保留到 SSD 上成本会过高,需要根据数据的重要程度和时间因素,可以将部分 Index 直接保存至 HDD 磁盘,或使用 Rollover 功能将 Index 迁移

Index 设置

每个应用的 2 类日志,分别按照时间周期性创建 Index,根据数据大小合理设置 shard 数,单 shard 以 30~50GB 为宜,但是各应用的日志量很难准确估计,常在遇到写入或查询问题后再调整,然而 reindex 的消耗又非常大

ES 参数调优

需要对写入吞吐,可见性延时,数据安全性,以及查询性能等多方面因素进行综合评估和权衡后,结合集群 CPU、内存,对ES一些列参数进行调优,才能更好发挥 ES 的特性,常见的参数包括线程数、内存控制、translog 设置、队列长度、各类操作间隔 interval、merge 参数等

内存问题

通常 JVM 堆内存大小在 32GB 以内,剩余的留个 OS 缓存使用,如果频繁gc会严重影响性能,甚至直接导致服务不可用。 master 节点内存占用和集群中shard数直接相关,一般集群shard需要控制在 10W 以内,ES 默认配置中,单节点 shard 数上限为 1000,需要合理控制 index 和 shard 数量

查询问题

影响查询性能的因素非常多,需要花费大量时间不断试错和积累,常见的如:

?合理设置 mapping,如 text 和 keyword 的选择,尽量避免无必要的 nested mapping

?避免过大的查询范围和复杂度(过深的 group by 等),以免急剧消耗系统资源;对结果集大小进行限制,否则复杂的聚合查询或模糊查询等,在过大数据集上甚至直接导致 oom

数据损坏

如果遇到异常的 crash 或者磁盘损坏(es 的坏盘容忍度低),可能导致文件损坏,在 segment 或 translog 文件受损时,shard 可能无法加载,需要使用工具或手动将有问题的数据清理掉,但这也会导致部分数据丢失

版本管理

当社区版本存在一些功能性或者安全方面的问题时,需要对于部署版本进行版本升级,而版本升级本身的风险性高。

问题 support

ES 出问题需要求助开源社区,并且由团队自身自行兜底

SLS 和开源 ELK 资源工作项对比

类别

对比项

日志服务SLS

开源ELK

监控规模

监控日志/时序规模

PB 级别

TB级别

协同监控

多存储单元关联监控(如索引/库)

支持(SQL Join、告警集合操作扩展)

仅支持同一结构多索引合并分析,不支持JOIN

关联日志与时序监控

支持(SQL Join、告警集合操作扩展)

不支持

跨存储容器监控(如集群/项目)

支持

不支持

跨区域监控

支持

不支持

降噪控制

连续同一警报去重

时间窗口内,同一告警去重或延迟发送(基于标签)

不支持

多种警报归类合并

时间窗口内,将各类警报合并分组发送(基于包括标签的任意属性归类)

不支持

警报等级抑制/压制

特定源警报可抑制特定目标告警(源和目标可基于包括标签的任意属性匹配)

不支持

警报静默

静默特定时间(基于包括标签的主要属性)

不支持

通知管理

动态分派通知渠道

基于警报的任意属性匹配,可动态分派任意渠道和任意人/组/值班组

不支持

告警提升

基于警报的任意属性匹配,长时间未确认/未解决可升级到任意渠道以及相关人/组/值班组

不支持

用户/用户组/值班组管理

支持

不支持

通知渠道

短信/语音/邮件/webhook/钉钉/微信/飞书等

短信语音需与第三方集成

3. 易用性(构建完整可观测分析平台需组合多款服务)

SLS 支持一站式数据平台能力,完整支持了运维和 SRE 工作中对于监控分析平台的需求。同时如数据加工、告警等增值功能均支持按实际使用量付费,无额外功能预留成本。

ES 为主流的日志分析开源方案,但是如果要构建一套完整的可观测分析平台。还需要组合多款服务,这其中包括Logstash、Kibana、Kafka、Flink、TSDB、Prometheus 等服务。

对比项

SLS Standard 规格

SLS Query 规格

开源 ELK

服务保证

全托管免运维,具备可靠的SLA保证

ELK 依赖用户自运维保障稳定性

数据采集

支持 Logtail,SDK 等多种采集方式,支持 PB 级数据写入能力

依赖 Beats 套组进行采集。在大数据量场景,需要依赖 Kafka 实现写入缓存,防止 es 写入性能超限进而导致数据丢失。

数据存储

原生支持 Log/Trace/Metric 存储

默认支持 Log 存储,Trace/Metric 属于 X-Pack 组件需单独付费。业内 Metric 数据主流方案是使用时序数据库如 Influxdb、TSDB 存储

查询检索

支持

支持

分析

(SQL 分析)

支持

不支持

(依赖 Scan 支持)

支持

Scan

(无索引分析)

支持

不支持

告警

支持,提供多种智能降噪方案,可有效实现报警降噪。

部分支持(不支持带SQL 监控)

主要依赖 Kibana Alerting 属于 X-Pack 组件,需单独付费。Kibana Alerting 不具备告警降噪功能

加工-行处理

(流式加工)

原生支持

ELK 的 Logstash filter 组件在写入时加工,无法保证数据完整性,主流方案是依赖 Kafka+Flink 或者 flume 完成数据清洗之后再写入 Kafka

Scheduled-SQL

(批处理加工)

原生支持

不支持

支持(rollup、transforms)

可视化

原生支持

不支持

依赖 Kibana 组件实现可视化能力

导出/消费

原生支持

无法对写入的日志进行实时消费,一般要配一个 kafka 开源系统进行搭配(增加额外成本)

4. 数据互联互通与开发(数据集成、算法增强、告警加持)

 可观测数据平台:开源 ELK 方案相比 SLS 存在数据孤岛现象

  • SLS 可观测数据统一存储支持 log metric trace 数据存储,打通数据孤岛。

image.png

 算法支持:传统开源 ELK 方案比 SLS支持更有限的聚合算法

  • SLS 针对数据分析场景支持 30+ 聚合计算函数,丰富的机器学习函数以及多渠道数据源。ELK 仅支持指标分析聚合、分桶聚合、管道分析、矩阵分析有限的聚合算法。

image.png

 告警能力:传统开源 ELK 比 SLS 的告警能力更低效

  • SLS  相比 ELK 提供全面监控、智能降噪和多为分析的能力。开源 ELK 仅支持同一结构多索引合并分析有限的告警能力。

类别

对比项

日志服务SLS

开源ELK

监控规模

监控日志/时序规模

PB 级别

TB 级别

协同监控

多存储单元关联监控(如索引/库)

支持(SQL Join、告警集合操作扩展)

仅支持同一结构多索引合并分析,不支持 JOIN

关联日志与时序监控

支持(SQL Join、告警集合操作扩展)

不支持

跨存储容器监控(如集群/项目)

支持

不支持

跨区域监控

支持

不支持

降噪控制

连续同一警报去重

时间窗口内,同一告警去重或延迟发送(基于标签)

不支持

多种警报归类合并

时间窗口内,将各类警报合并分组发送(基于包括标签的任意属性归类)

不支持

警报等级抑制/压制

特定源警报可抑制特定目标告警(源和目标可基于包括标签的任意属性匹配)

不支持

警报静默

静默特定时间(基于包括标签的主要属性)

不支持

通知管理

动态分派通知渠道

基于警报的任意属性匹配,可动态分派任意渠道和任意人/组/值班组

不支持

告警提升

基于警报的任意属性匹配,长时间未确认/未解决可升级到任意渠道以及相关人/组/值班组

不支持

用户/用户组/值班组管理

支持

不支持

通知渠道

短信/语音/邮件/webhook/钉钉/微信/飞书等

短信语音需与第三方集成

小结

ElasticSearch 基于 Lucene 全文索引实现,面向 Document 类型,构建一套完整的可观测分析平台需要组合多款服务,这其中包括 logstash、Kibana、Kafka、Flink、TSDB、Prometheus 等服务,对于规模、查询能力等方面存在一定限制,整体成本较高。

日志服务 SLS 基于阿里云自研灵活索引,支持一站式云原生可观测性,多规格多场景支持,SLS 十亿级别数据查询和分析场景性能高达 ES 的 10 倍,综合成本是 ES 的 44%。

如需了解从ES平滑迁移到SLS 攻略,请参考文章链接/article/1412611

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4天前
|
运维 监控 数据可视化
日志服务 HarmonyOS NEXT 日志采集最佳实践
鸿蒙操作系统(HarmonyOS)上的日志服务(SLS)SDK 提供了针对 IoT、移动端到服务端的全场景日志采集、处理和分析能力,旨在满足万物互联时代下应用的多元化设备接入、高效协同和安全可靠运行的需求。
116801 10
|
4天前
|
存储 监控 数据可视化
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
302 0
|
4天前
|
Prometheus Cloud Native 数据库
Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
|
4天前
|
SQL 调度 Swift
【深入浅出】阿里自研开源搜索引擎Havenask日志查询
本次分享内容为Havenask的日志查询,文章包含了具体查询步骤和举例、实操演示,希望可以帮助大家更好的使用Havenask。
571 0
|
4天前
|
SQL 存储 监控
SLS 查询新范式:使用 SPL 对日志进行交互式探索
像 Unix 命令一样支持多级管道级联,像加工预览一样实时处理查询结果,更便捷的交互,更丰富的算子,更灵活的探索半结构化日志,快来试试使用 SPL 语言查询日志数据吧~
46421 6
|
4天前
|
消息中间件 存储 运维
更优性能与性价比,从自建 ELK 迁移到 SLS 开始
本文介绍了 SLS 基本能力,并和开源自建 ELK 做了对比,可以看到 SLS 相比开源 ELK 有较大优势。
55421 146
|
4天前
|
API 开发工具 C语言
【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
|
4天前
|
芯片
【嵌入式开源库】使用J-Link打印日志,让你节省一个打印串口
【嵌入式开源库】使用J-Link打印日志,让你节省一个打印串口
|
4天前
|
存储 Prometheus 索引
日志系统新贵Loki,确实比笨重的ELK轻
日志系统新贵Loki,确实比笨重的ELK轻
32 0
|
4天前
|
自然语言处理 Java API
常见C++ 开源日志库的比较
常见C++ 开源日志库的比较
29 0

相关产品

  • 日志服务
  • http://www.vxiaotou.com