17.8.3 远端存储方案对比(Thanos/Cortex/VictoriaMetrics)

3. 远端存储方案对比(Thanos/Cortex/VictoriaMetrics)#

远端存储用于实现长周期保留、跨集群查询与高可用读取,并降低本地TSDB压力。以下从架构、安装与接入、运维与排错角度对比三种方案,并给出可执行示例。

原理草图(对比架构)

文章图片

安装与接入示例(最小可运行)

1)Thanos(Prometheus+Sidecar+Query)

# 1. 准备对象存储(示例使用本地 MinIO)
docker run -d --name minio -p 9000:9000 -p 9001:9001 \
  -e MINIO_ROOT_USER=minioadmin \
  -e MINIO_ROOT_PASSWORD=minioadmin \
  minio/minio server /data --console-address ":9001"

# 2. 创建桶
mc alias set local http://127.0.0.1:9000 minioadmin minioadmin
mc mb local/thanos

# 3. 对象存储配置文件
cat >/etc/thanos-objstore.yml <<'EOF'
type: S3
config:
  bucket: "thanos"
  endpoint: "127.0.0.1:9000"
  access_key: "minioadmin"
  secret_key: "minioadmin"
  insecure: true
EOF

# 4. 启动 Prometheus(示例)
cat >/etc/prometheus/prometheus.yml <<'EOF'
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: "node"
    static_configs:
      - targets: ["127.0.0.1:9100"]
EOF
prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/data/prom

# 5. 启动 Sidecar 与 Query
thanos sidecar \
  --prometheus.url=http://127.0.0.1:9090 \
  --tsdb.path=/data/prom \
  --objstore.config-file=/etc/thanos-objstore.yml

thanos query \
  --http-address=0.0.0.0:10902 \
  --store=127.0.0.1:10901

预期效果:访问 http://127.0.0.1:10902 可查询 PromQL,历史数据逐步落入对象存储。

2)Cortex(remote_write 最小链路)

# 使用官方单体模式(便于快速验证)
docker run -d --name cortex -p 9009:9009 \
  -v /etc/cortex:/etc/cortex \
  cortexproject/cortex:latest \
  -config.file=/etc/cortex/cortex.yml

/etc/cortex/cortex.yml(核心字段最小化):

auth_enabled: false
server:
  http_listen_port: 9009

ingester:
  lifecycler:
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1

storage:
  engine: blocks
  blocks:
    backend: s3
    s3:
      endpoint: 127.0.0.1:9000
      bucket_name: cortex
      access_key_id: minioadmin
      secret_access_key: minioadmin
      insecure: true

Prometheus remote_write 接入:

remote_write:
  - url: http://127.0.0.1:9009/api/v1/push

3)VictoriaMetrics(单机版最简)

docker run -d --name vm -p 8428:8428 \
  -v /data/vm:/storage \
  victoriametrics/victoria-metrics \
  -storageDataPath=/storage \
  -retentionPeriod=12

Prometheus remote_write 接入:

remote_write:
  - url: http://127.0.0.1:8428/api/v1/write

关键命令解释
- --objstore.config-file:Thanos 访问对象存储的凭据与端点。
- remote_write:Prometheus 将样本写入远端存储的核心配置。
- -retentionPeriod:VictoriaMetrics 数据保留周期(月)。

对比维度与结论(简要)
- 架构复杂度:Thanos > Cortex > VictoriaMetrics
- 多租户:Cortex 强;Thanos 中等;VictoriaMetrics 需额外规划
- 查询聚合:Thanos 最强(跨集群 Query)
- 资源与成本:VictoriaMetrics 资源占用低,压缩高
- 运维门槛:Thanos 与 Cortex 需要对象存储与更多组件治理

典型排错

# 1. 检查 Prometheus 是否成功发送 remote_write
curl -s http://127.0.0.1:9090/api/v1/status/tsdb | jq '.data.headStats'

# 2. Thanos Query 未显示 Store
curl -s http://127.0.0.1:10902/api/v1/stores | jq

# 3. Cortex 接收失败(Prometheus 日志)
grep -i remote_write /var/log/prometheus/prometheus.log

# 4. VictoriaMetrics 写入错误
curl -s http://127.0.0.1:8428/metrics | grep -E "vm_*errors_total"

练习
1. 将 Prometheus remote_write 同时指向 Cortex 与 VictoriaMetrics,比较写入延迟与资源使用。
2. 在 Thanos 中启用 Compactor,并观察对象存储中块文件数量变化。
3. 通过 Grafana 创建跨集群查询面板(Thanos Query)并验证去重效果。

选型提示(行动清单)
- 需要跨集群、无侵入扩展:优先 Thanos
- 需要多租户 SaaS 能力:优先 Cortex
- 需要轻量、成本敏感:优先 VictoriaMetrics