今天,我们来探讨另一个主流的Trace存储组件:VictoriaTraces。结合OpenTelemetry进行部署实践,并对其性能特点进行分析。
一、VictoriaTraces简介
VictoriaTraces 是由 VictoriaMetrics 团队开发的一款开源数据库,专门用于存储和查询分布式跟踪数据。该公司旗下主要的三款开源产品分别是VictoriaMetrics、VictoriaLogs和VictoriaTraces,它们专注于提供先进的监控和可观测性解决方案。
官方文档:https://docs.victoriametrics.com/

相关项目GitHub地址:
功能特点:
- 高效性与可扩展性:与Grafana Tempo等方案相比,VictoriaTraces的内存使用最高可减少3.7倍,CPU使用最高可减少2.6倍。其性能和容量随CPU、内存、磁盘等资源线性扩展,并支持集群模式水平扩展。
- 简单易用:提供可直接运行的可执行文件或Docker镜像,通过命令行参数即可配置,多数环境无需复杂配置。在生产环境中无需依赖外部对象存储或数据库(如ClickHouse, Elasticsearch)。
- 兼容性强:支持接收OpenTelemetry协议的跟踪数据,并提供兼容Jaeger查询的JSON API,便于与Grafana或Jaeger UI集成。
- 监控与警报:在
http://:10428/metrics端点暴露Prometheus格式的内部指标,可通过VictoriaMetrics、vmagent或Prometheus进行监控。支持与vmalert集成,基于跟踪统计数据创建告警规则。
二、架构

高可用架构:

