シェルスクリプトを作成する¶
ログ受信サーバーに保存されているログファイルをWasabiに保存するためのシェルスクリプトを作成します。
※Wasabiに保存せずログ受信サーバーのローカルディスクに保存するパターンも記載します。
/usr/local/bin/fralogbk.shを作成する(Wasabiに保存するパターン)¶
以下のコマンドを実行し、シェルスクリプトを作成します。
#!/bin/bash ################################################################################### # 更新日 : 2022/03/10 # 版 : 0.1 # 使用法 : /usr/local/bin/fralogbk.sh ################################################################################### ### 変数定義 ###################################################################### PATH=${PATH}:/usr/local/bin ENDPOINT_URL="https://ap-northeast-1-ntt.wasabisys.com" BUCKET_NAME="s3://sdpf-fralog-bucket/" ERROR_LOG="/var/log/FRA/fralogbk/fralogbk.log" LOG_DIR="/var/log/FRA" BK_DIR="/var/log/FRA/backup" UP_DIR="/var/log/FRA/upload" DAY=`date +%Y%m%d` FRASV1=FRA0系のホスト名 FRASV2=FRA1系のホスト名 declare -a file_list=() ### エラーログ出力関数 ############################################################ # 使用法 : ERROR_LOG_OUTPUT [エラーメッセージ] [エラーコード] ERROR_LOG_OUTPUT() { echo "`date +%Y/%m/%d-%H:%M:%S` $1 (code: $2)" >> ${ERROR_LOG} } ### ディレクトリー存在確認および作成 ############################################## if [ ! -d ${LOG_DIR} ]; then echo "td-agentのログファイル保存先が見つかりません。" 1>&2 exit 1 fi ### 実行ユーザー確認 ############################################################## USER_ID=`id -u` if [ ${USER_ID} -ne 0 ]; then ERROR_LOG_OUTPUT "rootユーザーで実行する必要があります。" "1" exit 1 fi ### Wasabi疎通確認 ################################################################ aws s3 ls ${BUCKET_URL} --endpoint-url=${ENDPOINT_URL} > /dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "Wasabiとの疎通確認が失敗したため、処理を終了します。" "${err_cd}" exit 1 fi ############ # MAIN ############ ### ログファイルの存在確認 ######################################################## FILE_CNT=`find ${LOG_DIR} -maxdepth 1 -type f -name "FRA*.log" | grep [0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].log | grep -v ${DAY} | wc -l` if [ ${FILE_CNT} -eq 0 ]; then echo "バックアップ対象のファイルが存在しないため、処理を終了します。" exit 0 fi ### ログファイルをディレクトリに移動 ############################################## file_list=(`ls ${LOG_DIR} | grep [0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].log | grep -v ${DAY} | gawk -F/ '{print $NF'}`) for i in "${file_list[@]}" # i=FRA.HOSTNAME.FACILITY.YYYYMMDD.log do DIR_NAME=`echo $i | cut -d. -f2,4` # HOSTNAME.YYYYMMDD if [ ! -d ${BK_DIR}/${DIR_NAME} ];then mkdir -p ${BK_DIR}/${DIR_NAME} fi cd ${LOG_DIR} mv -f $i ${BK_DIR}/${DIR_NAME} done ### ログファイルをZIPファイル化 ################################################### for j in `ls ${BK_DIR}` do W_DIR_NAME=`echo $j | cut -d. -f2 | cut -c 1-6` # YYYYMM if [ ! -d ${UP_DIR}/${W_DIR_NAME} ];then mkdir -p ${UP_DIR}/${W_DIR_NAME} fi cd ${BK_DIR}/${j} zip ${UP_DIR}/${W_DIR_NAME}/${j}.zip * >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "ログファイルのZIP化に失敗しました。" "${err_cd}" exit 1 fi done ### WasabiへFRAのログファイルを送信 ############################################### aws s3 sync ${UP_DIR} ${BUCKET_NAME} --endpoint-url=${ENDPOINT_URL} --exact-timestamps >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "Wasabiへのログファイル送信に失敗したため、処理を終了します。" "${err_cd}" exit 1 fi ### 送信が完了したログファイルの削除 ############################################## cd ${UP_DIR} rm -rf * >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "${UPLOAD_LOG_DIR} 内のファイル削除に失敗しました。" "${err_cd}" exit 1 fi cd ${BK_DIR} rm -rf * >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "${UPLOAD_LOG_DIR} 内のファイル削除に失敗しました。" "${err_cd}" exit 1 fi cd ${LOG_DIR} rm -f `find ${LOG_DIR} -maxdepth 1 -type f -name "FRA*.log" | grep [0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].log | grep -v ${DAY}` >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "${LOG_DIR} 内のファイル削除に失敗しました。" "${err_cd}" exit 1 fi ################################################################################### echo "`date +%Y/%m/%d-%H:%M:%S` ログファイルの転送が正常に終了しました。" >> ${ERROR_LOG} exit 0
/usr/local/bin/fralogbk.shを作成する(ログ受信サーバーのローカルディスクに保存するパターン)¶
以下のコマンドを実行し、シェルスクリプトを作成します。
#!/bin/bash ################################################################################### # 更新日 : 2022/03/10 # 版 : 0.1 # 使用法 : /usr/local/bin/fralogbk.sh ################################################################################### ### 変数定義 ###################################################################### PATH=${PATH}:/usr/local/bin ENDPOINT_URL="https://ap-northeast-1-ntt.wasabisys.com" BUCKET_NAME="s3://sdpf-fralog-bucket/" ERROR_LOG="/var/log/FRA/fralogbk/fralogbk.log" LOG_DIR="/var/log/FRA" BK_DIR="/var/log/FRA/backup" UP_DIR="/var/log/FRA/upload" DAY=`date +%Y%m%d` FRASV1=FRA0系のホスト名 FRASV2=FRA1系のホスト名 declare -a file_list=() ### エラーログ出力関数 ############################################################ # 使用法 : ERROR_LOG_OUTPUT [エラーメッセージ] [エラーコード] ERROR_LOG_OUTPUT() { echo "`date +%Y/%m/%d-%H:%M:%S` $1 (code: $2)" >> ${ERROR_LOG} } ### ディレクトリー存在確認および作成 ############################################## if [ ! -d ${LOG_DIR} ]; then echo "td-agentのログファイル保存先が見つかりません。" 1>&2 exit 1 fi ### 実行ユーザー確認 ############################################################## USER_ID=`id -u` if [ ${USER_ID} -ne 0 ]; then ERROR_LOG_OUTPUT "rootユーザーで実行する必要があります。" "1" exit 1 fi ############ # MAIN ############ ### ログファイルの存在確認 ######################################################## FILE_CNT=`find ${LOG_DIR} -maxdepth 1 -type f -name "FRA*.log" | grep [0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].log | grep -v ${DAY} | wc -l` if [ ${FILE_CNT} -eq 0 ]; then echo "バックアップ対象のファイルが存在しないため、処理を終了します。" exit 0 fi ### ログファイルをディレクトリに移動 ############################################## file_list=(`ls ${LOG_DIR} | grep [0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].log | grep -v ${DAY} | gawk -F/ '{print $NF'}`) for i in "${file_list[@]}" # i=FRA.HOSTNAME.FACILITY.YYYYMMDD.log do DIR_NAME=`echo $i | cut -d. -f2,4` # HOSTNAME.YYYYMMDD if [ ! -d ${BK_DIR}/${DIR_NAME} ];then mkdir -p ${BK_DIR}/${DIR_NAME} fi cd ${LOG_DIR} mv -f $i ${BK_DIR}/${DIR_NAME} done ### ログファイルをZIPファイル化 ################################################### for j in `ls ${BK_DIR}` do W_DIR_NAME=`echo $j | cut -d. -f2 | cut -c 1-6` # YYYYMM if [ ! -d ${UP_DIR}/${W_DIR_NAME} ];then mkdir -p ${UP_DIR}/${W_DIR_NAME} fi cd ${BK_DIR}/${j} zip ${UP_DIR}/${W_DIR_NAME}/${j}.zip * >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "ログファイルのZIP化に失敗しました。" "${err_cd}" exit 1 fi done ### 送信が完了したログファイルの削除 ############################################## cd ${BK_DIR} rm -rf * >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "${UPLOAD_LOG_DIR} 内のファイル削除に失敗しました。" "${err_cd}" exit 1 fi cd ${LOG_DIR} rm -f `find ${LOG_DIR} -maxdepth 1 -type f -name "FRA*.log" | grep [0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9].log | grep -v ${DAY}` >/dev/null 2>>${ERROR_LOG} err_cd=$? if [ ${err_cd} -ne 0 ]; then ERROR_LOG_OUTPUT "${LOG_DIR} 内のファイル削除に失敗しました。" "${err_cd}" exit 1 fi ################################################################################### echo "`date +%Y/%m/%d-%H:%M:%S` ログファイルの圧縮処理が正常に終了しました。" >> ${ERROR_LOG} exit 0