最稳方式是直接使用官方预编译二进制包(如victoria-metrics-v1.125.1-linux-amd64.tar.gz),解压后仅保留victoria-metrics-prod静态链接可执行文件,验证file输出为statically linked且-version可正常显示;严禁源码编译(易报__atomic_fetch_add_8错误)或误用企业版单文件(会因license not found启动失败)。

victoria-metrics-prod 单文件扔进 /usr/local/bin 就能跑。
怎么下载和验证二进制包才不会踩坑
去 GitHub Releases 页面找 victoria-metrics-*.tar.gz(例如 victoria-metrics-v1.125.1-linux-amd64.tar.gz),不是 -src.zip,也不是 victoria-metrics-prod 单独的企业版链接——后者不开源、不免费、启动会报错 license not found。
解压后只保留一个可执行文件:victoria-metrics-prod。运行 file victoria-metrics-prod 应显示 statically linked;运行 ./victoria-metrics-prod -version 能打出版本号,说明它不依赖系统 libc 或 Go 环境。
- 常见错误:下载了
victoria-metrics-prod单文件 zip,实际是企业版,启动时日志里反复出现failed to parse license - 常见错误:用
make build源码编译,在 CentOS 7.9 上大概率报undefined reference to __atomic_fetch_add_8——这是 CGO 和旧版 gcc 的兼容问题,纯属自找麻烦 - 路径建议:把
victoria-metrics-prod软链到/usr/local/bin/victoriametrics,方便后续 systemd 管理
systemd 服务必须加的三项硬性配置
裸跑 nohup ./victoria-metrics-prod & 只适合临时验证,生产环境必须用 systemd 托管,否则很快会因资源耗尽崩溃。
关键点不在“能不能启”,而在“能不能扛住高写入”。VictoriaMetrics 默认会打开大量文件描述符,systemd 默认限制是 1024,不够用就会在日志里刷 accept: too many open files,或卡在 permission denied on /proc/self/fd。
-
LimitNOFILE=65536必须显式写进 service 文件,不能靠全局 sysctl -
User=vmuser和Group=vmuser必须设置,且该用户不能有登录 shell:useradd -r -s /bin/false vmuser -
ExecStart中的-storageDataPath目录必须由vmuser拥有,且不能是 NFS、autofs 或/tmp类路径(SELinux 会拦截 mmap)
启动参数里最容易漏掉但影响最大的两个选项
-storageDataPath 和 -retentionPeriod 看似简单,但配错会导致数据无声丢失或磁盘打满。
-
-storageDataPath=/var/lib/victoriametrics:路径必须提前mkdir -p并chown vmuser:vmuser,否则进程启动成功但写入失败,日志里只报cannot create dir这种模糊提示 -
-retentionPeriod=6:单位是月,不是天。不设的话默认是 1 个月,线上环境极易被忽略,某天发现 Grafana 查不到 30 天前的数据,就是这个原因 - 别加
-memory.allowedPercent除非你真调优过:它会强制触发 GC,反而在高负载下引发查询延迟毛刺;默认行为更稳
防火墙和 SELinux 不开,8428 端口永远访问不到
CentOS 7.9 默认开启 firewalld + enforcing SELinux,两者都会静默拦截 httpListenAddr=:8428,进程看似正常运行,curl localhost:8428 却超时,journalctl -u victoriametrics 里也看不到明显报错。
- firewalld:必须执行
sudo firewall-cmd --permanent --add-port=8428/tcp && sudo firewall-cmd --reload - SELinux:必须执行
sudo setsebool -P httpd_can_network_bind 1,否则内核日志(dmesg)里全是avc: denied { name_bind } for port=8428,这是最隐蔽、排查时间最长的一类问题 - Ubuntu/Debian 用户注意:
ufw同样要放行 8428,且无需 SELinux 配置
vmagent 实例,并用 -promscrape.config 指向原来的 prometheus.yml —— victoria-metrics-prod 自己根本不读那个文件。











