公司动态

VictoriaMetrics离线部署与性能优化实战指南

📅 2026/7/27 15:38:30
VictoriaMetrics离线部署与性能优化实战指南
1. 为什么需要VictoriaMetrics作为Prometheus的外接存储Prometheus作为云原生监控的事实标准在长期运行中会遇到两个典型问题一是单机存储容量有限当监控指标达到TB级别时本地TSDB的查询性能会急剧下降二是原生多副本方案如Thanos配置复杂且资源消耗大。我在生产环境中就遇到过Prometheus磁盘频繁告警的情况——当多个挂载点同时触发空间阈值时告警风暴会让运维人员疲于奔命。VictoriaMetrics的诞生恰好解决了这些痛点。这个用Go编写的高性能时序数据库在相同硬件条件下能达到Prometheus 10倍以上的压缩率。我实测过一个采集500万指标的集群Prometheus本地存储需要1.2TB空间而VictoriaMetrics仅占用120GB。其列式存储结构对高基数high cardinality指标的处理尤其出色这对Kubernetes这种动态环境特别重要。关键选择二进制离线部署方式特别适合金融、军工等隔离环境也避免了容器编排系统的复杂度。相比Docker部署方案二进制包更易于资源控制和版本固化。2. 离线环境下的部署前准备2.1 硬件资源规划建议根据我的经验每100万时间序列需要以下资源基准CPU2核查询密集型场景需4核内存4GB高基数场景需8GB磁盘100GB SSD建议预留3倍增长空间在军工客户的内网环境中我们采用以下拓扑[Prometheus Server] - [Nginx代理] - [VM单节点] - [NFS共享存储]这种架构下Nginx实现请求负载均衡和TLS终止NFS存储保证数据持久化。注意要关闭NFS的属性缓存noac参数否则可能导致数据损坏。2.2 离线包获取与校验从GitHub下载对应版本的tar包时务必检查校验和wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.4/victoria-metrics-linux-amd64-v1.93.4.tar.gz echo a1b2c3d4e5f6... victoria-metrics-linux-amd64-v1.93.4.tar.gz | sha256sum -c离线环境下需要提前准备这些依赖库libc6 ( 2.32)libgcc-s1 ( 3.0)libstdc6 ( 11.2)3. 详细部署步骤解析3.1 服务端安装与配置解压后建议将二进制文件放入/opt/vm目录并创建专用用户tar -xzf victoria-metrics-*.tar.gz sudo mkdir -p /opt/vm/{bin,data,config} sudo cp victoria-metrics-prod /opt/vm/bin/ sudo useradd --no-create-home --shell /bin/false victoriametrics创建systemd服务单元时这些参数对性能影响最大[Service] ExecStart/opt/vm/bin/victoria-metrics-prod \ -storageDataPath/opt/vm/data \ -retentionPeriod12 \ # 保留月份数 -search.maxQueryDuration30s \ -search.maxQueueDuration10s \ -memory.allowedPercent60 \ # 不超过60%内存 -loggerFormatjson # 结构化日志3.2 Prometheus远程写入配置在prometheus.yml中添加remote_write时这些调优参数很关键remote_write: - url: http://vm-server:8428/api/v1/write queue_config: capacity: 10000 # 队列容量 max_shards: 30 # 并发写入分片数 min_shards: 5 # 最小分片数 batch_send_deadline: 10s write_relabel_configs: - source_labels: [__name__] regex: (up|process_.*) action: drop # 过滤无用指标4. 性能调优实战技巧4.1 磁盘IO优化方案在机械硬盘环境中通过deadline调度器提升吞吐echo deadline /sys/block/sdb/queue/scheduler sudo sysctl -w vm.dirty_ratio10 sudo sysctl -w vm.dirty_background_ratio5对于SSD设备建议启用fstrim定时任务sudo systemctl enable fstrim.timer4.2 内存管理黄金法则VictoriaMetrics的内存分配遵循这个公式最大内存 max(内存总量 × 60%, 保留内存 × 2)例如64GB机器运行12个月保留期的监控数据应该设置-memory.allowedPercent50 -storage.maxDailySeries5M5. 生产环境问题排查实录5.1 写入拒绝故障处理当出现too many missing samples错误时按此流程排查检查Prometheus与VM的时间差curl -s http://localhost:9090/api/v1/status/buildinfo | jq .data.timestamp curl -s http://vm:8428/api/v1/status/buildinfo | jq .data.timestamp验证网络延迟tcpping vm-server 8428调整Prometheus的scrape_interval与VM的-search.maxQueryDuration对齐5.2 查询超时优化方案对于复杂查询在vmselect的启动参数添加-search.maxQueryLen1MB \ # 最大查询长度 -search.maxPointsPerSeries100k \ # 单曲线最大点数 -search.maxSeries100k \ # 返回最大序列数在Grafana侧需要设置对应变量[query_frontend] max_query_length 1024000 max_query_parallelism 106. 数据迁移与备份策略6.1 在线热迁移方案使用vmctl工具进行增量迁移时这个命令组合最可靠vmctl prometheus \ --src-addrhttp://old-prometheus:9090 \ --dst-addrhttp://new-vm:8428 \ --step-interval2h \ --concurrency10 \ --disable-http2 \ --filter.time-start2024-01-01T00:00:00Z6.2 离线备份最佳实践创建快照时建议停止写入流量curl -XPOST http://vm-server:8428/snapshot/create \ -d {snapshot_name:before_upgrade_1.93}备份完成后验证数据完整性vmbackup -storageDataPath/opt/vm/data \ -dstfs:///backup/vm/ \ -snapshotNamebefore_upgrade_1.93 \ -concurrency47. 安全加固关键步骤在内网环境中这些配置必不可少启用基础认证-httpAuth.usernameadmin \ -httpAuth.password$(echo StrongPass123 | base64)限制客户端IPiptables -A INPUT -p tcp --dport 8428 -s 10.1.1.0/24 -j ACCEPT日志脱敏处理-logtostderr \ -loggerFormatjson \ -loggerLevelINFO \ -loggerOutputstderr \ -loggerRegexErrorSkip(password|token)8. 监控自监控体系搭建8.1 VictoriaMetrics自身监控采集这些关键指标sum(rate(vm_http_request_errors_total[5m])) by (instance) # 错误请求 histogram_quantile(0.95, sum(rate(vm_http_request_duration_seconds_bucket[5m])) by (le)) # P95延迟 vm_rows_inserted_total # 写入吞吐量8.2 告警规则精要这些规则能提前发现隐患- alert: VMHighRejectionRate expr: rate(vm_http_requests_rejected_total[1m]) 5 for: 5m labels: severity: critical annotations: summary: VictoriaMetrics rejecting {{ $value }}% requests - alert: VMLowDiskSpace expr: (1 - (vm_free_disk_space_bytes / vm_total_disk_space_bytes)) * 100 85 for: 30m labels: severity: warning9. 版本升级避坑指南在金融客户现场验证过的升级流程创建数据快照停止旧版本服务备份配置文件安装新版本二进制启动时添加-finalMergeDelay1h参数观察24小时无异常后移除该参数回滚时需要特别注意1.82版本的数据快照不能用于1.81-版本降级前必须执行curl -XPOST http://localhost:8428/internal/force_merge