Logrotateは、ほとんどのLinuxディストリビューションにプリインストールされているソフトウェアであり、ログファイルの長期保存と整理を管理できます。
システム内のアプリケーションは、多くの場合、ディスク操作または問題のログを記録します。定期的に削除しないと、これらのファイルのサイズが大きくなり、ディスクがいっぱいになり、誤動作を引き起こす可能性があります。
Logrotateは、ログファイルを定期的にチェックし、特定のサイズや経過時間を超えた場合にログファイルのローテーション、圧縮、削除を自動的に管理するための最も一般的なソリューションです。
Logrotateを使用すると、パス/etc/logrotate.conf内のファイルの後続のすべての構成で使用されるいくつかの基本的なパラメーターを定義できます。
# Set a weekly rotation
weekly
# Set the number of rotations to save
rotate 4
# make new log file
create
# Include all configurations files
include /etc/logrotate.d
このlogrotate.confの抜粋では、上記のすべてのパラメーターを適用するだけでなく、/ etc/logrotate.dディレクトリにあるすべての構成を読み取ることもお勧めします。そうすることで、各構成をアプリケーションやコンテキスト、あるいはその両方で分割できます。
ログローテーション構成は、1つ以上のファイルのルールセットを定義します:
[FILE] [FILE?] [FILE?] {
[SETTINGS]
}
典型的な例は、/ var / log/messagesの構成です。
/var/log/messages {
# Save 5 rotations
rotate 5
# Rotating files every week
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
上記の例では、メッセージファイルのみが考慮されます。 。そのローテーションは毎週最大5に設定されます。したがって、5回目のローテーションの終わりに、ログファイルは次のようになります。
-rw-r----- 1 root adm 1215 Jul 29 06:47 messages
-rw-r----- 1 root adm 3895 Jul 28 06:49 messages.1
-rw-r----- 1 root adm 454 Jul 21 06:37 messages.2.gz
-rw-r----- 1 root adm 506 Jul 15 06:40 messages.3.gz
-rw-r----- 1 root adm 456 Jul 7 06:41 messages.4.gz
-
日次、月次、週次、年次:ログファイルをローテーションする頻度を示します
-
圧縮、nocompress:古いファイルのローテーションを圧縮するかどうか
-
maxage:何日後に古いローテーションが削除されます
-
size:指定されたファイルが指定されたサイズよりも大きい場合にのみ回転を設定します。接尾辞を使用して、サイズ形式を示すことができます(たとえば、キロバイトの場合は「k」、メガバイトの場合は「M」)
-
ローテーション:完全に削除する前に保存する必要があるローテーションされたログの数。 0に設定すると、ログファイルはローテーションされずにクリアされます。
複数のファイルに同じルールを設定する場合は、コンマで区切って複数のパスを追加できます。例:
/var/log/custom_log, /var/log/alternative_log_file, /var/log/another_log {
…
}
この構成は、custom_logファイル、alternative_log_file、another_logに使用されます。
または、次のようなファイルマスクを使用することもできます。
/var/custom/logs/*, /var/log/custom_log {
# This configuration will rotate all the files in the directory.
# /var/custom/logs/* e il file /var/log/custom_log
...
}
dateext設定の使用
dateext設定を使用すると、ファイル名にローテーション日付を追加できるため、ログのデータを簡単に認識できます。
/var/log/custom.log {
size 100M
dateext
rotate 3
compress
maxage 100
}
上記の構成では、custom.logファイルが100Mに達するとすぐに、最大3回まで、または100日後にアーカイブされます。圧縮オプションを使用すると、アーカイブファイルもgzip形式で圧縮されます。
ローテーションされると、ファイル名は次のようにローテーション日となります。
# ls /var/log
-rw-r--r-- 1 user user 8980 2019-06-09 22:10 custom.log-20180609.gz
-rwxrwxrwx 1 user user 0 2019-06-09 22:11 custom.log
Logrotateでは、postrotate / endscriptキーワードを使用して、ログローテーションのたびなど、特定のイベントが発生したときにカスタマイズされたスクリプトを実行できます。
考えられる用途の1つは、ローテーションの完了時にログを電子メールで送信することです。続行するには、まず、ファイルをメールアドレスに送信するスクリプトを作成します。
#!/bin/bash
# Get all logs
tar -cvf /tmp/logpack.tar /var/log/messages*
# Send logs as attachment
echo "Log" | mail -s "log" [email protected] -A /tmp/logpack.tar
上記のファイルをホームディレクトリ(例:/home/map.com username_s // endend.sh)に保存し、次の方法で必要な権限が有効になっていることを確認します。
# sudo chmod u+x /home/user/sendlog.sh
次に、logrotate構成ファイルを次のように編集します。
/var/log/messages {
...
postrotate
…
/home/user/sendlog.sh
endscript
}
完了すると、ログローテーションごとに上記のログアーカイブが記載されたメールが届きます。