先の投稿で、例えば1時間前の(最新の1時間)のログだけ抽出する方法を説明しました。
Dos攻撃などに対しては、短時間のうちの異常なアクセスを検出して対応することが必要になります。
例えば、5分ごとに1分間に閾値を超えたアクセスを検出するような場合、時間を遡り繰り返しの処理が必要になります。プログラム的にはそう難しくはありませんが、先の1時間前を対象としたスクリプトを見直しスッキリしたもので対応しようと思いました。ただし、不等号が登場することはやむを得ません。時間単位なら等号(=)で00~59分までカバーできますが、分単位では等号(=)を使うと繰り返し処理にするしかありません。
今回、たった1行で分単位で遡ったログを抽出できる方法ができましたので備忘録として残しておきます。
対象ログはApacheのものにしますが何にでも応用は可能でしょう。
言語環境によっては月表示が異なりますので、LANG=Cをつけておきます。
コマンドラインから、次のように入力します。(例は10分前としています。実際には1行です。\で2行に表記)
LANG=C && awk '{if(substr($4,2,20)>=cftime){print $0}}'\
cftime=`date --date "10min ago" "+%d/%b/%Y:%H:%M:%S"` /var/log/apache2/access.log
この例ではログ全体を表示しますが、必要なものを各自で変更してください。($0の部分)
※コメント投稿者のブログIDはブログ作成者のみに通知されます