ログは、アプリケーションが実行していることを確認したり、考えられる問題のトラブルシューティングを行ったりするのに最適です。私たちが扱うほとんどすべてのアプリケーションはログを生成します。私たちが自分で開発したアプリケーションにもログを生成してもらいたいのです。ログが詳細になるほど、より多くの情報が得られます。しかし、自分たちに任せておくと、ログは管理不能なサイズに成長する可能性があり、その結果、ログ自体が問題になる可能性があります。したがって、それらを切り詰めて、必要なものを保持し、残りをアーカイブすることをお勧めします。
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
logrotate
ユーティリティはログの管理に優れています。それらを回転させ、圧縮し、電子メールで送信し、削除し、アーカイブし、必要なときに新しいものを開始することができます。
logrotate
を実行しています 非常にシンプルです。logrotate -vs state-file config-file
を実行するだけです。 。上記のコマンドでは、v
オプションは冗長モード、s
を有効にします 状態ファイルと、最後のconfig-file
を指定します 必要なことを指定する構成ファイルについて言及しています。
logrotate
をチェックしてみましょう システム上でサイレントに実行され、/var/log
にある豊富なログを管理する構成 ディレクトリ。そのディレクトリ内の現在のファイルを確認してください。 *.[number].gz
がたくさんありますか ファイル?それがlogrotate
やっています。この構成ファイルは、/etc/logrotate.d/rsyslog
にあります。 。鉱山は次のようになります:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
このファイルは、/var/log/syslog
をローテーションするための手順を定義することから始まります。 ファイルと手順は、続く中括弧内に含まれています。意味は次のとおりです。
rotate 7
:最後の7ローテーションのログを保持します。次に、それらの削除を開始します。daily
:ログを毎日ローテーションします。rotate 7
と一緒に 、これは、ログが過去7日間保持されることを意味します。その他のオプションは、weekly
、monthly
、yearly
。size
もあります サイズが指定された制限を超えた場合にログファイルをローテーションするパラメータ(例:size 10k
) 、size 10M
、size 10G
、など。何も指定されていない場合、logrotate
のたびにログがローテーションされます。 実行されます。logrotate
を実行することもできますcron
で より具体的な時間間隔で使用します。-
missingok
:ログファイルがなくても大丈夫です。パニックにならないでください。 -
notifempty
:ログファイルが空の場合はローテーションしないでください。 -
delaycompress
:圧縮がオンの場合、次の回転まで圧縮を遅らせます。これにより、少なくとも1つの回転しているが圧縮されていないファイルが存在できるようになります。トラブルシューティングのために昨日のログを非圧縮のままにしておきたい場合に便利です。 Apacheのように、一部のプログラムが再起動/再ロードされるまで古いファイルに書き込む可能性がある場合にも役立ちます。 compress
:圧縮がオンになっています。nocompress
を使用する オフにします。-
postrotate/endscript
:ローテーション後、このセクション内でスクリプトを実行します。 クリーンアップ作業に役立ちます。prerotate/endscript
もあります ローテーションが始まる前に物事を行うため。
上記の構成で言及されたすべてのファイルに対して、次のセクションで何が行われるかを理解できますか? 2番目のセクションの唯一の追加パラメータは、sharedscripts
です。 、logrotate
に通知します postrotate/endscript
内のセクションを実行しない すべてのログローテーションが完了するまで。回転するログごとにスクリプトが実行されるのを防ぎ、最後に1回実行されます。
システムでNginxアクセスとエラーログを処理するために次の構成を使用しています。
/var/log/nginx/access.log
/var/log/nginx/error.log {
size 1
missingok
notifempty
create 544 www-data adm
rotate 30
compress
delaycompress
dateext
dateformat -%Y-%m-%d-%s
sharedscripts
extension .log
postrotate
service nginx reload
endscript
}
上記のスクリプトは、次を使用して実行できます。
logrotate -vs state-file /tmp/logrotate
コマンドを初めて実行すると、次の出力が得られます:
reading config file /tmp/logrotate
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
そして、もう一度実行します:
reading config file /tmp/logrotate>
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
そしてそれを3回実行します:
reading config file /tmp/logrotate>
extension is now .log
Handling 1 logs
rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log 1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log needs rotating
considering log /var/log/nginx/error.log
log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx
状態ファイルの内容は次のようになります:
logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56
Linuxのログローテーションに関するチートシートをダウンロードします。
この記事は、もともと著者の個人ブログで公開されており、許可を得て改作されています。