找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

250

积分

0

好友

34

主题
发表于 昨天 04:02 | 查看: 8| 回复: 0

今天,我们来探讨另一个主流的Trace存储组件:VictoriaTraces。结合OpenTelemetry进行部署实践,并对其性能特点进行分析。

一、VictoriaTraces简介

VictoriaTraces 是由 VictoriaMetrics 团队开发的一款开源数据库,专门用于存储和查询分布式跟踪数据。该公司旗下主要的三款开源产品分别是VictoriaMetrics、VictoriaLogs和VictoriaTraces,它们专注于提供先进的监控和可观测性解决方案。

官方文档:https://docs.victoriametrics.com/

VictoriaTraces Logo

相关项目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集成,基于跟踪统计数据创建告警规则。

二、架构

VictoriaTraces架构图

高可用架构: VictoriaTraces高可用架构图

三、部署实践

3.1 部署VictoriaTraces
  1. 创建 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

VMUI界面

3.3.2 通过Grafana查看

VictoriaTraces暴露了兼容Jaeger的查询API:http://<victoriatraces-server>:10428/select/jaeger

  1. 在Grafana中添加Jaeger数据源。 添加数据源1 添加数据源2

  2. 查询跟踪数据。 Grafana查询1 Grafana查询2

四、监控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(需接受较高的资源占用)。
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-3 13:46 , Processed in 0.061994 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表