はじめに
こんにちは初めまして,v_7zrgu0 こと Harukaと申します.
ファイルサーバを運用する場合,ディスクの冗長化に加えてデータそのものの冗長化も重要です.メインのサーバで運用しているデータは定期的に他のマシンでも保存しておくべきです.
自動バックアップまではファイルサーバを自前で運用している人ならしていると思いますが,ログをちゃんと見ている人は多くないのではないでしょうか.
なので ログを簡単に確認できるよう,チャットツールであるSlackを用いてバックアップの結果を通知させようと思います.
今回はファイルサーバのデータを自動バックアップし,結果をSlackで通知させるところまでを解説していきます.
環境としては,rsync・crontabをopenSUSE Leap 15.1上で動かしています
rsync Version 3.1.3
openSUSE Leap 15.1Slack Version 3.4.2
前提条件を挙げるとキリがありませんが,とりあえずメインサーバのストレージをバックアップサーバにcifsを用いるなりしてマウントしておいてください.
rsyncの設定
まずはメインサーバからバックアップサーバにデータをクローンさせるためのrsyncをシェルスクリプトで記述します.
引数の説明として,
--log-file : ログファイルを出力する
-a : アーカイブモード
--delete : 転送元で削除されたファイルは転送先でも削除
を指定しています.
記述例:
#!/bin/sh sudo rsync --log-file=/home/user/Documents/log/rsync/`date +"%Y%m%d-%H%M"`.log -a --delete --progress /mnt/fsv01/ /mnt/fsv01_backup/
Slack Appの追加
次にSlackの使用したいチームにIncoming WebHooksを追加します.
生成されたURLを使用します.
ログの送信設定
SlackでIncoming WebHooksの追加後,バックアップサーバからLogファイルをSlackに送信するためのスクリプトを作成します.
rsyncのログデータから最後の結果のみ出力したいので,tellコマンドでLogの末尾のみを取り出しています.
記述例:
#!/bin/sh data=`ls -1t ~/Documents/log/rsync/*.log | head -1` cp $data ~/Documents/notification/raw.txt tail -n 2 ~/Documents/notification/raw.txt > ~/Documents/notification/result.txt URL='https://hooks.slack.com/services/************** CHANNEL=${CHANNEL:-'#random'} BOTNAME=${BOTNAME:-'Notification'} EMOJI=${EMOJI:-':suse_geeko:'} HEAD=${HEAD:-"Backup report\n"} MESSAGE='```'`cat ~/Documents/notification/result.txt`'```' payload="payload={ \"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"icon_emoji\": \"${EMOJI}\", \"text\": \"${HEAD}${MESSAGE}\" }" curl -s -S -X POST --data-urlencode "${payload}" ${URL} > /dev/null
Cronへの登録
上記のスクリプトをCrontabを用いて定期的に自動実行させます.
今回の設定では毎週金曜日の23時にバックアップを実行,実行結果を土曜日朝7時にSlackへ通知するようしています
rsyncは管理者権限で実行するため,スーパーユーザでcronを編集します
sudo crontab -e
5 23 * * 5 sh /home/user/Documents/backup.sh
毎週金曜日の23時5分にシェルスクリプトを実行させます.
また,slackへの送信はユーザモードでcrontabを実行します
crontab -e
0 7 * * 6 sh /home/user/Documents/send_log.sh
毎週土曜日の7時ちょうどにシェルスクリプトを実行させます.
結果
シェルスクリプトが実行されると自動的にSlackへ投稿されます.
これでメインサーバからバックアップサーバへのrsyncが正常に行われているのか,チームメンバであれば誰でも簡単に確認できます.やったね!
もっとこれが知りたいなどがあれば,Twitterに DMやリプでも飛ばしてください.
また間違いや訂正すべきことがありましたら,教えていただけるとありがたいです.
最後まで読んでいただき,ありがとうございました.
参考文献
・atmarkit : Linux基本コマンドTips rsync
https://www.atmarkit.co.jp/ait/articles/1702/02/news031.html
・Qiita : cronの設定方法
https://qiita.com/hikouki/items/e744b3a4d356d2af12cf
・Incoming Webhooks
https://api.slack.com/incoming-webhooks
・Qiita : [10分で出来る]シェルスクリプトの結果をslackに投稿
https://qiita.com/tt2004d/items/50d79d1569c0ace118d6