问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

从Prometheus更换为VictoriaMetrics

创作时间:
作者:
@小白创作中心

从Prometheus更换为VictoriaMetrics

引用
CSDN
1.
https://m.blog.csdn.net/sj1163739403/article/details/144188462

本文详细介绍了将Prometheus监控系统迁移到VictoriaMetrics的过程,包括性能对比、组件分工、web界面功能、数据迁移等多个方面。文章内容专业且深入,对于从事系统监控和运维的工程师具有很高的参考价值。

我已经将线上的监控全都更替为VictoriaMetrics,从使用感受来讲,很多方面优于Prometheus

一、迁移概述

1、性能损耗,内存、CPU、存储、网络都要更低。还有几天的数据是我没有恢复到VM的,恢复完大概是7个G左右


root@prometheus-prd:/data# du -sh prometheus-data
21G     prometheus-data
root@prometheus-prd:/data# du -sh victoria-metrics/
4.8G    victoria-metrics/

查询速度更快,内存消耗更低,之前使用4个G内存,现在2个G
2、组件分工明确

将Prometheus整体的功能拆分为了几个组件、victoria-metrics(存储)、vmagent(监控收集、写)、vmalert(读取分析告警规则 - >通知alertmanager)、vmctl(数据迁移)

以上组件是迁移过程中用到的

3、web界面功能

组件有独立的web,web中可以进行一些debug,提供了服务的api接口,vmalert还可以检测告警规则是否生效,进行规则梳理的时候很好用

4、数据迁移方便

prometheus生成快照以后,vmctl可以按照时间序列过滤blocks,可以设置参数并发导入,速度很快。

也可以在线remote_read prometheus,remote_write到victoria-metrics,如果内存比较小不建议这么做,容易卡死

5、兼容各种exporter和prometheus.yml

整体流程如下

二、跨区域监控数据传输

2.1、情景分析

如果业务涉及多Region,总会有一个是主Region,那么主Region负责最终的数据存储,副Region是要向主Region写入即可。这里分两种场景

1、副Region监控数据保留,同时向主Region远程写入

2、副Region单独可查询数据,但不存储

vmagent可以完美的写入多个remote_url,同时写入本地存储和远程存储

2.2、Region的监控更替

下载包,victoria-metrics是db,vmutils是其他组件


wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.106.1/vmutils-linux-amd64-v1.106.1.tar.gz
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.106.1/victoria-metrics-linux-amd64-v1.106.1.tar.gz

直接下掉prometheus,使用vmagent去读取当前prometheus配置文件,再指定remote_write_url即可


cat >/etc/systemd/system/vmagent.service<<EOF
[Unit]
Description=VMagent
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=/data/victoria-metrics/vmagent-prod -promscrape.config=/data/victoria-metrics/prometheus.yml -promscrape.config.strictParse=false -remoteWrite.url=http://xx:9090/api/v1/write
Restart=always
[Install]
WantedBy=multi-user.target
EOF

-promscrape.config.strictParse=false

是禁用不支持的配置

更多信息查看

https://docs.victoriametrics.com/vmagent/

2.3 检查数据写入

从grafana或者远程写的prometheus中查看指标是否存在时序数据,或者查看本地vmagent日志,确认没有remote_write相关的错误日志

三、主Region的监控更替

  • 更替数据库
  • 更替数据抓取
  • 兼容告警
  • 监控数据迁移

以上是业务监控迁移需要考虑到的点,我们在前面实现了其他区域对主区域的监控数据汇入,避免过多改造,最终生产暴露的监控数据源端口保持不变

3.1、部署DB

这里是最终的启动端口,共存时改为其他端口,不要和当前prometheus端口冲突


cat >/etc/systemd/system/victoria-metrics.service<<EOF
[Unit]
Description=VictoriaMetrics Server
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=/data/victoria-metrics/victoria-metrics-prod -storageDataPath=/data/victoria-metrics/vmagent-remotewrite-data -httpListenAddr=:9090
Restart=always
[Install]
WantedBy=multi-user.target
EOF

3.2、部署vmagent指标抓取

兼容数据抓取

-remoteWrite.url=

可以指定多个url


cat >/etc/systemd/system/vmagent.service <<EOF
[Unit]
Description=VMagent
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=/data/victoria-metrics/vmagent-prod -promscrape.config=/data/prometheus/prometheus.yml -promscrape.config.strictParse=false -remoteWrite.url=http://localhost:9090/api/v1/write
Restart=always
[Install]
WantedBy=multi-user.target
EOF

3.3、部署告警

这里直接兼容告警规则

-rule=/data/prometheus/rules/*.yml

读取目录下所有告警规则

datasource.url=http://localhost:9090

数据源地址,要去查询规则里面的表达式

-notifier.url=http://localhost:9093

通知的地址,写alertmanager的

remoteWrite.url

保存规则和状态信息,也写db的


cat >/etc/systemd/system/vmalert.service <<EOF
[Unit]
Description=VMalert
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=/data/victoria-metrics/vmalert-prod -rule=/data/prometheus/rules/*.yml -datasource.url=http://localhost:9090 -notifier.url=http://localhost:9093 -remoteWrite.url=http://localhost:9090
Restart=always
[Install]
WantedBy=multi-user.target
EOF

最终实现不修改grafana数据源完成整个监控系统的更换

四、组件web的使用

4.1、DB Web

http://{IP}:9090 DB的地址

job资源的使用情况

debug工具

查询统计

4.2、VMagent Web

targets

里面和prometheus的target界面一样

service-discovery

里面有原始的label和最终label,同时可以进行label的debug,这是prometheus不支持的

config

就是读取的配置文件,reload以后可以看配置文件是否有变化

4.3、VMalert Web

就是一些api查询参数

通知的地址,这里是alertmanager

这里能看到告警规则的状态,每个yml算一组,黄色表示规则没有匹配到指标

这里是触发的告警,同时可以去查看alertmanager的页面

五、数据同步

5.1、修改prometheus启动参数’

生成快照文件


nohup ./prometheus   --storage.tsdb.path=/data/prometheus-data --web.listen-address="0.0.0.0:9091" --web.enable-admin-api&
curl -XPOST http://localhost:9091/api/v1/admin/tsdb/snapshot  

上面会生成快照文件

5.2、vmctl数据恢复

有remote_read 的方式,需要有足够的内存和cpu,使用快照方式多线程处理cpu差不多就足够了

指定快照文件的目录,指定开始时间后会过滤掉一些blocks,减少同步时间。数据量大用screen后台运行就行


./vmctl-prod remote-read --remote-read-src-addr=http://localhost:9091 --remote-read-filter-time-start=2024-12-02T00:00:00Z  --remote-read-step-interval=hour  --vm-addr=http://localhost:9090  

更多配置参考

https://docs.victoriametrics.com/vmctl/

这样一套流程几乎完美的迁移了监控系统

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号