14.3 万条/秒!VictoriaMetrics 亲自“开考”,把 8 大主流日志采集器按在地上摩擦

14.3 万条/秒!VictoriaMetrics 亲自“开考”,把 8 大主流日志采集器按在地上摩擦

💡 原文中文,约7400字,阅读约需18分钟。
📝

内容提要

VictoriaMetrics 发布日志采集器基准测试报告,其新品 vlagent 在 1 核 1GB 限制下吞吐量达 14.3 万条/秒,是 Fluent Bit 的 4.5 倍、Fluentd 的 28 倍,且资源消耗最低。测试还发现 Fluent Bit 和 Vector 存在日志轮转丢字段、默认配置漏日志等正确性问题。vlagent 目前不支持多行日志合并和非 JSON 解析,适合 JSON 结构化日志场景。

🔎

延伸解读

测试设计的关键:真实环境与零调优

本次测试并非在理想化环境中进行,而是模拟了生产环境常见的资源受限场景:所有采集器共享同一节点,限制为1核CPU和1GiB内存,且不做任何调优。这种设计更能反映实际部署中的性能表现,也使得测试结果更具参考价值。测试代码和配置完全开源,便于复现验证。

正确性问题比性能差距更值得警惕

除了性能数据,报告还揭示了Fluent Bit和Vector在日志轮转时可能产生残缺记录、Vector默认配置可能导致新Pod日志静默丢失等问题。这些问题在常规测试中难以发现,却可能悄无声息地污染日志数据,影响下游依赖标签或字段的过滤和告警逻辑。

vlagent的适用边界与替代方案

vlagent目前不支持多行日志合并和非JSON格式解析,因此对于Java堆栈或Nginx访问日志等场景并不适用。但如果你的需求是稳定采集Kubernetes中的JSON结构化日志,且对资源占用和丢日志零容忍,vlagent值得一试。它支持本地缓冲和至少一次投递,且不绑定VictoriaLogs,可与其他采集器并行部署。

Q&A

VictoriaMetrics 发布的日志采集器基准测试中,vlagent 的吞吐量是多少?

在 100 个 Pod 高并发写入场景下,vlagent 单节点吞吐量达到 14.3 万条/秒,是 Fluent Bit 的 4.5 倍,Fluentd 的 28 倍。

在 1 万条/秒负载下,vlagent 的 CPU 和内存占用分别是多少?

在 1 万条/秒负载下,vlagent 仅占用 0.062 核 CPU 和 27.9 MiB 内存,是所有测试采集器中资源消耗最低的。

测试中 Fluent Bit 和 Vector 在日志轮转时存在什么问题?

Fluent Bit 和 Vector 在日志文件轮转时未拼接上下文,将完整日志切碎成残缺记录转发。在 1 小时、10k 条/秒的测试中,Fluent Bit 产生了 34 条残缺记录,Vector 产生了 2 条,而其他采集器未出现此问题。

Vector 默认配置下有哪些隐患?

Vector 默认配置存在三个隐患:1) glob_minimum_cooldown_ms 默认 60 秒,导致新 Pod 启动前 60 秒的日志静默丢失;2) 高负载下文件描述符泄漏,可能导致磁盘空间被占满;3) Pod 删除时可能丢失 Kubernetes 元数据。

vlagent 目前有哪些局限性?

vlagent 目前不支持多行日志合并(如 Java 堆栈)和非 JSON 自定义解析(如 Nginx access log),适合 JSON 结构化日志场景。

根据测试,给 K8s 工程师的日志采集实践建议有哪些?

建议包括:不要迷信默认配置,上线前核对参数;给采集器留够资源余量;在源头限流;增大日志轮转前的单文件大小。

测试环境是如何设计的?

测试使用一台 Google Cloud n2-highcpu-32 虚拟机,运行单节点 kind 集群,9 款采集器同时运行,共享资源,每个采集器限制 1 核 CPU、1GiB 内存,使用官方默认配置,不做调优。

vlagent 支持哪些功能?

vlagent 支持自动解析 JSON 日志和 Kubernetes 系统日志,自动发现并采集集群内所有容器的日志,支持基于 LogsQL 的过滤,后端不可用时本地磁盘缓冲,支持多目的地复制,并承诺至少一次投递。

🏷️

标签

➡️

继续阅读