GNU/Linux >> Linux の 問題 >  >> Linux

Linuxlogrotateコマンドを使用してログをローテーションおよびアーカイブします

ログは、アプリケーションが実行していることを確認したり、考えられる問題のトラブルシューティングを行ったりするのに最適です。私たちが扱うほとんどすべてのアプリケーションはログを生成します。私たちが自分で開発したアプリケーションにもログを生成してもらいたいのです。ログが詳細になるほど、より多くの情報が得られます。しかし、自分たちに任せておくと、ログは管理不能なサイズに成長する可能性があり、その結果、ログ自体が問題になる可能性があります。したがって、それらを切り詰めて、必要なものを保持し、残りをアーカイブすることをお勧めします。

その他の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日間保持されることを意味します。その他のオプションは、weeklymonthlyyearlysizeもあります サイズが指定された制限を超えた場合にログファイルをローテーションするパラメータ(例:size 10k) 、size 10Msize 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のログローテーションに関するチートシートをダウンロードします。


この記事は、もともと著者の個人ブログで公開されており、許可を得て改作されています。


Linux
  1. statコマンドを使用してLinuxのファイルステータスを確認します

  2. Linuxatコマンドでタスクをスケジュールする

  3. Linuxtacコマンドの使用を開始する

  1. Linuxcronコマンドを使用したタスクのスケジューリング

  2. xclipを使用してLinuxコマンドラインでコピーして貼り付けます

  3. Linuxcatコマンドの使用を開始する

  1. Linuxのpingコマンドで接続の問題を診断する

  2. Linuxのwatchコマンドでコマンドとタスクを監視する

  3. スマートクォートをLinuxsedコマンドに置き換えます