VictoriaLogs 要凭什么革了各家日志存储的命
如果大家对时序指标的存储方案有些了解,那大概率会听过 VictoriaMetrics,VictoriaMetrics 号称 Prometheus 的升级版,在性能和成本方面也确实做得很好,如果是夜莺新用户,我都是推荐直接使用 VictoriaMetrics 来作为存储。前几天 Victoria 发布了 VictoriaLogs,号称比 ElasticSearch 大幅节省成本(成本问题确实是 ElasticSearch 广受诟病的点),号称比 Loki 快,号称比 ClickHouse 易用,这… 牛逼吹的很大,不知道未来是否能独霸天下。本文翻译了一下 VictoriaLogs 官方文档中和其他存储的对比,大家可以先做一个了解,看看 VictoriaLogs 是凭什么这么说。
和 ElasticSearch(OpenSearch) 的对比
Elasticsearch 和 VictoriaLogs 都允许摄取结构化和非结构化日志,并对摄取的日志执行快速全文搜索。 Elasticsearch 和 OpenSearch 被设计为通用数据库,用于对大量文档进行快速全文搜索。它们没有专门针对日志进行优化。这会导致以下问题,VictoriaLogs 已解决这些问题:
- RAM 使用率高
- 磁盘空间使用率高
- 重要但不太好搞的索引设置
- 无法在单个查询中选择超过 10K 的匹配日志行
VictoriaLogs 专门针对日志进行了优化。因此它提供了以下对日志有用的功能,而 Elasticsearch 中缺少这些功能:
- 易于设置和操作。无需调整配置以获得最佳性能或为各种日志类型创建任何索引。只需在最合适的硬件上运行 VictoriaLogs - 它就会自动提供最佳性能。
- 对于相同的工作负载,RAM 使用量比 Elasticsearch 低 30 倍。
- 对于相同数量的存储日志,磁盘空间使用量比 Elasticsearch 少 15 倍。
- 能够在单个节点上处理数百 TB 的日志。
- 非常易于使用的查询语言,针对典型日志分析任务进行了优化 - LogSQL。
- 开箱即用地对所有日志字段进行快速全文搜索。
- 与传统的日志分析命令行工具良好集成。
和 Grafana Loki 的对比
Grafana Loki 和 VictoriaLogs 都是为日志管理和处理而设计的。两个系统都支持 log stream 概念。
VictoriaLogs 和 Grafana Loki 有以下区别:
- Grafana Loki 不支持高基数日志字段(也称为标签),例如 user_id、trace_id 或 ip。当具有高基数字段的日志被摄取到其中时,它开始消耗大量的 RAM 并且工作速度非常慢。有关详细信息,请参阅这些文档。 VictoriaLogs 支持高基数日志字段。它自动索引所有摄取的日志字段,并允许对任何字段执行快速全文搜索。
- Grafana Loki提供了非常不方便的查询语言——LogQL。这种查询语言很难用于典型的日志分析任务。VictoriaLogs 为典型日志分析任务提供了易于使用的查询语言 - LogSQL。
- VictoriaLogs 执行典型全文查询的速度比 Grafana Loki 快 1000 倍。
- 对于相同数量的日志,VictoriaLogs 需要的存储空间比 Grafana Loki 更少。
- VictoriaLogs 比 Grafana Loki 更容易设置和操作。