三、部署实践
3.1 部署VictoriaTraces
- 创建
docker-compose.yaml
services:
victoria-traces:
image: victoriametrics/victoria-traces:v0.4.0-scratch
container_name: victoria-traces
restart: always
ports:
- "10428:10428" # 主要API端口(接收跟踪数据、查询)
volumes:
- ./victoriatraces-data:/victoriatraces-data # 持久化存储跟踪数据
command:
# 数据保留7天
- -retentionPeriod=7d
# 磁盘使用率超过80%时自动清理旧数据
- -retention.maxDiskUsagePercent=80
# 数据存储路径(需与volume挂载路径一致)
- -storageDataPath=/victoriatraces-data
networks:
- trace
networks:
trace:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
2. 启动服务
```bash
docker compose up -d
docker logs -f victoria-traces
3.2 配置OpenTelemetry Collector
这里主要是在exporters中添加转发到VictoriaTraces的配置。OpenTelemetry Collector的部署可参考以往文章。
receivers:
# 接收OTLP格式的跟踪数据(支持gRPC和HTTP)
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # gRPC端口,应用程序通过此端口发送数据
http:
endpoint: 0.0.0.0:4318 # HTTP端口,应用程序通过此端口发送数据
processors:
# 批处理以优化网络请求
batch:
timeout: 5s
send_batch_size: 1024
exporters:
# 转发跟踪数据到VictoriaTraces的OTLP HTTP接口
otlphttp/vt:
endpoint: http://victoriatraces:10428/insert/opentelemetry # VictoriaTraces的OTLP接收地址
tls:
insecure: true # 非生产环境可禁用TLS(生产环境需配置证书)
service:
pipelines:
traces:
receivers: [otlp] # 接收端:OTLP
processors: [batch] # 处理器:批处理
exporters: [otlphttp/vt] # 输出端:转发到VictoriaTraces
注意:VictoriaTraces内置了OTLP接收端点,应用也可以直接配置其地址:
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://<server>:10428/insert/opentelemetry/v1/trace
3.3 数据查看
首先在测试应用上触发跟踪数据。

3.3.1 使用内置VMUI
访问地址:http://<victoriatraces-server>:10428/select/vmui

3.3.2 通过Grafana查看
VictoriaTraces暴露了兼容Jaeger的查询API:http://<victoriatraces-server>:10428/select/jaeger
-
在Grafana中添加Jaeger数据源。

-
查询跟踪数据。

四、监控VictoriaTraces
VictoriaTraces在http://<victoriatraces-server>:10428/metrics端点暴露Prometheus格式的指标,可以方便地集成到现有的监控体系中。
五、关键配置参数
命令行参数官方文档:https://docs.victoriametrics.com/victoriatraces/#list-of-command-line-flags
常用参数:
- 设置数据保留时间:
-retentionPeriod=8w
- 设置最大磁盘使用空间(绝对值):
-retention.maxDiskSpaceUsageBytes=100GiB
- 设置最大磁盘使用百分比:
-retention.maxDiskUsagePercent=80
注意:-retention.maxDiskSpaceUsageBytes 和 -retention.maxDiskUsagePercent 标志互斥,同时设置会导致服务无法启动。
- 设置数据存储目录:
-storageDataPath=/var/lib/victoria-traces
摄入的数据存储在 <storageDataPath>/partitions/ 目录下按天划分的子目录(分区)中,格式为 YYYYMMDD,例如 20250418。

六、同类产品对比分析
6.1 基本定位与设计理念
| 工具 |
定位与核心设计理念 |
开发/维护方 |
| Jaeger |
成熟的分布式追踪系统,注重端到端可观测性,与OpenTelemetry生态深度融合。 |
Uber(后捐给CNCF) |
| Tempo |
轻量、存储优先的追踪系统,设计目标是低成本存储海量traces,依赖对象存储。 |
Grafana Labs |
| VictoriaTraces |
高性能、低资源消耗的追踪数据库,强调单机性能和线性扩展,无外部存储依赖。 |
VictoriaMetrics团队 |
6.2 OpenTelemetry(OTel)兼容性
| 特性 |
Jaeger |
Tempo |
VictoriaTraces |
| OTLP接入协议 |
支持(gRPC/HTTP),原生集成。 |
支持(gRPC/HTTP),通过OTel Collector接入。 |
支持(gRPC/HTTP),内置OTLP接收端点。 |
| 数据格式支持 |
完全兼容OTel Trace规范。 |
完全兼容OTel Trace规范。 |
完全兼容OTel Trace规范。 |
| 协议转换 |
内置支持Zipkin、Jaeger原生协议转OTLP。 |
依赖OTel Collector完成协议转换。 |
依赖OTel Collector转换非OTLP协议。 |
小结:三者均完全兼容OTel标准,Jaeger对多协议的原生支持更丰富。
6.3 存储架构与数据管理
| 特性 |
Jaeger |
Tempo |
VictoriaTraces |
| 存储引擎 |
支持Cassandra/Elasticsearch等后端。 |
核心依赖对象存储(如S3)。 |
自研存储引擎,直接写入本地磁盘,无外部依赖。 |
| 数据压缩 |
依赖底层存储,压缩率中等。 |
强压缩(Zstd),压缩率极高。 |
高效压缩,内存和磁盘占用低。 |
| 存储扩展性 |
依赖分布式存储扩展,复杂度高。 |
水平扩展简单(增加对象存储容量)。 |
集群模式支持分片扩展,性能线性增长。 |
小结:Tempo存储成本最低,VictoriaTraces部署最简单,Jaeger存储灵活性高但维护复杂。
6.4 查询能力与可视化
| 特性 |
Jaeger |
Tempo |
VictoriaTraces |
| 查询方式 |
支持按trace ID、服务名、标签等过滤。 |
支持按trace ID、服务名、标签查询。 |
兼容Jaeger查询API,支持类似过滤。 |
| 查询性能 |
依赖底层存储索引,复杂查询可能较慢。 |
trace ID精确查询极快。 |
单机查询性能优异,支持高效标签过滤。 |
| 可视化集成 |
自带Jaeger UI,支持Grafana插件。 |
完全依赖Grafana可视化。 |
兼容Jaeger UI和Grafana(通过Jaeger数据源)。 |
小结:Tempo + Grafana的组合在可视化和聚合分析上能力强;Jaeger自带UI更易用;VictoriaTraces兼容性好且查询性能突出。
6.5 性能与资源占用
| 特性 |
Jaeger |
Tempo |
VictoriaTraces |
| 写入性能 |
中等,依赖存储后端。 |
极高,可线性扩展。 |
极高,自研引擎优化,单机每秒可处理数十万至百万级spans。 |
| 内存占用 |
较高。 |
低,无状态节点。 |
极低,比Jaeger少3-5倍。 |
| 适合场景 |
中小规模集群。 |
超大规模集群(如PB级traces)。 |
中小到大规模集群,追求高性能和低资源占用。 |
小结:Tempo和VictoriaTraces的写入性能远超Jaeger。Tempo适合超大规模,VictoriaTraces适合对资源敏感的场景。
6.6 部署与维护复杂度
| 特性 |
Jaeger |
Tempo |
VictoriaTraces |
| 部署复杂度 |
高(需部署存储后端)。 |
中(需对象存储 + 可选Redis)。 |
极低(单二进制文件或容器,直接挂载磁盘即可运行)。 |
| 维护成本 |
高(需维护存储集群)。 |
中(对象存储维护简单)。 |
低(自动数据清理,无外部依赖)。 |
小结:VictoriaTraces部署维护最简单,Tempo次之,Jaeger因依赖外部存储最复杂。
6.7 总结与选型建议
| 工具 |
核心优势 |
适合场景 |
不适合场景 |
| Jaeger |
生态成熟、多协议支持、自带UI。 |
中小规模、需快速上手、依赖多协议、需服务依赖图分析。 |
超大规模、对存储成本和资源占用敏感。 |
| Tempo |
低成本海量存储、Grafana深度集成。 |
超大规模集群(PB级)、已使用Grafana生态、优先控制存储成本。 |
无对象存储环境、需要极致查询性能(非trace ID查询)。 |
| VictoriaTraces |
高性能、低资源、部署简单、无外部依赖。 |
中小到大规模、对资源敏感、追求简单部署和维护、已有VictoriaMetrics栈。 |
需要高度定制化存储后端、依赖复杂聚合分析。 |
最终建议:
- 若已在使用Grafana且数据量极大,选 Tempo。
- 若追求简单部署和高性能,且无需复杂存储依赖,选 VictoriaTraces。
- 若需兼容多协议且生态成熟度优先,选 Jaeger(需接受较高的资源占用)。