本文へスキップ
Esc

バックアップと監視

このページの内容

データディレクトリの中身

データディレクトリは設定ファイルの data_dir で決まります(既定は作業ディレクトリの下の ./data)。以下では $DATA_DIR と表記します。

内容 バックアップが必要か 説明
rerinkuview.db(と同名の -wal、-shm) 必須 SQLite データベース:デバイス、グループ、設定、イベント、アクセスパスワード、スマートフォンの紐付け、この Rerinku View のインスタンス ID
secret.key 必須 32 バイトの暗号化キー:カメラのパスワード、リモートストレージ、クイック接続、MQTT の認証情報はこのキーで暗号化され、デバイストークンもこのキーで発行されます
config.yaml 必須 設定ファイル。$DATA_DIR ではなく作業ディレクトリにあります。ポートと GB28181 のパラメーターはここにしか保存されません
recordings/ 必要に応じて 録画ファイル。ファイルそのものが録画の根拠で、データベース内の録画インデックスはファイルから再構築できます
models/、faces/ AI 認識を使っているなら必要 認識モデルと顔ライブラリの写真
cloud/ 不要 クイック接続の実行時ファイル。再生成されます
~/.rerinku/bin/ 不要 内蔵の FFmpeg と認識コンポーネント。起動のたびに自動で展開されます

secret.key は必ずデータベースと一緒にバックアップしてください。 これがないと、復元後にすべてのカメラでパスワードを入力し直す必要があり、クイック接続、リモートストレージ、MQTT の認証情報も設定し直しになります。特に注意が必要なのは、Rerinku View が起動時に secret.key を見つけられないと、エラーを出さずに新しいキーをそのまま生成することです。

バックアップ

推奨:サービスを停止してまるごとコピーする

  1. Rerinku View を停止し、プロセスが終了したことを確認します。正常に停止すると、書き込み中の録画ファイルは正しく閉じられます。
  2. データディレクトリと設定ファイルをタイムスタンプ付きのディレクトリにコピーし、チェックサムを生成して、権限を絞ります。
export DATA_DIR=/var/lib/rerinku-view/data
export BACKUP_DIR=/srv/backups/rerinku-$(date -u +%Y%m%dT%H%M%SZ)
mkdir -p "$BACKUP_DIR"
cp -a "$DATA_DIR" /var/lib/rerinku-view/config.yaml "$BACKUP_DIR/"
(cd "$BACKUP_DIR" && find . -type f ! -path './data/recordings/*' -exec sha256sum {} + > SHA256SUMS)
chmod -R go-rwx "$BACKUP_DIR"

オンラインバックアップ

サービスを止めたくない場合、データベースは SQLite のバックアップコマンドで取得し、書き込み中のデータベースファイルを直接コピーしないでください。secret.key と設定ファイルはそのままコピーします。

sqlite3 "$DATA_DIR/rerinkuview.db" ".backup '$BACKUP_DIR/rerinkuview.db'"
cp -a "$DATA_DIR/secret.key" /var/lib/rerinku-view/config.yaml "$BACKUP_DIR/"

閉じられた録画ファイルはそれ以上変わらないので、rsync などのツールでオンラインのまま差分同期できます。

復元と移行

  1. Rerinku View を停止します。障害からの復元であれば、まず現在のデータのコピーを残しておき、唯一の現場をそのまま上書きしないでください。
  2. バックアップしたデータディレクトリと設定ファイルを元の場所に戻し、Rerinku View を実行するユーザーに読み書きの権限があることを確認します。
  3. 起動する前にデータベースを検査します:sqlite3 "$DATA_DIR/rerinkuview.db" 'PRAGMA integrity_check;'
  4. 同じバージョンかそれより新しいバージョンで起動し、/healthz、デバイス一覧、少なくとも 1 本の過去の録画の再生を確認します。

新しいマシンへの移行も同じ手順です。そのうえで、次の点に注意してください。

  • 設定ファイルで旧マシンの IP を直接書いている箇所(rerinku_device.public_url、public_mqtt_broker)は、新しいアドレスに変更します。
  • 新旧 2 台を同時に動かさないでください。 データベースにはインスタンス ID が含まれているため、コピーした Rerinku View は元のマシンと「同じ 1 台」になり、クイック接続や紐付け済みのスマートフォンは両者を 1 台として扱ってしまいます。

アップグレード

詳しい手順はアップグレードとロールバックに移動しました。更新前にデータベース、secret.key、設定をバックアップしてください。ロールバックには更新前のデータベースが必要です。

ロールバック

ロールバックの手順に従って旧バージョンを復元します。実行ファイルの置き換えだけでは戻せません。

監視

ヘルスチェック

GET /healthz

データベースが正常なら 200 と {"status":"ok"} を返し、そうでなければ 503 を返します。認証は不要です。30 秒ごとにリクエストし、続けて失敗したらアラートを出すことをおすすめします。

システムリソース

GET /api/v1/system/resources は、CPU、メモリ、GPU、ネットワーク、温度、ディスクの状況(2 秒ごとにサンプリング)と、全体のステータスを返します。

指標 警告 重大
CPU(1 分平均) 90% —
メモリ 90% 95%
ディスク 95% 98%
温度 85 ℃ 95 ℃

Rerinku View が外部からアクセスできる構成では、この API にトークンが必要です。オープン APIを参照してください。

ログ

ログは JSON 形式で標準出力に書き出されます。Rerinku View 自体はログのローテーションを行わないので、systemd、コンテナランタイム、ログ基盤に任せてください。ログには問題調査のためにデバイス ID とアドレスが記録されますが、カメラのパスワードや認証情報を含むアドレスは記録されません。

次のキーワードでアラートを設定することをおすすめします。

キーワード 意味
recording error 録画でエラーが発生した
recording storage check failed 録画ストレージのチェックに失敗した
recordings paused to protect storage ディスクの空き容量が足りず、録画が一時停止した。空き容量が戻ると自動で再開します
removing recording that has not been uploaded yet リモートストレージへのアップロードが終わっていない録画が削除された
application stopped Rerinku View が停止した

Rerinku View には現在、Prometheus 向けのメトリクスエンドポイントはありません。

デバッグインターフェース

APP_ENV が development(既定)のとき、Rerinku View は 127.0.0.1:6060 で Go の pprof デバッグインターフェースを有効にします。このマシンからしかアクセスできません。本番運用では APP_ENV=production を設定してオフにすることをおすすめします。設定リファレンスを参照してください。