从Prometheus更换为VictoriaMetrics
我已经将线上的监控全都更替为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:8429
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/
这样一套流程几乎完美的迁移了监控系统