1. 环境准备:为什么选择CentOS 7.9和VictoriaMetrics?
大家好,我是老张,在运维和监控这个坑里摸爬滚打十来年了。今天想和大家聊聊一个特别实在的话题:怎么在咱们最熟悉的CentOS 7.9上,把VictoriaMetrics这个监控神器又快又稳地跑起来。我知道,很多朋友一听到“时序数据库”、“高性能监控”这些词就有点发怵,觉得配置起来肯定特别复杂。别担心,我刚开始接触的时候也这么想,但实际折腾下来发现,只要路子走对了,从零到一其实也就一杯咖啡的功夫。
首先说说为什么是CentOS 7.9。我知道现在新版本的操作系统层出不穷,但咱们的生产环境,尤其是那些跑着核心业务的老服务器,很多都还坚守在CentOS 7.x的阵营里。它稳定、兼容性好,生态也成熟,很多运维兄弟闭着眼睛都能操作。所以,在这个“老伙计”上部署新工具,是咱们最常遇到、也最实用的场景。至于VictoriaMetrics,你可以把它理解为一个专门为监控数据设计的“超级仓库”。相比我们更熟悉的Prometheus,它在处理海量监控指标时,资源占用更少,查询速度更快,尤其是在数据长期存储和压缩方面,表现非常亮眼。我自己的几个项目从Prometheus迁移过来后,磁盘空间直接省了一半,查询延迟也降了不少,实测下来真的很“香”。
在开始动手之前,咱们得先把“地基”打好。虽然CentOS 7.9很稳定,但一些基础的依赖和系统参数还是需要检查一下。这就像盖房子,地基稳了,上面怎么盖都踏实。我会带着你一步步来,确保每个环节都清晰明了,哪怕你之前没怎么接触过Go语言写的服务,也能轻松跟上。
2. 实战部署:一步步把VictoriaMetrics跑起来
2.1 获取与安装VictoriaMetrics
好了,闲话不多说,咱们直接开干。第一步,肯定是去把VictoriaMetrics的“安装包”请下来。这里有个小细节要注意,VictoriaMetrics是Go语言编写的,官方直接提供了编译好的静态二进制文件,这意味着我们不需要在系统上安装一堆复杂的Go语言环境,直接下载就能用,非常省心。
咱们打开终端,连接到你的CentOS 7.9服务器。首先,找一个合适的目录,比如/usr/local/src,用来存放下载的文件。我习惯在这里操作,条理比较清楚。
cd /usr/local/src
接下来就是下载了。我们需要去VictoriaMetrics的GitHub发布页面找到对应的版本。这里我以文章里提到的v1.93.9版本为例,你当然可以去官网看看有没有更新的稳定版。直接使用wget命令下载,记得加上--no-check-certificate参数,有时候能避免一些证书验证的小麻烦。
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.9/victoria-metrics-linux-amd64-v1.93.9.tar.gz --no-check-certificate
下载完成后,你会看到一个压缩包。我们先为VictoriaMetrics安排好它的“家”。按照Linux的习惯,二进制程序通常放在/usr/local下面,而数据则放在/data或/var/lib这类目录。我们来创建这些目录。
# 创建数据存储目录,这里存放所有监控数据,很重要
mkdir -p /data/victoria-metrics
# 在/usr/local下创建版本化的程序目录
mkdir -p /usr/local/victoria-metrics-linux-amd64-v1.93.9
然后,解压刚才下载的压缩包到这个程序目录。
tar -zxf victoria-metrics-linux-amd64-v1.93.9.tar.gz -C /usr/local/victoria-metrics-linux-amd64-v1.93.9/
解压后,你进入目录看看,应该会有一个名为victoria-metrics-prod的可执行文件,这就是核心程序了。为了方便以后升级和管理,我们创建一个软链接,指向这个版本化的目录。这样,以后我们用的路径/usr/local/victoria-metrics就永远指向当前正在使用的版本,升级时只需要更换软链接的目标即可,服务脚本都不用改。
ln -sf /usr/local/victoria-metrics-linux-amd64-v1.93.9/ /usr/local/victoria-metrics
到这一步,安装其实就完成了。是不是比想象中简单?你可以试试运行/usr/local/victoria-metrics/victoria-metrics-prod --help看看,如果能输出一大堆帮助信息,说明程序本身没问题。
2.2 配置系统服务与首次启动
程序放好了,但我们不可能每次都手动在命令行启动。最好的方式就是把它配置成一个系统服务,交给systemd来管理。这样服务可以开机自启、崩溃了自动重启,管理起来特别方便。这也是生产环境部署的标配操作。
在CentOS 7上,我们就在/etc/systemd/system/目录下创建一个服务配置文件,名字就叫victoria-metrics.service。
cat << EOF > /etc/systemd/system/victoria-metrics.service
[Unit]
Description=victoria-metrics
After=network.target
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/victoria-metrics/victoria-metrics-prod -retentionPeriod=90d -storageDataPath=/data/victoria-metrics
WorkingDirectory=/data/victoria-metrics
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
我来解释一下这个配置文件里的几个关键点。Type=simple告诉systemd这是一个简单的常驻进程。User=nobody我强烈建议加上,让服务以一个低权限用户运行,这是安全最佳实践,万一有漏洞也能减少损失。ExecStart就是启动命令,这里我给了两个最重要的启动参数:-retentionPeriod=90d表示数据保留90天,你可以根据磁盘大小调整,比如365d就是一年;-storageDataPath指定了数据存储路径,就是我们刚才创建的/data/victoria-metrics。Restart=always和RestartSec=10意味着服务如果意外退出,会等待10秒后自动重启,非常省心。
配置文件写好后,需要让systemd重新加载一下,让它认识这个新服务。
systemctl daemon-reload
现在,就可以启动我们的VictoriaMetrics服务了!
systemctl start victoria-metrics
再设置成开机自启,这样以后服务器重启也不用操心了。
systemctl enable victoria-metrics
2.3 验证服务状态与初步访问
服务启动后,第一件事就是确认它是不是真的跑起来了。我们可以用几个命令来检查。
首先,看看systemd眼里这个服务状态如何:
systemctl status victoria-metrics
如果看到绿色的active (running)字样,并且下面没有红色的错误日志,那就成功了一大半。你还可以用ps命令看看进程是否存在:
ps -ef | grep victoria-metrics
应该能看到一个victoria-metrics-prod的进程在运行。默认情况下,VictoriaMetrics的服务端口是8428。我们可以用curl命令在本地快速访问一下它的健康检查接口:
curl http://localhost:8428/health
如果返回OK,那就说明服务内部状态也是健康的。最直观的方式,是打开浏览器,访问你的服务器IP和端口,比如http://你的服务器IP:8428。你会看到一个简单的VictoriaMetrics欢迎页面。更高级的管理界面是vmui,可以通过http://你的服务器IP:8428/vmui/访问。在这里,你虽然还不能看到监控数据(因为还没往里面灌数据),但可以确认Web服务是正常工作的。
3. 核心配置详解与优化调优
3.1 关键启动参数深度解析
服务跑起来只是第一步,想让VictoriaMetrics在你的环境里发挥最大威力,还得好好琢磨一下它的启动参数。这就像给汽车调校发动机,参数设对了,跑起来又省油又有劲。VictoriaMetrics的参数非常多,但咱们日常最需要关注的也就那么几个,我挑几个重点的和你聊聊。
首先是-retentionPeriod,数据保留期。这个直接关系到你的磁盘要准备多大。它的格式很灵活,比如90d(90天)、12w(12周)、1y(1年)。我一般会根据监控数据的价值和磁盘成本来权衡。对于业务核心指标,我可能保留1年;对于一些调试级别的详细日志,可能只保留1个月。你可以先用90d,观察一段时间磁盘增长情况再做调整。
第二个是-storageDataPath,数据存储路径。这个路径所在的磁盘,我强烈建议使用SSD。VictoriaMetrics的读写性能对IOPS非常敏感,用SSD和用机械硬盘的体验是天壤之别。另外,确保这个目录有足够的空间,并且最好是一个独立的挂载点,避免被其他应用写满。
第三个很重要的参数是-memory.allowedPercent,它控制VictoriaMetrics可以使用多少百分比的系统内存。默认是60%,对于专用监控服务器,如果你的内存足够大(比如32G以上),可以适当调高到70%甚至80%,更多的内存用于缓存可以极大提升查询速度。但要注意给操作系统和其他应用留出余地。
还有一个我踩过坑的参数是-search.maxQueryDuration,它控制单次查询的最大执行时间,默认是30秒。如果你的查询非常复杂或者数据量巨大,可能会超时。在确保查询语句已经优化的前提下,可以适当延长这个时间。但别设得太长,避免一个慢查询拖死整个服务。
3.2 数据写入与抓取配置
VictoriaMetrics立起来了,但它现在还是个空仓库。我们需要把数据“灌”进去。最常见的数据来源就是Prometheus。如果你已经在用Prometheus,迁移起来非常平滑。只需要修改Prometheus的配置文件,让它把数据远程写入(Remote Write)到VictoriaMetrics。
在你的Prometheus服务器的prometheus.yml配置文件中,添加一个remote_write配置段:
remote_write:
- url: http://你的VictoriaMetrics服务器IP:8428/api/v1/write
改完后重启Prometheus,它就会开始把数据同步过来。你可以在VictoriaMetrics的/api/v1/export端点看到收到的指标。除了Prometheus,VictoriaMetrics也支持直接从Graphite、InfluxDB、OpenTSDB等协议接收数据,或者通过它的vmagent组件来抓取目标,功能非常强大。
这里我想特别提一下vmagent。它是一个轻量级的抓取代理,可以替代Prometheus进行数据抓取,然后把数据推给VictoriaMetrics。它的资源消耗比Prometheus小很多,特别适合在成百上千个节点上部署,进行边缘数据采集。配置方式和Prometheus的scrape_configs很像,学习成本很低。
3.3 系统层面优化建议
要让VictoriaMetrics飞起来,光配置它自己还不够,操作系统层面也得做一些调优。我分享几个在CentOS 7.9上实测有效的优化点。
第一,文件描述符限制。VictoriaMetrics会同时处理很多网络连接和文件操作。用ulimit -n命令看看当前限制,通常默认的1024是不够的。我们可以修改/etc/security/limits.conf文件,为运行VictoriaMetrics的用户(我们之前用的是nobody)增加限制:
nobody soft nofile 65536
nobody hard nofile 65536
修改后需要重新登录会话生效,对于服务,重启一下即可。
第二,网络参数优化。在高写入负载下,可以调整一些TCP内核参数来提升网络性能。编辑/etc/sysctl.conf,添加或修改以下几行:
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 1024
net.core.netdev_max_backlog = 5000
执行sysctl -p让配置生效。这些参数增大了连接队列,有助于应对瞬间的流量高峰。
第三,磁盘I/O调度策略。如果你的数据盘是SSD,将调度器设置为noop或deadline通常能获得更好的性能。你可以通过cat /sys/block/sdX/queue/scheduler查看当前调度器(把sdX换成你的实际磁盘设备名),并通过echo noop > /sys/block/sdX/queue/scheduler来临时修改。要永久生效,可以通过GRUB内核参数或udev规则来设置。
4. 日常运维、监控与故障排查
4.1 如何监控VictoriaMetrics自身?
一个好的监控系统,首先得把自己监控好。VictoriaMetrics提供了丰富的内置指标,可以用来监控它自己的健康状态和性能。这些指标可以通过它自己的/metrics端点(默认是http://localhost:8428/metrics)暴露出来。我们可以用另一个VictoriaMetrics实例或者Prometheus去抓取这些指标。
你需要关注几个关键指标:vm_cache_entries和vm_cache_size_bytes可以告诉你缓存的使用情况,如果缓存命中率低,可能需要调整内存分配。vm_rows_inserted_total和vm_rows_per_insert反映了数据写入的速度和批次大小。vm_free_disk_space_bytes这个太重要了,必须设置告警,防止磁盘写满导致服务崩溃。我一般会设置当可用空间低于20%时触发告警。
除了指标,日志也是排查问题的重要依据。VictoriaMetrics的日志默认输出到标准错误(stderr),由于我们是用systemd管理的,所以可以用journalctl命令来查看:
journalctl -u victoria-metrics -f # 实时查看日志
journalctl -u victoria-metrics --since today # 查看今天的日志
建议你关注日志中ERROR和WARNING级别的信息,它们往往是问题的先兆。
4.2 常见问题与踩坑记录
玩了这么久VictoriaMetrics,坑肯定踩过不少,我挑几个典型的说说,希望能帮你绕过去。
第一个坑是启动时端口被占用。VictoriaMetrics默认用8428端口,如果这个端口已经被其他程序(比如之前旧版本的VictoriaMetrics)占用了,服务就会启动失败。报错信息可能不太直接。解决方法是先用netstat -tlnp | grep 8428看看谁在占用,然后停掉那个服务,或者给VictoriaMetrics换一个端口,通过启动参数-httpListenAddr=:8429来指定。
第二个坑是磁盘空间增长过快。明明设置了-retentionPeriod,但磁盘还是很快满了。这很可能是因为旧数据文件没有被及时删除。VictoriaMetrics的数据删除是“惰性”的,它会在后台定期清理。你可以检查一下,是不是有大量的小数据分片(shard)没有被合并和清理。可以尝试手动发送一个HTTP POST请求到/internal/force_merge端点来触发强制合并,或者检查-storageDataPath目录下是否有以deleted开头的文件夹,这些是待删除的数据,如果长时间存在,可以重启服务来强制清理。
第三个是查询速度突然变慢。如果之前查询很快,突然变慢了,可以先看看系统监控,是不是内存用尽了,或者磁盘IO达到了瓶颈。另外,检查一下是不是有特别耗时的查询正在运行,拖累了整体性能。可以通过/api/v1/status/active_queries端点查看当前正在执行的查询,必要时“杀掉”那些异常查询。
4.3 数据备份与迁移策略
监控数据是宝贵的资产,定期备份是必须的。VictoriaMetrics的数据主要存放在-storageDataPath指定的目录下。最简单粗暴的备份方式,就是定时用rsync把这个目录同步到远程备份服务器。但是要注意,在服务运行期间直接复制文件,可能会拷贝到不完整的数据文件。更稳妥的方式是利用VictoriaMetrics的“快照”功能。
你可以通过API请求创建一个数据快照:
curl http://localhost:8428/snapshot/create
这个命令会返回一个快照ID(比如20240315T120000Z-ABCDE123)。快照文件会生成在存储目录下的snapshots子目录里。这个快照目录是一个完整、一致的数据副本,此时再用rsync去备份这个快照目录,就非常安全了。备份完成后,可以删除这个快照以释放空间。
关于迁移,比如从一台服务器搬到另一台,步骤也很清晰:在新服务器上部署好相同版本的VictoriaMetrics,先不要启动。然后将老服务器上通过快照功能创建的数据副本,完整地拷贝到新服务器的数据目录下。最后修改新服务器的服务配置(如果需要的话),启动服务即可。我做过几次迁移,用这个方法几乎没有停机时间,数据一致性也保持得很好。
最后,再啰嗦一句,任何重要的配置变更,比如修改启动参数、调整系统内核参数,最好先在测试环境验证,并且记录下变更前后的状态。养成这个习惯,能让你在出问题时快速回滚,心里不慌。VictoriaMetrics社区非常活跃,遇到奇怪的问题,去GitHub的Issues里搜一搜,大概率能找到答案或者思路。
464



被折叠的 条评论
为什么被折叠?



