きっかけ
以前、ラズパイで収集した自宅データをPrometheusで収集、Victoria Metricsで永続化、という記事を書いたのですが、しばらく稼働させていたところ、長期保存も得意と言ってるVictoria Metricsがまさかのダウン。
原因調査、対策までのお話。
Prometheusは元気ということで、Victoria Metricsがどうもダメっぽい。
こんな感じで息も絶え絶え。
(何度も再起動したがすぐに落ちる)
こちら、以前の記事。
2年間保存しようと思ってたのに、全然保たない。。。
# cat victoria-metrics.service
[Unit]
Description=Victoria Metrics
Before=prometheus.service
[Service]
User=prometheus
ExecStart=/usr/local/bin/victoria-metrics-prod \
-storageDataPath /var/lib/victoria/ \
-retentionPeriod=24
[Install]
WantedBy=multi-user.target
環境
- Raspberry Pi 3 Model B+
- Raspbian GNU/Linux 10 (buster)
構成として
(センサー)->(Pythonスクリプト)->(Node Exporter)->(Prometheus)->(Victoria Metrics)->(Grafana)
な感じです。
グラフの「1かい」は上記ラズパイ3、「3かい」は別に置いてるラズパイzeroで収集。
調査
/var/log/syslogにこんなのが。
Sep 18 17:05:14 rasp3 victoria-metrics-prod[379]: 2022-09-18T08:05:14.695Z#011panic#011VictoriaMetrics/lib/fs/dir_remover.go:50#011FATAL: cannot remove "/var/lib/victoria/data/small/2022_09/tmp/1715E5652798B8B9": openfdat /var/lib/victoria/data/small/2022_09/tmp/1715E5652798B8B9: too many open files
Sep 18 17:05:14 rasp3 victoria-metrics-prod[379]: panic: FATAL: cannot remove "/var/lib/victoria/data/small/2022_09/tmp/1715E5652798B8B9": openfdat /var/lib/victoria/data/small/2022_09/tmp/1715E5652798B8B9: too many open files
Sep 18 17:05:14 rasp3 victoria-metrics-prod[379]: goroutine 362 [running]:
(中略)
Sep 18 17:05:14 rasp3 systemd[1]: victoria-metrics.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Sep 18 17:05:14 rasp3 systemd[1]: victoria-metrics.service: Failed with result 'exit-code'.
Sep 18 17:05:17 rasp3 prometheus[385]: ts=2022-09-18T08:05:17.359Z caller=dedupe.go:112 comp
「too many open files」だって。
えーっとこれなんだっけ。。。と色々ググってたら、ファイルディスクリプタの問題だと気づく。
(LPICでやったのに忘却の彼方)
変更前のファイルディスクリプタはというと、1024。
524288はハードリミットなので、1024でハネられることになる。
# cat /proc/(Victoria Metoricsのpid)/limits | grep 'Max open'
Max open files 1024 524288 files
対策
こちらを参考にさせていただき、変更してみる。
systemdのデーモンのファイルディスクリプタは/etc/security/limits.confをいじっても無駄だよ、ということでサービスの構成ファイルとして追加してあげる。
# mkdir /etc/systemd/system/victoria-metrics.service.d
# vi /etc/systemd/system/victoria-metrics.service.d/00-limits.conf
/etc/systemd/system/victoria-metrics.service.d/00-limits.confの中身
とりあえず65536としてみた。(適当。)
[Service]
LimitNOFILE=65536:65536
修正後、反映
# systemctl daemon-reload
# systemctl start victoria-metrics
# systemctl status victoria-metrics
● victoria-metrics.service - Victoria Metrics
Loaded: loaded (/etc/systemd/system/victoria-metrics.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/victoria-metrics.service.d
└─00-limits.conf
Active: active (running) since Sun 2022-09-18 23:19:30 JST; 3s ago
Main PID: 4450 (victoria-metric)
Tasks: 9 (limit: 2059)
CGroup: /system.slice/victoria-metrics.service
└─4450 /usr/local/bin/victoria-metrics-prod -storageDataPath /var/lib/victoria/ -retentionPeriod=24
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.152Z info VictoriaMetrics/lib/storage/partition.go:1530 opened part "/v
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.154Z info VictoriaMetrics/lib/storage/partition.go:1530 opened part "/v
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.156Z info VictoriaMetrics/lib/storage/partition.go:1530 opened part "/v
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.195Z info VictoriaMetrics/lib/storage/partition.go:1530 opened part "/v
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.201Z info VictoriaMetrics/app/vmstorage/main.go:105 successfully opened
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.223Z info VictoriaMetrics/app/vmselect/promql/rollup_result_cache.go:106
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.408Z info VictoriaMetrics/app/vmselect/promql/rollup_result_cache.go:132
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.409Z info VictoriaMetrics/app/victoria-metrics/main.go:61 started Victo
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.409Z info VictoriaMetrics/lib/httpserver/httpserver.go:83 starting http
Sep 18 23:19:32 rasp3 victoria-metrics-prod[4450]: 2022-09-18T14:19:32.410Z info VictoriaMetrics/lib/httpserver/httpserver.go:84 pprof handler
65536に変わった。
# cat /proc/4450/limits | grep 'Max open'
Max open files 65536 65536 files
結果
変更後、6時間ほど経過したが、元気な様子。
台風が来てるし、気圧がどうなるか気になる。
何もありませんように。。。