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

LinuxでのLogrotateの使用ログファイルの管理(例を含む)

Linuxオペレーティングシステムと実行中のアプリケーションは、多くの場合、ファイルへのログを生成します。これらのファイルは、多くの場合、/var/logに保存されます。 ディレクトリまたはアプリで指定されたその他のファイル。これらのログファイルがローテーション、圧縮、および定期的に整理されていない場合、最終的には使用可能なすべてのディスクスペースを消費し、サーバーがフリーズします。

このガイドでは、logrotateがどのように機能するかを見てから、カスタムアプリのlogrotationを構成する方法の例を見ていきます。

前提条件

このガイドに従うには、次のものが必要です。

  • Ubuntu、Debian、Centos、Rhel、RockyLinuxなどの最新のLinuxディストリビューション
  • サーバーまたはsudo権限を持つユーザーへのrootアクセス

次のコマンドでログローテーションのバージョンを確認してください:

logrotate --version

私のシステムからの出力:

# logrotate --version
logrotate 3.8.6

Logrotateがインストールされていない場合、エラーが発生します。 Linuxディストリビューションのパッケージマネージャーを使用してソフトウェアをインストールしてください。

ログローテーション構成

logrotate構成は、このファイル/etc/logrotate.confにあります。 。これは、デフォルト設定が配置されている場所です。また、どのシステムパッケージも所有していないログのローテーション構成もいくつかあります。

この構成ファイルの最も重要な行は、include /etc/logrotate.dです。 。これにより、logrotateは、そのディレクトリに追加された構成もチェックするように指示されます。つまり、アプリケーションの場合、メインファイルにすべてを追加する必要はなく、個別の構成ファイルを作成して/etc/logrotate.dに追加できます。 ディレクトリ。ログローテーションの支援が必要なインストールするほとんどのパッケージは、ログローテーション構成ファイルもそのディレクトリに配置します。

これは、メインの/etc/logrotate.confのコンテンツです。 ファイル:

weekly
rotate 4
create
dateext
compress
  • weekly rootが所有するログファイルを使用して毎週のログローテーションを構成します ユーザーとsyslog グループ
  • rotate 4 4つのログファイルが保持されます(4週間分のバックログを保持します)
  • create 現在のログファイルがローテーションされた後に作成される新しい空のログファイル
  • dateex ローテーションされたファイルのサフィックスとして日付を使用する
  • compress ローテーションされたファイルを圧縮する

/etc/logrotate.d内の個々のファイルの場合 ディレクトリ、例として1つを見てみましょう:

cat /etc/logrotate.d/yum

出力:

/var/log/yum.log {
    missingok
    notifempty
    maxsize 30k
    yearly
    create 0600 root root
}

これらの各構成は、/etc/logrotate.confのデフォルト構成を継承します。 ディレクトリ。

説明:

  • /var/log/yum.log この最初の行は、構成ターゲットをどのファイルに保存するかを示しています
  • missingok ファイルが存在しない場合でも問題はなく、logrotateでエラーが発生したり、エラーがログに記録されたりすることはありません。
  • notifempty ログファイルが空の場合はローテーションしないでください
  • maxsize サイズが30kを超える場合は、回転させます
  • yearly 年に1回実行
  • create 0600 root root 新しいローテーションされたファイルをrootとして作成します :root 権限あり0600

上記にリストされていない他のいくつかのオプション:

  • rotate 30 30個のファイルを保持し、それらが超過したときに最も古いファイルを整理します
  • monthly 月に1回ローテーション
  • compress ローテーションされたファイルを圧縮します。これはgzipを使用します デフォルトでは、ファイルは.gzで終わります。 。圧縮コマンドは、compresscmdを使用して変更できます オプション。

カスタムアプリログファイルのログローテーション

カスタムアプリケーションでログを生成してファイルに書き込む場合、そのファイルのローテーションの実行方法を構成するのがタスクです。

  • rootアクセスがある場合は、設定ファイルを/etc/logrotate.d/に配置するのが理想的です。 ディレクトリとそれは上記のように動作します
  • rootアクセスがない場合は、logrotateを実行するようにcronを構成する必要があります。 定義した構成を渡すコマンド
  • ログを毎日より頻繁にローテーションする場合(システムのLogrotateセットアップは1日1回しか実行されないため、1時間ごとなど)

/etc/logrotate.d/の構成

/var/log/our-app/app.logへのアプリ生成ログがあるとします。 centosとして実行されます 。 logrotateconfogファイル/etc/logrotate/ourapp.confを作成しましょう いくつかの設定例:

sudo vim /etc/logrotate.d/ourapp.conf

構成:

