はじめに
さくらのクラウドには自動バックアップ機能があります。
ボタン一つで毎日バックアップを取得してくれるため、使いやすい機能ですが…
「バックアップ取得に失敗したら、気付けますか?」
バックアップは普段使わないからこそ、本当に必要になったときに
「実は数日前からバックアップが取れていませんでした」
という事態だけは避けたいところです。
そこで今回は、外部監視ツールを使わずに自動バックアップが正常に作成されているかを監視する仕組み
を作ってみました。
自動バックアップには通知機能がない
自動バックアップでは毎日アーカイブが作成でき、希望に応じて調整できますが
- バックアップ取得時刻は指定できない
- バックアップ失敗時の通知機能はない
という特徴があります。
そのため、何らかの理由でバックアップ取得に失敗しても、そのまま気付かない可能性があります。
バックアップ取得時刻を指定する方法は下記記事にて紹介しております。

発想を変えて監視する
バックアップの開始時刻は分からず、バックアップ開始ログもさくらのクラウド内の「イベントログ」に出力されるので、サーバ側から観測するのが難しいです。
そこで、直近アーカイブの作成日時を参照して、36時間以上経過している場合、警告といった方式を採用しました。
なぜ36時間?
例えば毎日午前1時頃にバックアップが取得される場合でも、
- バックアップ開始時刻が多少ずれる
- 作成完了まで時間がかかる
といったことがあります。
24時間ぴったりで判定すると誤検知する可能性があるため、今回は36時間という少し余裕を持った時間を採用しました。
usacloudでアーカイブを取得する
アーカイブ一覧は usacloud コマンドで取得できます。
usacloud archive ls --tags autobackup-113801412598
取得結果は次のようになります。
[
{
"Availability": "available",
"BundleInfo": null,
"CreatedAt": "2026-07-01T00:20:55+09:00",
...
...
}
]
今回確認したい情報は次の二つだけです。
- Availability(有効状態)
- CreatedAt(作成日時)
Availability が available(利用可能) のものだけを対象にし、CreatedAt が一番新しいものを取得します。
判定処理
スクリプトでは
- タグ指定でアーカイブ一覧を取得
- Availabilityがavailable のみを抽出
- 一番新しい CreatedAt を取得
- 36時間以内なら正常
- 36時間を超えていたら異常
という流れで判定しています。
もし usacloud 自体がエラーになった場合も、メール通知するようにしています。
スクリプト
今回作成したスクリプトはこちらです。MAIL_TO、TAG、USACLOUD のパスだけ環境に合わせて変更してください。
#!/bin/bash
# ===== 設定 =====
TAG="autobackup-113801412598"
MAIL_TO="test@example.com"
MAIL_FROM="root@$(hostname -f 2>/dev/null || hostname)"
HOSTNAME="$(hostname)"
USACLOUD="/usr/local/bin/usacloud"
THRESHOLD_HOURS=36
SUBJECT="[ALERT] さくらクラウド自動バックアップ未作成検知: ${HOSTNAME}"
THRESHOLD_EPOCH="$(date -d "${THRESHOLD_HOURS} hours ago" +%s)"
RESULT="$(${USACLOUD} archive ls --tags "${TAG}" 2>&1)"
RET=$?
if [ ${RET} -ne 0 ]; then
cat <<EOF | mail -s "${SUBJECT}" -r "${MAIL_FROM}" "${MAIL_TO}"
さくらのクラウドのアーカイブ一覧取得に失敗しました。
ホスト名: ${HOSTNAME}
対象タグ: ${TAG}
エラー内容:
${RESULT}
EOF
exit 2
fi
LATEST_EPOCH="$(
echo "${RESULT}" | jq -r '.[] | select(.Availability == "available") | .CreatedAt' | while read -r created_at; do
created_epoch="$(date -d "${created_at}" +%s 2>/dev/null)"
[ -n "${created_epoch}" ] && echo "${created_epoch}"
done | sort -nr | head -1
)"
if [ -z "${LATEST_EPOCH}" ] || [ "${LATEST_EPOCH}" -lt "${THRESHOLD_EPOCH}" ]; then
LATEST_CREATED_AT="$(
echo "${RESULT}" | jq -r '.[] | select(.Availability == "available") | .CreatedAt' \
| sort -r \
| head -1
)"
cat <<EOF | mail -s "${SUBJECT}" -r "${MAIL_FROM}" "${MAIL_TO}"
さくらのクラウドの自動バックアップアーカイブが作成されていない可能性があります。
ホスト名: ${HOSTNAME}
対象タグ: ${TAG}
最新の available アーカイブ作成日時:
${LATEST_CREATED_AT:-なし}
取得結果:
${RESULT}
EOF
exit 1
fi
exit 0
cronで毎日確認
例えば毎日午前8時に確認するなら、
0 8 * * * /usr/local/bin/check_sakura_backup.sh
のように設定します。
毎日一度確認するだけなので、サーバへの負荷もほとんどありません。
Zabbix監視にも利用できる
今回はメール通知版を紹介しましたが、運用環境ではZabbix監視に組み込む方法もおすすめです。
スクリプトの終了コードを利用すれば、
0:正常1:バックアップ未作成2:API取得失敗
という形で監視できます。
メールだけでなく、普段利用している監視基盤で一元管理できるため、より運用しやすくなります。
まとめ
自動バックアップは便利ですが、
「設定したから安心」
とは言い切れません。
定期的にバックアップが作成されていることを確認して初めて、本当の意味で安心できます。
今回紹介した方法は、
- バックアップ取得時刻を気にしなくてよい
- シンプルなシェルスクリプトだけで実装できる
- Zabbixなど既存の監視にも組み込みやすい
という点がメリットです。
万が一のときに困らないためにも、「バックアップを取る仕組み」だけでなく、「バックアップが取れていることを確認する仕組み」も合わせて用意してみてはいかがでしょうか。


