CloudMonkeyを利用して、スナップショットの作成日を取得する

クラウドで毎日スナップショットを取得していますが、たまに失敗している場合があるので、スナップショットを作成した日時を取得してメールするようにしたい。スナップショットの情報は「CloudMonkey」で取得してその情報を加工してメールで飛ばすスクリプトを作成します

cloudmonkeyは「CloudMonkeyをインストール」の記事でインストール方法を紹介していますので参考にして下さい
スナップショットの情報は、以下のように「cloudmonkey list snapshots」で取得できます

$ cloudmonkey list snapshots
count = 5
snapshot:
name = www01_test
id = xxxxxx-xxx-xxxx-xxxx-xxxxxxxxxx
account = xxxxxxxxxxxxxxxxx
created = 2023-04-26T05:10:30+0900
domain = xxxxxxxxxxxxxxxxx
domainid = xxxxxx-xxx-xxxx-xxxx-xxxxxxxxxx
intervaltype = DAILY
physicalsize = xxxxxxxxxx
revertable = False
snapshottype = DAILY
state = BackedUp
tags:
virtualsize = xxxxxxxxxxx
volumeid = xxxxxx-xxx-xxxx-xxxx-xxxxxxxxxx
volumename = xxxxxxxxxx
volumetype = DATADISK
zoneid = xxxxxx-xxx-xxxx-xxxx-xxxxxxxxxx
================================================================================

上記の情報を変数に入れて、加工して以下のようにメールを送信するスクリプトを作成しました

$ vim snapshot_info.sh 
#!/bin/bash

snapshot_info=`cloudmonkey list snapshots filter=name,created`

while read -r line; do

# name情報をテキストに出力
  if [[ $line == name* ]]; then
    echo $line >> /var/tmp/snapshots_list.txt
  fi 

#createdをテキストに出力。日付のフォーマットは 2023/04/26 12:00:00のに変更
  if [[ $line == created* ]]; then
    t_created=`echo "$line" | awk  -F "=" '{print $2}'`
    snapshot_date=`date -d "$t_created" +"%Y/%m/%d %H:%M:%S"`
    echo "created = $snapshot_date" >> /var/tmp/snapshots_list.txt

# created 2日以上古い場合は警告
     ut_created=$(date -d "$snapshot_date" +%s)
     now=$(date +%s)
     days_old=$(( (now - ut_created) / 86400 ))

     if [[ $days_old -ge 2 ]]; then
       echo "[Warning] Snapshot $snapshot_date is $days_old days old."
     fi
# 改行
    echo "" >> /var/tmp/snapshots_list.txt

  fi

done <<< "$snapshot_info"

# MAIL
subject="Cloud Snapshot list"
cat /var/tmp/snapshots_list.txt | mail -s "$subject" admin@example.com

簡単に説明すると、以下になります

  1. cloudmonkey list snapshots」でスナップショットの情報を取得して変数(snapshot_info)に入れます
  2. 変数(snapshot_info)を呼び出して、「name」の文字を含む場合はテキストファイル(/var/tmp/snapshots_list.txt)に出力します
  3. 「created」の文字を含む場合は、その値を取得します。また日付のフォーマットを"%Y/%m/%d %H:%M:%S"として見やすくします
  4. 日付をテキストファイルに出力します
  5. 作成日がスクリプトの実行日より2日より前の場合は警告メッセージを、テキストファイルに出力します
  6. 変数の値が無くなるまで2~5の処理を繰り返します
  7. 最後にテキストファイルの内容をメール送信します

LinuxCentOS 7

Posted by admin