/var/log/our-app/*.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
    create 0640 centos centos
    sharedscripts
    postrotate
        systemctl reload our-app
    endscript
}

いくつかの新しい指令:

  • create 0640 centos centos 指定された権限でローテーション後に空のログファイルを作成します0640 指定されたユーザーとグループのcentos
  • sharedscripts つまり、構成に追加されたスクリプトは、ローテーションされたファイルごとではなく、実行ごとに1回だけ実行されます。ディレクティブ/var/log/our-app/*.logの場合 postrotateで指定されたスクリプトである複数のログファイルに一致します このオプションがないと2回実行されます
  • postrotate endscriptへ ブロックには、ログファイルがローテーションされた後に実行するスクリプトが含まれています。この場合、アプリをリロードします。これは、アプリケーションを新しく作成されたログファイルに切り替えるために必要になる場合があります。 postrotateに注意してください ログが圧縮される前に実行されます。圧縮には長い時間がかかる可能性があり、ソフトウェアはすぐに新しいログファイルに切り替える必要があります。 に実行する必要があるタスクの場合 ログは圧縮されています。lastactionを使用してください 代わりにブロックします。

上記の設定をテストするには、次のコマンドを使用します:

sudo logrotate /etc/logrotate.conf --debug

出力は、Logrotateが処理しているログファイルと、それらに対して何をしたかについてです。標準のLogrotateジョブは1日1回実行され、新しい構成が含まれます。

出力のサンプルデータ

...
rotating pattern: /var/log/our-app/*.log  after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
...

logrotateの使用 カスタム構成のコマンド

システムへのrootアクセス権がなく、独自のカスタムファイルをログローテーションする場合は、このセクションでその方法を説明します。

アプリをour-appとしましょう ログファイルを生成し、ホームディレクトリ内のカスタムパスに保存しています。 ~/apps/our-app/logs/ 。ログが頻繁に生成される場合は、ログをhourlyローテーションする必要があります。 。しかし、logrotateは1時間ごとに機能しませんか?

まず、logrotate構成ファイルを作成しましょう。このパス~/apps/our-app/conf/lorotate.confのappconfディレクトリ内にファイルを配置します 次の構成で:

ファイルを編集します:

vim ~/apps/our-app/conf/lorotate.conf

次の構成の場合:

/home/centos/apps/our-app/logs/*.log {
    rotate 30
    hourly
    compress
    sharedscripts
    delaycompress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d-%s
    copytruncate
}

上記の設定は、ディレクトリ/home/centos/apps/our-app/logs/*.log内のファイルをローテーションします 1時間ごとに、30個の古いログのみを圧縮して保持します。

  • copytruncate ログファイルの内容を新しいファイルにコピーしてから、ログファイルを切り捨てます。
  • dateformat ローテーションされたファイルの形式を指定します
  • dateext ローテーションされたファイルの日付拡張子を含めるようにlogrotateに指示します。

テストするには:

mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log

ファイルが配置されたので、logrotateを使用できます。 それを回転させます。 stateを指定するだけです。 ファイル。 state ファイルには、logrotateの内容が記録されます それが最後に実行されたときに見たので、それは何をすべきかを知っています。システムインストールの設定では、すでに/var/lib/logrotate/statusで処理されています。 ただし、この場合は指定する必要があります。

これにはホームディレクトリを使用できます:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
  • --verbose Logrotateが行っていることに関する詳細情報を印刷します。

次のような出力が表示されます:

 $ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /home/centos/apps/our-app/logs/*.log  hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
  log does not need rotating (log has been already rotated)set default create context

ログローテーションステータスファイルにいくつかの情報が記録されました:

$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0

Logrotateは、見たログと、最後にローテーションを検討した日時を記録しました。この同じコマンドを1時間後に実行すると、ログは期待どおりにローテーションされます。

Logrotateにログファイルを強制的にローテーションさせたい場合は、--forceを使用します。 フラグ:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force

これは、postrotateをテストするときに役立ちます およびその他のスクリプト。

次に、上記のコマンドを自動的に実行します。これは、cronを使用して実現できます。 crontab コマンドが便利です。

次のコマンドを使用できるようにcronを編集するには:

crontab -e

これにより、テキストファイルが開きます。予想される基本的な構文を説明するコメントがファイルにすでに含まれている場合があります。ファイルの最後にある新しい空白行にカーソルを移動し、以下を追加します。

3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status

上記は、毎時3分ごとにlogrotateコマンドを実行します。フルパス/usr/sbin/logrotateを使用します そのため、Commandnotfoundエラーは発生しません。

ファイルを保存して終了します。これによりcrontabがインストールされ、タスクは指定されたスケジュールで実行されます。

結論

このガイドではlogrotateについて説明しました。バージョンを確認し、デフォルトの構成を確認して、独自のカスタムセットアップをセットアップすることができました。 Logrotateで使用できるコマンドラインと構成オプションの詳細については、man logrotateを実行してマニュアルページを読むことができます。 ターミナルで:

man logrotate

Linux
  1. Linuxでの並べ替えコマンドと例

  2. 例を含む10以上のLinuxVIコマンド

  3. Linuxでのchattrコマンドと例

  1. 例を含むwcLinuxコマンド

  2. 例を含む10のクイックLinuxテールコマンド

  3. LinuxでLogrotateを使用してログファイルを管理する方法

  1. 17Linuxでの実用的な例を含む便利なtarコマンド

  2. LinuxのZipおよびUnzipコマンドと例

  3. Linuxipコマンドと例