ログファイルのパターンを探してgrepを実行しようとしていますが、ログファイルの最後の1時間が必要です。 tail -n XXは機能しません。これが可能かどうか誰かが知っていますか?ある種の「ログファイルから書き込まれた過去1時間の行」を末尾に追加)
コマンドや手順がある場合は、感謝します。
どうもありがとう
ログの構造が次のとおりだとします。
219.369.42.449 - - [05/Mar/2020:11:05:17 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:11:06:37 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:01:14 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:07:23 +0200] "log line"
次のようにsed
を使用すると、ファイルの最初の05/Mar/2020:11
から最後の$
までのすべての行を取得できます。
sed -n '/05\/Mar\/2020:11/,$p' "/path/to/file.log"
オプション-n
はsed
の通常の出力を抑制しますが、フラグp
はファイルの一致した部分を出力します。
05/Mar/2020:11
に対応するレコードが提示されていない場合、sed
は出力を提供しません。
コマンドdate
およびeval
を使用して、上記を自動化できます。
COMMAND="sed -n '/$(LANG=C date --date='1 hour ago' "+%d\/%b\/%Y:%H")/,\$p'"
eval $COMMAND \"/path/to/file.log\"
sed
を使用すると、望ましい出力が得られません。eval
を使用して実際のコマンドに変換します。LANG=C
(LANG=en_us_88591
)は、希望する日付形式を取得するために立っています。たとえば、私の場合、この環境変数のデフォルト値はbg_BG.UTF-8
です。上記の2行に基づいてスクリプトを作成できます-そのようなスクリプトの例:
modsecurity-whitelist-rule-generator.bash
-ModSecutityのmodsec_audit.log
内のeventsを解析するtheir unique-id、ModSecutityのホワイトリストルールを生成します。
過去1時間の変更を追跡するコマンドやオプションはありません。ログのタイムスタンプをgrepするか、tail -f
実行していて、何かをチェックする必要があるときは、スクロールして戻ります。これには、61分前に発生したイベントをキャッチできるという利点もあります。
5分ごとにコマンドを実行する場合は、ログファイルのコピーも作成します。次に、作成した12番目の最後のコピーと比較して、現在の変更を取得できます。
私が通常取るアプローチは次のとおりです。
tail -f {log}
これには、{log}への書き込み時にテールショーメッセージが表示され、コマンドを停止したときにのみ終了します。したがって、表示されるのはリアルタイムであり、論理的には常に現在の1時間以内です。端末セッションのバッファサイズは、時間を遡ってスクロールできるサイズになります。
@ pa4080がちょうど1時間前に取得していた日付コマンドを使用します。これをawkスクリプトに渡して、正しい年、月、日、および一致する時間とそれ以上の分またはそれ以上の時間を含む最初の行を見つけます。最初の行からファイルの終わりまでの出力。
私のawkはそれほど強くないか、あなたのために書こう。うまくいけば、他の誰かがあなたのためのawkマスターになるでしょう。
皆様、本当にありがとうございました。監視ツールであるZabbixを使用して問題を処理できました。
@ pa4080そのスクリプトは次のオプションです。どうも
この質問を締めくくることができます。