質問: apache2:特定の時間範囲でapache2エラーログから文字列を検索する方法は? このようなログがあるので、文字列form1debugging from date [sun oct 01 04:26:29.593869 2017] to [tue oct 03 04:26:29.593869 2017][tue oct 03 04:26:29.593869 2017] [:error] [pid 28464] [client 127.0.0.1:47984] form1debugging----- contact email ........... 私はこれを試してみましたawk -vdate='date -d'now-48 hours' +[%d/%b/%y:%h:%m:%s '$1 > date {print date, $0}' error.logしかし、これらの日付範囲に数千のログがあるため、これは望ましい結果を与えていません。文字列「form1debugging」を検索して、指定されたタイムスパンでその文字列のログのみを提供する必要があります。どうすればこれを完了できますか?
回答: 推奨される答え に基づいて、簡単なスクリプトを作成しました。スクリプトには5つの入力変数があります。 $1-日付から(文字列から) $2-日付(文字列) $3-ログファイル、フルパスと名前 $4-検索される最初の文字列 $5-検索する2番目の文字列 スクリプトの内容は次のとおりです。#!/bin/bash # escape all special characters: "[", "]", ":", " ", "." s1="$(echo $1 | sed -e 's/\[/\\\[/g' -e 's/\]/\\\]/g' -e 's/\:/\\\:/g' -e 's/\ /\\\ /g' -e 's/\./\\\./g')" s2="$(echo $2 | sed -e 's/\[/\\\[/g' -e 's/\]/\\\]/g' -e 's/\:/\\\:/g' -e 's/\ /\\\ /g' -e 's/\./\\\./g')" s3="$3" s4="$(echo $4 | sed -e 's/\[/\\\[/g' -e 's/\]/\\\]/g' -e 's/\:/\\\:/g' -e 's/\ /\\\ /g' -e 's/\./\\\./g')" s5="$(echo $5 | sed -e 's/\[/\\\[/g' -e 's/\]/\\\]/g' -e 's/\:/\\\:/g' -e 's/\ /\\\ /g' -e 's/\./\\\./g')" [ ! -z "$s5" ] && s5=".*$s5" # crop the log file sudo sed -n "/$s1/,/$s2/p" "$s3" | grep --color=always "$s4$s5" スクリプトを呼び出しましょうcrop-logそして/usr/local/bin、したがって、シェルコマンドシステム全体として使用可能になります。sudo touch /usr/local/bin/crop-log sudo chmod +x /usr/local/bin/crop-log sudo nano /usr/local/bin/crop-log 上記のスクリプトのコンテンツをコピーして、nanoで使用します。 shift+insert ペースト用; ctrl+o そして enter 保存用; ctrl+x 終了します。 使用例:$ crop-log '[tue oct 03 07:35:08.000989 2017]' '04 07:35:07.663281' "/var/log/apache2/error.log" [tue oct 03 07:35:08.000989 2017] [mpm_prefork:notice] [pid 1622] ah00163: apache/2.4.18 (ubuntu) mod_python/3.3.1 python/2.7.12 openssl/1.0.2g mod_perl/2.0.9 perl/v5.22.1 configured -- resuming normal operations [tue oct 03 07:35:08.001011 2017] [core:notice] [pid 1622] ah00094: command line: '/usr/sbin/apache2' [wed oct 04 07:35:07.559898 2017] [mpm_prefork:notice] [pid 1622] ah00171: graceful restart requested, doing restart ah00558: apache2: could not reliably determine the server's fully qualified domain name, using 127.0.1.1. set the 'servername' directive globally to suppress this message' [wed oct 04 07:35:07.663176 2017] [:error] [pid 1622] python_init: python version mismatch, expected '2.7.6', found '2.7.12'. [wed oct 04 07:35:07.663275 2017] [:error] [pid 1622] python_init: python executable found '/usr/bin/python'. [wed oct 04 07:35:07.663281 2017] [:error] [pid 1622] python_init: python path being used '/usr/lib/python2.7/:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload'. $ crop-log 'oct 03 07:35:08' '04 07:35:07.663281' "/var/log/apache2/error.log" "[mpm_prefork:notice]" [tue oct 03 07:35:08.000989 2017] [mpm_prefork:notice] [pid 1622] ah00163: apache/2.4.18 (ubuntu) mod_python/3.3.1 python/2.7.12 openssl/1.0.2g mod_perl/2.0.9 perl/v5.22.1 configured -- resuming normal operations [wed oct 04 07:35:07.559898 2017] [mpm_prefork:notice] [pid 1622] ah00171: graceful restart requested, doing restart $ crop-log '03 07:35:08' 'oct 04 07:35:07.663281' "/var/log/apache2/error.log" "[mpm_prefork:notice]" "ah00171:" [wed oct 04 07:35:07.559898 2017] [mpm_prefork:notice] [pid 1622] ah00171: graceful restart requested, doing restart $ crop-log '-h--' '-z--' "/var/log/apache2/modsec_audit.log" '[id \"' message: access denied with redirection to https://www.youtube.com/watch?v=glmcgkvj-e0 using status 302 (phase 2). match of "ipmatchfromfile /web-security/modsecurity-ip-white.list" against "remote_addr" required. [file "/etc/apache2/mods-enabled/security2.conf"] [line "73"] [id "150"] message: access denied with redirection to https://www.youtube.com/watch?v=nb2evy0kmpq using status 302 (phase 2). match of "ipmatchfromfile /web-security/modsecurity-ip-white.list" against "remote_addr" required. [file "/etc/apache2/mods-enabled/security2.conf"] [line "73"] [id "150"] message: access denied with redirection to https://www.youtube.com/watch?v=z9uz1icjwrm using status 302 (phase 2). match of "ipmatchfromfile /web-security/modsecurity-ip-white.list" against "remote_addr" required. [file "/etc/apache2/mods-enabled/security2.conf"] [line "73"] [id "150"]