
本文以安装单机版 VictoriaMetrics 为例，介绍如何从 prometheus 无缝迁移到 VictoriaMetrics。
本文默认已经拥有过 prometheus 对应的配置文件。

## 安装 VictoriaMetrics

下载对应系统版本的 `victoriametrics` 以及 `vmctl` ,注意不要下载 `enterprise` 版本

```bash
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.101.0/victoria-metrics-linux-amd64-v1.101.0.tar.gz

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

tar -zxvf victoria-metrics-linux-amd64-v1.101.0.tar.gz
tar -zxvf vmutils-linux-amd64-v1.101.0.tar.gz

```

拷贝一份之前的 prometheus 配置文件，只保留`scrape_configs` ，其他内容全部删除。

一个简单的例子

```yaml
scrape_configs:
  - job_name: "node-exporter"
    static_configs:
      - targets: [
              "192.168.2.1:9100"
            ]
```

增加 `systemd` 文件，`sudo vim /etc/systemd/system/victoriametrics.service` 填入一下内容

```toml
[Unit]
Description=VictoriaMetrics
After=network.target

[Service]
ExecStart=<你的victoriametrics解压目录>/victoria-metrics-prod -storageDataPath=<数据存放的路径>  -promscrape.config=<你拷贝修改之后的prometheus配置文件> -httpListenAddr=0.0.0.0:8428
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target
```

执行 `sudo systemctl enable --now victoriametrics && sudo systemctl status victoriametrics` 如果是 running 就说明启动成功了。

## prometheus 导出快照

修改原来的 prometheus 的配置文件，增加

```yaml
remote_write:
  - url: http://<部署VictoriaMetrics的ip>:8428/api/v1/write
```

并且在 prometheus 的启动参数中增加 `--web.enable-admin-api`，然后重启 prometheus。

执行下面命令，制作快照。

```bash
curl -XPOST <你的prometheus ip>:9090/api/v1/admin/tsdb/snapshot
{"status":"success","data":{"name":"20240621T145321Z-7ae5efe6fc59465f"}}
```

之后将在你的 prometheus 的数据目录下的 `snapshots` 文件夹，找到 `20240621T145321Z-7ae5efe6fc59465f`文件夹

将这个快照目录 (data/snapshots) 复制到 victoriametrics 的机器上 (如果是在同一个机器上可以忽略)

## 使用 vmctl 导入数据

```bash
./vmctl-prod prometheus --prom-snapshot=<刚刚导出的快照目录 20240621T145321Z-7ae5efe6fc59465f> --vm-addr=<victoriametrics的ip:8428>

./vmctl-prod prometheus --prom-snapshot 20240621T145321Z-7ae5efe6fc59465f --vm-addr=http://127.0.0.1:8428
Prometheus import mode
Prometheus snapshot stats:
  blocks found: 24;
  blocks skipped by time filter: 0;
  min time: 1717588800473 (2024-05-20T20:00:00+08:00);
  max time: 1718981610787 (2024-06-21T22:53:30+08:00);
  samples: 6806426699;
  series: 708694.
Found 24 blocks to import. Continue? [Y/n]
```

输入 `y` 就开始导入数据了。

导入成功之后就可以把 prometheus 停掉了，如果配置了 grafana，将之前的 prometheus 地址换为`<部署VictoriaMetrics的ip>:8428` 即可。

## 参考

<https://medium.com/@romanhavronenko/victoriametrics-how-to-migrate-data-from-prometheus-d44a6728f043>
<https://www.robustperception.io/taking-snapshots-of-prometheus-data/>

