自宅ラズパイのメトリクスとかセンサー類を VPS 上の prometheus に溜めているけど、1年分で12GBぐらいと、用途の割にかなり大きくて、容量が足りなくなったときに悩んでいた。
VictoriaMetrics だと圧縮効率がよいらしいので試しに移行してみた。クエリ (MetricsQL) は PromQL 互換らしい。事前に調べたけどあんまりデメリットがなさそうに思えた。クラッシュなどによる多少の損失を許容しているところぐらい? 自宅のあれこれでは問題ない要件
✅ 前提条件
- OS: Ubuntu
- Prometheus は systemd により `/var/lib/prometheus` にデータ保存中
- 移行後は VictoriaMetrics(+vmagent)で運用する
- Prometheus の停止は TSDB データ移行直前まで遅らせる
- すべてのバイナリは `/usr/lib/victoriametrics/bin` 以下に配置
- 設定ファイルは `/etc/victoriametrics/` 以下に配置
1. ディレクトリ構成の準備
sudo mkdir -p /usr/lib/victoriametrics/bin
sudo mkdir -p /etc/victoriametrics/vmagent
sudo mkdir -p /var/lib/victoriametrics
2. VictoriaMetrics のインストール
sudo useradd -s /usr/sbin/nologin victoriametrics
sudo chown -R victoriametrics:victoriametrics /var/lib/victoriametrics
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.117.1/victoria-metrics-linux-amd64-v1.117.1.tar.gz
tar -xzf victoria-metrics-linux-amd64-*.tar.gz
sudo cp victoria-metrics-prod /usr/lib/victoriametrics/bin/
3. vmagent, vmctl のインストールと設定
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.117.1/vmutils-linux-amd64-v1.117.1.tar.gz
tar xzvf vmutils-linux-amd64-*.tar.gz
sudo cp vmagent-prod /usr/lib/victoriametrics/bin/
sudo cp /etc/prometheus/prometheus.yml /etc/victoriametrics/vmagent/scrape.yml
sudo cp vmctl-prod /usr/lib/victoriametrics/bin/
`scrape.yml` は `scrape_configs` 部分と global の scrape_interval だけのこす
5. systemd ユニットファイルの作成
/etc/systemd/system/victoriametrics.service
[Unit]
Description=VictoriaMetrics service
After=network.target
[Service]
Type=simple
User=victoriametrics
Group=victoriametrics
ExecStart=/usr/lib/victoriametrics/bin/victoria-metrics-prod \
-storageDataPath=/var/lib/victoriametrics \
-retentionPeriod=365d -selfScrapeInterval=10s
SyslogIdentifier=victoriametrics
Restart=always
PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes
ProtectSystem=full
[Install]
WantedBy=multi-user.target
`/etc/systemd/system/vmagent.service`
[Unit]
Description=vmagent
After=network.target
[Service]
User=victoriametrics
Group=victoriametrics
ExecStart=/usr/lib/victoriametrics/bin/vmagent-prod \
-promscrape.config=/etc/victoriametrics/vmagent/scrape.yml \
-remoteWrite.tmpDataPath=/var/tmp/vmagent/tmp/ \
-remoteWrite.url=http://localhost:8428/api/v1/write
Restart=on-failure
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable victoriametrics
sudo systemctl enable vmagent
7. VictoriaMetrics と vmagent の起動
sudo systemctl start victoriametrics
sudo systemctl status victoriametrics
sudo systemctl start vmagent
sudo systemctl status vmagent
6. TSDB データ移行(vmctl)
Prometheus snapshot の作成
curl -XPOST http://127.0.0.1:9090/api/v1/admin/tsdb/snapshot
{"status":"success","data":{"name":"20250516T103320Z-3bf4745e0d76170b"}}%
(snapshot はハードリンクなだけなのでいらなくなったらディレクトリごと消せばよい)
vmctl を使ってデータを移行
sudo /usr/lib/victoriametrics/bin/vmctl-prod prometheus --prom-snapshot=/var/lib/prometheus/snapshots/20250516T103320Z-3bf4745e0d76170b
2025/05/16 19:33:50 ERROR: metrics: disable exposing PSI metrics because of failed init: open /sys/fs/cgroup/system.slice/ssh.service/cpu.pressure: no such file or directory
Prometheus import mode
Prometheus snapshot stats:
blocks found: 27;
blocks skipped by time filter: 0;
min time: 1714608000341 (2024-05-02T09:00:00+09:00);
max time: 1747391598321 (2025-05-16T19:33:18+09:00);
samples: 11071261940;
series: 135060.
Found 27 blocks to import. Continue? [Y/n]
結構時間がかかる。12GBで2時間弱ぐらい。インポート後は2.5GBになった。
9. Prometheus の停止
sudo systemctl stop prometheus
sudo systemctl disable prometheus
- トップ
- tech
- Prometheus から VictoriaMetrics への移行(Ubuntu, systemd)