ラズパイで動くPrometheusデータの永続化


きっかけ

以前からラズパイにセンサーを付けて取得した自宅の環境(温度、湿度、気圧)をPrometheus+Grafanaで可視化したり、ラズパイ達のリソースを監視して楽しんでいたのだが、しばらくするとPrometheusが突然死を繰り返すように。

当初はなす術もなく、数時間おきにPrometheusを再起動して逃げていたのだが、調べる内にPrometheusのデータ保存期間を延ばしたことが原因であることが判明。
※デフォルトは15日間。起動オプション(--storage.tsdb.retention 365d)を付けて1年分の保存を目論んでいた

対応策

私の調べた内容はざっと下記。

  • そもそもPrometheusはデータの永続化に興味がない
  • 永続化したかったらPrometheusから「remote_write」を使って外部に書き出すといいみたい
  • 外部ストレージとして使えるのはInfluxDBとかPostgreSQLとか色々あるらしい

その中でVictoriaMetricsが簡単かつGrafanaのデータソースとしてもPrometheusからそのままリプレースできるということで使ってみることに。

環境

ちなみにVictoriaMetrics導入先の環境はこんなです。

  • Raspberry Pi 3 Model B+
  • Raspbian GNU/Linux 10 (buster)
  • 温度・湿度計測用にDHT22センサーを装着し、Pythonのprometheus_clientを使ってメトリクス生成
  • Prometheus関係で動いてるもの
    • Prometheus 2.29.1
    • Grafana Server 8.1.1 [可視化用]
    • AlertManager 0.22.2 [アラート発報用]
    • Blackbox Exporter 0.19.0 [URL監視用]
    • Node Exporter 1.2.2 [ラズパイのメトリクス取得&センサーデータ用]

導入

Prometheus

設定ファイルにremote_writeを追記してあげて、サービス再起動
(VictoriaMetricsのリスナーポートは8428)

prometheus.yml(追記箇所だけ)
remote_write:
  - url: http://localhost:8428/api/v1/write

VictoriaMetrics

簡単。
下記からバイナリをダウンロードして解凍してその場にデータ書き出しでよければ実行するだけ。

常駐させたいし、データもそれなりのところに放り込もうということで、サービス化。
予め/var/lib/victoriaディレクトリを作成し、データ保存期間は12ヶ月としてみた。

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=12 

[Install]
WantedBy=multi-user.target

Grafana

PrometheusデータソースとしてVictoriaMetricsのエンドポイントを指定するだけ。

PromQLがそのまま使えるので、ダッシュボードもデータソースを変えるだけ

まとめ?

色々立ち上げているが、メモリはこれくらい。
安定している感じなので、当面これで使ってみる。
(あ、データのバックアップなにもしてない)

ただ、VictoriaMetricsを立ち上げた当初、Grafanaのデータソースを設定してもデータが見えなかった。
が、2、3日した頃に改めて見たら見えるようになり、その後は安定。
Grafanaの設定は変えていないのだが。。
公式ドキュメントの何かを見落としていたか?(英語苦手)

Prometheus+Grafanaの日本語資料はいっぱいあって、私も色々参考にさせて頂いたのだが、
VictoriaMetricsの日本語資料があまりない上、上記問題があったおかげで難儀したなと。