この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
どうも、クラ本部の黒田です。
前回は、Amazon EC2 インスタンス上でのログ管理する際の logrotate
ツールを使用したログのローテーション設定手順をご紹介しました。
今回は、log管理するためのスクリプトを使って、log世代管理を実行してみたいと考えております。
■ はじめに
ログ管理スクリプトを実行することによるメリットは次のとおりです。
-
自動化されたログ管理: スクリプトを使用することで、ログの生成、出力、世代管理などのタスクが自動化されます。手動でこれらのタスクを行う手間を削減し、ログの継続的な管理が確保されます。
-
一貫性と正確性: スクリプトによる自動化は一貫性と正確性を保証します。人為的なミスを排除し、ログの生成や管理に関するヒューマンエラーを低減します。
-
容易な監視: スクリプトによってログ管理が定期的に実行されるため、ログファイルの生成や世代管理の状況を容易に監視できます。適切なログが適切な時に作成および管理されていることが保証されます。
-
容量とストレージの最適化: ログの過去の世代を管理することにより、ディスクスペースの効率的な使用が促進されます。過去のログは不要なまま残らず、必要な情報が保持されます。
-
セキュリティ向上: 古いログファイルが適切に管理されることで、セキュリティ上のリスクが軽減されます。古いログが無制限に残らないため、セキュリティ情報や個人情報の漏洩のリスクを最小限に抑えることができます。
■ 前提条件
- Amazon EC2 インスタンスが起動され、SSMやSSHに接続できる状態であること。
■ 設定手順
-
/opt/ScriptUT
ディレクトリを作成します。-p
オプションは、必要に応じて親ディレクトリも作成します。mkdir -p /opt/ScriptUT
-
script
コマンドを使って、新しいターミナルセッションを記録します。ログのファイル名には現在の日付と時間が含まれます。script /opt/ScriptUT/
date +%Y%m%d_%H%M%S
.log※ 手順の1,2は操作ログを記録するための準備となりますので、必要のない方は飛ばしてください。
-
/opt/eap
ディレクトリ内にserver.log
とaudit.log
サブディレクトリを作成します。mkdir -p /opt/eap/{server.log,audit.log}
-
/infra/script/
ディレクトリを作成し、その中にlogrotate.sh
スクリプトを作成します。vi
エディタでスクリプトを開きます。mkdir -p /infra/script/ ; vi /infra/script/logrotate.sh
#!/bin/bash # create : 2023/08/26 # desc : logrotate.sh ############################################# # Local HOSTNAME=$(uname -n | awk -F"." '{print $1}') LOGS=( "/opt/eap/server.log/server-log" "/opt/eap/audit.log/audit-log" ) ############################################# # Main # ログ出力する for LOG in "${LOGS[@]}"; do echo "$(LANG=C; date) : [INFO]:${HOSTNAME}:logrotate." | sudo tee -a "$LOG" # 出力したlogファイルを指定された日付フォーマットに従ったファイル作成 CURRENT_DATE=$(date +%Y-%m-%d-%H%M%S) BACKUP_LOG_FILE=${LOG}${CURRENT_DATE} cp ${LOG} ${BACKUP_LOG_FILE} done exit 0
-
logrotate.sh
スクリプトに実行権限を付与します。chmod +x /infra/script/logrotate.sh
-
/infra/script/logrotate.sh
スクリプトを手動で実行します。このスクリプトはログファイルにログを出力し、バックアップファイルを作成します。/infra/script/logrotate.sh
-
/opt/eap/server.log
と/opt/eap/audit.log
ファイルのパーミッションと所有者情報を表示します。[root@kuroda ~]# mkdir -p /opt/eap/{server.log,audit.log} [root@kuroda ~]# mkdir -p /infra/script/ ; vi /infra/script/logrotate.sh [root@kuroda ~]# chmod +x /infra/script/logrotate.sh [root@kuroda ~]# /infra/script/logrotate.sh Sat Aug 26 06:53:21 UTC 2023 : [INFO]:kuroda:logrotate. Sat Aug 26 06:53:21 UTC 2023 : [INFO]:kuroda:logrotate. [root@kuroda ~]# ll -al /opt/eap/server.log /opt/eap/audit.log /opt/eap/audit.log: total 8 drwxr-xr-x. 2 root root 57 Aug 26 06:53 . drwxr-xr-x. 4 root root 41 Aug 26 06:52 .. -rw-r--r--. 1 root root 63 Aug 26 06:53 audit-log -rw-r--r--. 1 root root 63 Aug 26 06:53 audit-log2023-08-26-065321 /opt/eap/server.log: total 8 drwxr-xr-x. 2 root root 59 Aug 26 06:53 . drwxr-xr-x. 4 root root 41 Aug 26 06:52 .. -rw-r--r--. 1 root root 63 Aug 26 06:53 server-log -rw-r--r--. 1 root root 63 Aug 26 06:53 server-log2023-08-26-065321 [root@kuroda ~]#
-
crontab
を編集し、ログローテーションスクリプトを5分ごとに実行するCronジョブを設定します。crontab -e */5 * * * * /infra/script/logrotate.sh
-
/infra/script/log_mgmt.sh
log管理スクリプトを作成し、実行権限を付与します。vi /infra/script/log_mgmt.sh chmod +x /infra/script/log_mgmt.sh
log_mgmt.shスクリプトに以下の内容を貼り付けてください。
#!/bin/sh ############################################# # create: 2023/08/26 # filename: log_mgmt.sh # description: server&auditログ管理 ############################################# # ログディレクトリと対象ファイル名パターンを配列で定義 declare -a LOG_DIRS=("/opt/eap/server.log" "/opt/eap/audit.log") declare -a LOG_FILE_PATTERNS=("server-log*-*" "audit-log*-*") # 最新のログファイル数 NUM_GENERATIONS=7 # 処理開始ログ start_message="ログ管理スクリプトが開始されました。" echo "$start_message" logger -p user.info "$start_message" # ログ管理処理 manage_logs() { local log_dir="$1" local log_file_pattern="$2" latest_logs=$(find "$log_dir" -maxdepth 1 -name "$log_file_pattern" -type f -printf '%T@ %p\n' | sort -rn | head -n $NUM_GENERATIONS | cut -d' ' -f2-) for log_file in "$log_dir"/$log_file_pattern; do if ! echo "$latest_logs" | grep -q "$log_file"; then rm -f "$log_file" || { error_message="エラーが発生しました。スクリプトを終了します。"; echo "$error_message"; logger -p user.err "$error_message"; exit 1; } fi done } ############################################# # メイン処理 ############################################# for ((i = 0; i < ${#LOG_DIRS[@]}; i++)); do log_dir="${LOG_DIRS[$i]}" log_file_pattern="${LOG_FILE_PATTERNS[$i]}" manage_logs "$log_dir" "$log_file_pattern" done # 正常終了ログ success_message="ログの管理が完了しました." echo "$success_message" logger -p user.info "$success_message" exit 0
-
/etc/crontab
ファイルを編集し、ログ管理スクリプトを毎時30分に実行するCronジョブを設定します。vi /etc/crontab 34 * * * * root /infra/script/log_mgmt.sh
-
/opt/eap/server.log
と/opt/eap/audit.log
ファイルのパーミッションと所有者情報を表示し、logファイルが作成されていることを確認します。[root@kuroda script]# ll -al /opt/eap/server.log /opt/eap/audit.log /opt/eap/audit.log: total 184 drwxr-xr-x. 2 root root 16384 Aug 26 07:18 . drwxr-xr-x. 4 root root 41 Aug 26 05:49 .. -rw-r--r--. 1 root root 616 Aug 26 07:18 audit-log -rw-r--r--. 1 root root 112 Aug 26 06:01 audit-log2023-08-26-060103 -rw-r--r--. 1 root root 168 Aug 26 06:04 audit-log2023-08-26-060402 -rw-r--r--. 1 root root 224 Aug 26 06:06 audit-log2023-08-26-060626 -rw-r--r--. 1 root root 280 Aug 26 06:08 audit-log2023-08-26-060854 -rw-r--r--. 1 root root 336 Aug 26 06:09 audit-log2023-08-26-060911 -rw-r--r--. 1 root root 392 Aug 26 06:11 audit-log2023-08-26-061106 -rw-r--r--. 1 root root 448 Aug 26 06:18 audit-log2023-08-26-061816 -rw-r--r--. 1 root root 504 Aug 26 07:16 audit-log2023-08-26-071633 -rw-r--r--. 1 root root 560 Aug 26 07:17 audit-log2023-08-26-071740 -rw-r--r--. 1 root root 616 Aug 26 07:18 audit-log2023-08-26-071822 /opt/eap/server.log: total 184 drwxr-xr-x. 2 root root 16384 Aug 26 07:18 . drwxr-xr-x. 4 root root 41 Aug 26 05:49 .. -rw-r--r--. 1 root root 616 Aug 26 07:18 server-log -rw-r--r--. 1 root root 112 Aug 26 06:01 server-log2023-08-26-060103 -rw-r--r--. 1 root root 168 Aug 26 06:04 server-log2023-08-26-060402 -rw-r--r--. 1 root root 224 Aug 26 06:06 server-log2023-08-26-060626 -rw-r--r--. 1 root root 280 Aug 26 06:08 server-log2023-08-26-060854 -rw-r--r--. 1 root root 336 Aug 26 06:09 server-log2023-08-26-060911 -rw-r--r--. 1 root root 392 Aug 26 06:11 server-log2023-08-26-061106 -rw-r--r--. 1 root root 448 Aug 26 06:18 server-log2023-08-26-061816 -rw-r--r--. 1 root root 504 Aug 26 07:16 server-log2023-08-26-071633 -rw-r--r--. 1 root root 560 Aug 26 07:17 server-log2023-08-26-071740 -rw-r--r--. 1 root root 616 Aug 26 07:18 server-log2023-08-26-071822
-
/infra/script/log_mgmt.sh
スクリプトを手動で実行します。これにより、古いログファイルが管理されます。[root@kuroda script]# /infra/script/log_mgmt.sh ログ管理スクリプトが開始されました。 ログの管理が完了しました. [root@kuroda script]# ll -al /opt/eap/server.log /opt/eap/audit.log /opt/eap/audit.log: total 48 drwxr-xr-x. 2 root root 16384 Aug 26 07:22 . drwxr-xr-x. 4 root root 41 Aug 26 05:49 .. -rw-r--r--. 1 root root 616 Aug 26 07:18 audit-log -rw-r--r--. 1 root root 280 Aug 26 06:08 audit-log2023-08-26-060854 -rw-r--r--. 1 root root 336 Aug 26 06:09 audit-log2023-08-26-060911 -rw-r--r--. 1 root root 392 Aug 26 06:11 audit-log2023-08-26-061106 -rw-r--r--. 1 root root 448 Aug 26 06:18 audit-log2023-08-26-061816 -rw-r--r--. 1 root root 504 Aug 26 07:16 audit-log2023-08-26-071633 -rw-r--r--. 1 root root 560 Aug 26 07:17 audit-log2023-08-26-071740 -rw-r--r--. 1 root root 616 Aug 26 07:18 audit-log2023-08-26-071822 /opt/eap/server.log: total 172 drwxr-xr-x. 2 root root 16384 Aug 26 07:22 . drwxr-xr-x. 4 root root 41 Aug 26 05:49 .. -rw-r--r--. 1 root root 616 Aug 26 07:18 server-log -rw-r--r--. 1 root root 280 Aug 26 06:08 server-log2023-08-26-060854 -rw-r--r--. 1 root root 336 Aug 26 06:09 server-log2023-08-26-060911 -rw-r--r--. 1 root root 392 Aug 26 06:11 server-log2023-08-26-061106 -rw-r--r--. 1 root root 448 Aug 26 06:18 server-log2023-08-26-061816 -rw-r--r--. 1 root root 504 Aug 26 07:16 server-log2023-08-26-071633 -rw-r--r--. 1 root root 560 Aug 26 07:17 server-log2023-08-26-071740 -rw-r--r--. 1 root root 616 Aug 26 07:18 server-log2023-08-26-071822
■ 動作確認
手順8. crontab
で5分ごとlogファイルの生成ジョブ
crontab -e
*/5 * * * * /infra/script/logrotate.sh
手順10. /etc/crontab
ジョブ実行状態確認
[root@kuroda ~]# sudo systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; preset: enabled)
Active: active (running) since Sat 2023-08-26 08:17:38 UTC; 3min 2s ago
Main PID: 26615 (crond)
Tasks: 2 (limit: 1114)
Memory: 1.8M
CPU: 119ms
CGroup: /system.slice/crond.service
├─25776 /usr/sbin/anacron -s
└─26615 /usr/sbin/crond -n
Aug 26 08:17:38 kuroda.ap-northeast-1.compute.internal crond[26615]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 59% if used.)
Aug 26 08:17:38 kuroda.ap-northeast-1.compute.internal crond[26615]: (CRON) INFO (running with inotify support)
Aug 26 08:17:38 kuroda.ap-northeast-1.compute.internal crond[26615]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
Aug 26 08:34:01 kuroda.ap-northeast-1.compute.internal crond[26615]: (*system*) RELOAD (/etc/crontab)
Aug 26 08:34:01 kuroda.ap-northeast-1.compute.internal CROND[26684]: (root) CMD (/infra/script/log_mgmt.sh)
Aug 26 08:34:01 kuroda.ap-northeast-1.compute.internal CROND[26683]: (root) CMDOUT (ログ管理スクリプトが開始されました。)
Aug 26 08:34:01 kuroda.ap-northeast-1.compute.internal root[26685]: ログ管理スクリプトが開始されました。
Aug 26 08:34:01 kuroda.ap-northeast-1.compute.internal CROND[26683]: (root) CMDOUT (ログの管理が完了しました.)
Aug 26 08:34:01 kuroda.ap-northeast-1.compute.internal root[26742]: ログの管理が完了しました.
Aug 26 08:34:01 kuroda.ap-northeast-1.compute.internal CROND[26683]: (root) CMDEND (/infra/script/log_mgmt.sh)
手順10. /etc/crontab
で毎時の34分にlogファイルの世代管理ジョブ
[root@kuroda script]# ll -al /opt/eap/server.log /opt/eap/audit.log
/opt/eap/audit.log:
total 172
drwxr-xr-x. 2 root root 16384 Aug 26 08:33 .
drwxr-xr-x. 4 root root 41 Aug 26 05:49 ..
-rw-r--r--. 1 root root 1232 Aug 26 08:30 audit-log
-rw-r--r--. 1 root root 896 Aug 26 08:00 audit-log2023-08-26-080001
-rw-r--r--. 1 root root 952 Aug 26 08:05 audit-log2023-08-26-080501
-rw-r--r--. 1 root root 1008 Aug 26 08:10 audit-log2023-08-26-081002
-rw-r--r--. 1 root root 1064 Aug 26 08:15 audit-log2023-08-26-081501
-rw-r--r--. 1 root root 1120 Aug 26 08:20 audit-log2023-08-26-082001
-rw-r--r--. 1 root root 1176 Aug 26 08:25 audit-log2023-08-26-082502
-rw-r--r--. 1 root root 1232 Aug 26 08:30 audit-log2023-08-26-083001
/opt/eap/server.log:
total 172
drwxr-xr-x. 2 root root 16384 Aug 26 08:33 .
drwxr-xr-x. 4 root root 41 Aug 26 05:49 ..
-rw-r--r--. 1 root root 1232 Aug 26 08:30 server-log
-rw-r--r--. 1 root root 896 Aug 26 08:00 server-log2023-08-26-080001
-rw-r--r--. 1 root root 952 Aug 26 08:05 server-log2023-08-26-080501
-rw-r--r--. 1 root root 1008 Aug 26 08:10 server-log2023-08-26-081002
-rw-r--r--. 1 root root 1064 Aug 26 08:15 server-log2023-08-26-081501
-rw-r--r--. 1 root root 1120 Aug 26 08:20 server-log2023-08-26-082001
-rw-r--r--. 1 root root 1176 Aug 26 08:25 server-log2023-08-26-082501
-rw-r--r--. 1 root root 1232 Aug 26 08:30 server-log2023-08-26-083001
[root@kuroda script]#
■ まとめ
以上の手順によって、ログファイルのローテーションと管理が設定されております。
では、皆さん、また!
linuxでのプロセスの監視について
【初学者向け】PCにPythonを学習するための環境を整える part2【Windows編】
【AWS】APP Syncとは?
↑↑↑クラ本部メンバーが書いた記事のご紹介 ↑↑↑、合わせてやってみるのもいいかと