データを失うことなくシステムログをより小さなファイルに分割する方法

データを失うことなくシステムログをより小さなファイルに分割する方法

syslogここでは、ファイルをより小さな塊に分割しようとしています。これを行うには、次のスクリプトを使用します。

#!/bin/bash
date=$(date +%Y%m%d_%H%M)
 
cp /path/to/sys.log /path/to/chuck/file.log
cat /dev/null > /path/to/sys.log

cp /path/to/chuck/file.log /path/to/chuck/file_"$date".log
cat /dev/null > /path/to/chuck/file.log

スクリプトは5分ごとに実行され、それをsyslogより小さなログに分割して追加の処理に使用します。問題は、元のファイルとチャンクファイル
にいくつかの履歴がありません。syslogこの問題を解決する方法はありますか?

ここでチャンクファイルは約2GBです。syslog成長しています。

ベストアンサー1

警告する:これは小さな最大サイズとimfile入力モジュールがあったため、バージョン8.2002では完全には機能しませんでした。一部のデータはログファイルから失われますが、ドキュメントでは通常小さなバッファサイズはサポートされていないことを警告します。


rsyslogを使用すると、ログファイルが特定のサイズを超えると回転する組み込みメカニズムが提供されます。あなたはただ チャンネル、ファイル名、最大サイズ、サイズを超えた場合に実行するスクリプト名を指定します。それから 使用 ファイル名の代わりにフィルタのチャネル名です。

たとえば、ファイル/home/me/rotatescriptが作成された50Mibytesを超えるとスクリプトを実行するには、/var/log/mylog次の名前のチャンネルを作成しますmylogrotatechan

$outchannel mylogrotatechan,/var/log/mylog,52428800,/home/me/rotatescript

そして*.* /var/log/mylogに交換

*.* :omfile:$mylogrotatechan

文書化されていないRainerScript構文を使用する最新のソース(2023年1月)には、テストスクリプトもあります。

action(type="omfile" file="/var/log/mylog" rotation.sizeLimit="52428800"
       rotation.sizeLimitCommand="/home/me/rotatescript")

一般的なスクリプトは次のとおりです。

#!/bin/bash
mv /var/log/mylog /var/log/mylog.$(date +%Y%m%d.%H%M%S)

おすすめ記事