Redhat Linux サーバーで大きなログ ファイルを読み取る際の問題

Redhat Linux サーバーで大きなログ ファイルを読み取る際の問題

私の JBoss アプリケーション サーバーは、8 ~ 10 GB 程度のかなり大きなログ ファイルを生成します。これらのログ ファイルを RedHat Linux サーバーで表示するにはどうすればよいでしょうか?

答え1

split コマンドを使用してみてください。

split --bytes=100M <logfile> <logfile>

そして、ログ ファイルをもっと頻繁にローテーションしてください。そうしないことは凶悪な犯罪です。

答え2

私は通常、lessログ ファイルを表示するために使用します。巨大なログ ファイル (数ギガバイト) を表示できます。less圧縮されたログ ファイル ( で終わる) も表示できます.gz

特定のパターンをフィルタリングするためにも使用できますgrep

答え3

また、「head」を使用して最初の行をリストしたり、「tail」を使用してファイルの末尾をリストしたりすることもできます。「head」または「tail」の後に数字を追加すると、その行数が表示されます。

アラン

答え4

ここでも同様の問題があります (JBoss ではありませんが、ログファイルが大きい)。私が言えるのは、「grep はあなたの味方です」ということだけです。ログファイルは次のようなものだと思います。

Dec 27 08:14:35 hostname kernel: bnx2: eth1 NIC Copper Link is Up, 1000 Mbps full duplex
Dec 27 08:14:35 hostname kernel: eth2: Link is Up 1000 Mbps Full Duplex, Flow Control: None
Dec 27 08:14:35 hostname kernel: eth3: Link is Up 1000 Mbps Full Duplex, Flow Control: None
Dec 27 08:14:36 hostname pcscd: hotplug_libusb.c:402:HPEstablishUSBNotifications() Driver ifd-egate.bundle does not support IFD_GENERATE_HOTPLUG. Using active polling instead.

(これらは /var/log/messages ファイルから取得されますが、各エントリの前にタイムスタンプが付けられるという考え方です)。

ログファイルにタイムスタンプが埋め込まれていることを考えると、私が行うことは次のようになります。

grep '^`date "+%b %d"` 08:14' /my/log/file > /tmp/814amLog.txt

これは今日のタイムスタンプをgrepするだけです。つまり、

grep "^Dec 27 08:14" /my/log/file > /tmp/814amLog.txt

次に、814amLog.txt ファイルを less または vim -R で実行します。目的は、興味のある一口サイズのチャンクに分割することです。

最初の応答として与えられた split コマンドは使用可能ですが、私の経験では、かなり恣意的な結果が返されます。通常、私は「この時間について」何かが起こったことを探しています。そのため、日付と時刻による grep がより頻繁に使用されます。

cron ジョブのスクリプトを作成して、夜間にログファイルを grep して適切な場所に保存することができます。そのため、その場しのぎで実行する必要はありません。また、1 日以上前のログ ファイルを gzip 圧縮するジョブを作成することを強くお勧めします。節約できるディスク容量の大きさに驚くことでしょう。

関連情報