恰饭时刻:FlashDuty 是一款告警事件 OnCall 中心的产品。可以对接 Zabbix、Prometheus、Open-Falcon、Nightingale、Influx、Grafana、蓝鲸、各类云监控,把告警事件统一汇聚到一个中心,做告警聚合收敛降噪、排班认领协同。适合对稳定性有诉求的团队以及同时使用了多个监控系统的团队,欢迎体验和试用。
和 ClickHouse 的对比
ClickHouse 是一个极其快速且高效的分析数据库。可用于日志存储、分析和处理。 VictoriaLogs 专为日志设计。 VictoriaLogs 使用与 ClickHouse 类似的设计思想来实现高性能。
- 如果您事先知道日志字段集,则 ClickHouse 对于日志很有用。然后,您可以创建一个表,每个日志字段有一列,并实现最大可能的查询性能。如果事先未知日志字段集,或者它可以随时更改,则仍然可以使用 ClickHouse,但其效率可能会受到显着影响,具体取决于您如何设计用于日志存储的数据库 Schema。ClickHouse 的效率很大程度上取决于所使用的数据库 Schema。它必须针对特定工作负载进行优化,以实现高效率和查询性能。VictoriaLogs 可与任何开箱即用的日志类型(结构化、非结构化和混合)完美配合。它可以与任何日志字段集完美配合,这些字段可以在不同的日志源中以任何方式更改。
- ClickHouse 为 SQL 方言提供了额外的分析功能。它允许对存储的日志执行任意复杂的分析查询。VictoriaLogs 提供易于使用的查询语言和专门针对日志分析进行优化的全文搜索 - LogSQL。对于典型的日志分析任务,LogSQL 通常比 SQL 更容易使用,而一些重要的分析可能需要 SQL 功能。
- VictoriaLogs 开箱即支持业内常用的日志采集中转器。ClickHouse 需要一个中间应用程序来将摄取的日志转换为特定数据库模式的 INSERT SQL 语句。这可能会增加系统的复杂性,并随后增加其维护成本。
VictoriaLogs 是如何工作的?
VictoriaLogs 接收 JSON 条目形式的日志。然后它将每个字段值存储到不同的数据块中。例如,多个日志条目中同一字段的值存储在单个数据块中。这允许在查询期间仅读取所需字段的数据块。数据块在保存到持久存储之前会被压缩。当受磁盘读取 IO 带宽限制时,这可以节省磁盘空间并提高查询性能。较小的数据块在后台合并为较大的块。数据块的大小是有限的。如果数据块的大小超过限制,则将其分割成多个较小大小的块。
在查询期间以原子方式处理每个数据块。例如,如果数据块至少包含需要处理的单个值,则立即解包并读取整个数据块。查询期间,数据块在所有可用的 CPU 内核上并行处理。这允许通过可用 CPU 核心的数量来扩展查询性能。
该架构的灵感来自 ClickHouse 架构。
除此之外,VictoriaLogs 采用额外的优化来实现高查询性能:
- 它使用布隆过滤器来跳过没有给定单词或短语的块。
- 它对不同数据类型的字段使用自定义编码和压缩。例如,它将 IP 地址编码为 4 字节元组。自定义字段的编码可减少磁盘上的数据大小并提高查询性能。
- 它在物理上将同一 log stream 的日志分组为彼此靠近。这提高了压缩率,有助于减少磁盘空间的使用。当使用流过滤器时,这还可以通过跳过不需要的流的块来提高查询性能。
- 它维护日志时间戳的稀疏索引,这可以在使用时间过滤器时提高查询性能。
扩展阅读:
- 方法论:面向故障处理的可观测性体系建设
- 白皮书:事件OnCall中心建设方法
- 好工具:FlashDuty - 一站式告警处理平台:告警降噪、排班OnCall
- 好工具:Grafana 开源了一款 eBPF 采集器 Beyla
VictoriaLogs 要凭什么革了各家日志存储的命的更多相关文章
- 关于拦截器实现日志存储到db的代码调试
问题是,原来系统有日志操作的代码,但日志最终没有存到数据库. xml中拦截器配置: <mvc:interceptor> <mvc:mapping path="/admin/ ...
- Abp + MongoDb 改造默认的审计日志存储位置
一.背景 在实际项目的开发当中,使用 Abp Zero 自带的审计日志功能写入效率比较低.其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起.所以我们可以重新实现 Abp 的 IAuditi ...
- syslog远程日志存储/514端口【转】
昨天在抓包的时候,发现在514端口,有SYSLOG字段的东西,不知道是用来干啥的,现在来分析一下: 其实他是在电脑间用了syslog远程日志存储,他用udp监控了514端口的数据流,之后收集整理日志: ...
- Es+kafka搭建日志存储查询系统(设计)
现在使用的比较常用的日志分析系统有Splunk和Elk,Splunk功能齐全,处理能力强,但是是商用项目,而且收费高.Elk则是Splunk项目的一个开源实现,Elk是ElasticSearch(Es ...
- linux系统各种日志存储路径和详细介绍
Linux常见的日志文件详述如下1./var/log/boot.log(自检过程)2./var/log/cron (crontab守护进程crond所派生的子进程的动作)3./var/log/mail ...
- nodejs简单http日志存储
nodejs实现简单http日志存储 /* 日志存储: 202.189.63.115 - - [31/Aug/2008:15:42:31 +0800] "GET / HTTP/1.1&quo ...
- Python logging模块日志存储位置踩坑
问题描述 项目过程中写了一个小模块,设计到了日志存储的问题,结果发现了个小问题. 代码结构如下: db.py run.py 其中db.py是操作数据库抽象出来的一个类,run.py是业务逻辑代码.两个 ...
- 我们NetCore下日志存储设计
日志的分类 首先往大的来说,日志分2种 ①业务日志: 即业务系统需要查看的日志, 常见的比如谁什么时候修改了什么. ②参数日志: 一般是开发人员遇到问题的时候定位用的, 一般不需要再业务系统里展示. ...
- ES日志存储以及备份压缩到COS
导语 为了满足用户日益增长的日志存储大小,不影响用户的写入和查询性能.满足不同用户写入流量.同时用户日志长期保存,日志存储比较占用空间和成本.ES集群规格配置高,消耗资源和成本.我们基于Go语言设计了 ...
- 《Mail电子邮件日志存储的管理》RedHat6.3——以一举三
我们都知道很多日志的模块都是放在这下面的 要是想修改或是添加其他服务的日志,怎么办?修改下面的配置文件 测试下是否ok 轮转日志和定位分析和分析日志汇总报告: 安装logwatch软件包,这个没啥说的 ...
随机推荐
- 【详谈 Delta Lake 】系列技术专题 之 特性(Features)
简介: 本文翻译自大数据技术公司 Databricks 针对数据湖 Delta Lake 的系列技术文章.众所周知,Databricks 主导着开源大数据社区 Apache Spark.Delta L ...
- DataWorks 功能实践速览03期 — 生产开发环境隔离
简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 往期回顾: DataWorks 功能实践速览01期--数据同步解决方案:为您介绍不同场景下可选的数据同 ...
- [Go] 结构体成员的第三个位置上标签的作用
结构体成员加了第三个位置的标签,在转换指定类型时,key 会使用指定的名字. package main import ( "encoding/json" "log&quo ...
- dotnet 使用 NamedPipeClientStream 连接一个不存在管道服务名将不断空跑 CPU 资源
本文记录一个开发和代码审查过程中,需要关注的细节.在 dotnet 里,在 .NET 6 和以下版本,包括 .NET Framework 版本,使用 NamedPipeClientStream 进行连 ...
- R3_Elasticsearch Index Setting
索引的配置项按是否可以更改分为static属性与动态配置,所谓的静态配置即索引创建后不能修改.目录如下:生产环境中某索引结构(7.X后有变化) 索引静态配置 1.分片与压缩 index.number_ ...
- HouseParty原创故事全角色关系及主线剧情介绍(最新版)
这是原创故事的主要的角色的主线及支线剧情的介绍及攻略和注意事项等. 这里的图比哔哩哔哩上的图清楚一点,哔哩哔哩同号:宅猫君007 以上是全角色的关系图 最新版本的游戏下载就在我的网站上:https:/ ...
- 07 mapping索引操作
目录 版本 获取健康值 获取所有索引的信息 创建索引 1. 自动推导 2. 自定义 判断索引是否存在 新增字段 新增记录 查询记录 获取mapping信息 删除索引 添加别名 查看别名 索引备份数据 ...
- element Tree 树形控件
文档地址 https://element.eleme.cn/#/zh-CN/component/tree 代码地址 https://gitee.com/wBekvam/vue-shop-admin/b ...
- Golang 爬虫01
目录 学习地址: 目录站: 爬虫概念: 工作流程: 百度贴吧爬虫实现: go实战代码 单进程 实现过程: 并发爬取 实现过程: 学习地址: https://www.bilibili.com/video ...
- C#.Net筑基-基础知识
01.C#基础概念 1.1.C#简介 C# (读作C Sharp)是由微软公司开发的一种面向对象.类型安全.高效且简单的编程语言,最初于 2000 年发布,并随后成为 .NET 框架的一部分.所以学习 ...