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

直接用官方预编译二进制包启动最稳,别源码编译、别默认裸跑、别跳过 systemd 用户隔离和文件描述符限制——这四点漏掉任意一个,victoria-metrics-prod 在生产环境大概率扛不住 1000+ 指标/秒的写入,日志里会反复刷 accept: too many open files 或 permission denied on /proc/self/fd。
怎么选对二进制包,避免 license not found 或 __atomic_fetch_add_8 报错
GitHub Releases 页面上只认 victoria-metrics-*.tar.gz(比如 victoria-metrics-v1.125.1-linux-amd64.tar.gz),不是 -src.zip,更不是单独下载的 victoria-metrics-prod 文件——后者是企业版,启动必报 failed to parse license。
- 解压后只留一个可执行文件:
victoria-metrics-prod - 运行
file victoria-metrics-prod必须输出包含statically linked,说明它不依赖系统 libc - 运行
./victoria-metrics-prod -version能打出版本号,才算真正可用 - 源码编译(
make build)在 CentOS 7.9 或旧 GCC 环境下几乎必然触发undefined reference to __atomic_fetch_add_8,纯属踩坑
systemd 服务必须写的三项硬配置
裸跑 nohup ./victoria-metrics-prod & 只能临时验证,生产环境必须用 systemd 托管,否则进程容易被 OOM kill 或静默退出。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
LimitNOFILE=65536:systemd 默认限制 1024,VictoriaMetrics 高并发下很快耗尽,不加这一行,journalctl -u victoriametrics里全是accept: too many open files -
User=vmuser和Group=vmuser:必须创建无登录 shell 的专用用户,命令是useradd -r -s /bin/false vmuser -
ExecStart中指定的-storageDataPath目录,必须由vmuser拥有,且不能是/tmp、/var/tmp或 NFS 路径(SELinux 会拦截 mmap)
启动参数里最容易配错但后果最严重的两个选项
-storageDataPath 和 -retentionPeriod 看似简单,配错会导致数据无声丢失,且不易察觉。
-
-storageDataPath=/data/vm:路径必须是本地 SSD,HDD 上开启-retentionPeriod=12m会导致 compaction 延迟飙升,查询变卡;目录权限执行chown vmuser:vmuser /data/vm -
-retentionPeriod=365d:单位必须带后缀(d、m、y),写成365会被当秒处理,实际只保留 6 分钟 - 如果要用 Prometheus 抓取数据,加
-promscrape.config=/etc/vm/prometheus.yml,注意该 YAML 文件也得由vmuser可读
CentOS 7.9 上访问不到 :8428 的三个真实原因
即使 systemctl status victoriametrics 显示 active (running),浏览器打不开 http://IP:8428,大概率是以下三者之一没做:
-
firewall-cmd --permanent --add-port=8428/tcp && firewall-cmd --reload:firewalld 默认拦掉 8428 -
setsebool -P httpd_can_network_bind 1:SELinux enforcing 模式下会拒绝绑定端口,journalctl -f里能看到avc: denied { name_bind } for port=8428 -
-httpListenAddr=:8428参数没显式指定:默认值虽是:8428,但某些发行版或 systemd 版本下可能 fallback 到127.0.0.1:8428,外部无法访问
磁盘类型、SELinux 策略、systemd 用户权限这三点,比配置项本身更容易被忽略,但一旦出问题,排查成本远高于提前设好。










