collect_logs.sh
ホスト名一覧から各サーバにSSH接続し、ログをgzip圧縮・scp転送することで収集を行う
expectコマンドがインストールされていること
code:sh
# 変数設定
HOSTS_FILE="hostname.lst"
ARCHIVE_JBOSS_NAME="$(date +%Y%m%d)_JBoss.tar.gz" # JBossログアーカイブファイル
ARCHIVE_APACHE_NAME="$(date +%Y%m%d)_Apache.tar.gz" # Apacheログアーカイブファイル
REMOTE_JBOSS_LOGS="/opt/jboss-eap/standalone_*/log/localhost_*access.log" # 各サーバでのJBossログファイル
REMOTE_APACHE_LOGS="/var/opt/apache/apache_*/logs/*_log" # 各サーバでのApacheログファイル(access_log,error_log)
LOCAL_DEST_DIR=pwd # ローカルのログ格納ディレクトリ
SSH_USER="username"
SSH_PASSWORD="password"
# ホスト名一覧を1行ずつ読み込んで処理
while read -r HOST; do
# サーバごとのローカル保存先ディレクトリが存在するか確認し、なければ作成
mkdir -p "${LOCAL_DEST_DIR}/${HOST}"
# SSH接続してJBossログをアーカイブ圧縮
expect -c "
spawn ssh ${SSH_USER}@${HOST} \"tar -czf /tmp/${ARCHIVE_JBOSS_NAME} ${REMOTE_JBOSS_LOGS}\"
expect \"password:\"
send \"${SSH_PASSWORD}\r\"
expect eof
"
# SSH接続してApacheログをアーカイブ圧縮
expect -c "
spawn ssh ${SSH_USER}@${HOST} \"tar -czf /tmp/${ARCHIVE_APACHE_NAME} ${REMOTE_APACHE_LOGS}\"
expect \"password:\"
send \"${SSH_PASSWORD}\r\"
expect eof
"
# JBoss圧縮ファイルをローカルに転送
expect -c "
spawn scp ${SSH_USER}@${HOST}:/tmp/${ARCHIVE_JBOSS_NAME} ${LOCAL_DEST_DIR}/${HOST}/${ARCHIVE_JBOSS_NAME}
expect \"password:\"
send \"${SSH_PASSWORD}\r\"
expect eof
"
# Apache圧縮ファイルをローカルに転送
expect -c "
spawn scp ${SSH_USER}@${HOST}:/tmp/${ARCHIVE_APACHE_NAME} ${LOCAL_DEST_DIR}/${HOST}/${ARCHIVE_APACHE_NAME}
expect \"password:\"
send \"${SSH_PASSWORD}\r\"
expect eof
"
# 転送後、リモートのJBoss圧縮ファイルを削除
expect -c "
spawn ssh ${SSH_USER}@${HOST} \"rm /tmp/${ARCHIVE_JBOSS_NAME}\"
expect \"password:\"
send \"${SSH_PASSWORD}\r\"
expect eof
"
# 転送後、リモートのApache圧縮ファイルを削除
expect -c "
spawn ssh ${SSH_USER}@${HOST} \"rm /tmp/${ARCHIVE_APACHE_NAME}\"
expect \"password:\"
send \"${SSH_PASSWORD}\r\"
expect eof
"
echo "===> ${HOST} のログ圧縮・転送完了"
done < "${HOSTS_FILE}"
echo "===> すべてのログを ${LOCAL_DEST_DIR} 以下に転送しました。"
exit 0