2017-01-18 12 views
1

Iログファイルaccess_20170118_14.logで次のログ行がある -POSIX正規表現のマッチング[:桁:]文字クラス

127.0.0.1 - - [18/Jan/2017:14:22:16 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.1" 200 168 "-" "curl/7.40.0" - 0.008 
127.0.0.1 - - [18/Jan/2017:14:22:24 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.0" 200 168 "-" "curl/7.40.0" - 0.008 

後は、これらのログの行を出力しnginxののlogwarnコマンドですHTTPアクセスコードが200と204以外のこのログファイルから取得します。

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx_access /mnt/log/nginx/access_20170118_14.log '!.*HTTP/1.(1|0)\"\s*(200|204)' 

上記のコマンドの正規表現は、期待どおり動作します。

しかし、HTTPバージョン1.0と1.1に一致するように追加された(1|0)を取り除き、任意の数字に置き換えて、どのバージョンのHTTPでも動作するようにしたいと考えています。

次のコマンド、[:digit:]文字クラスは、しかし、HTTPバージョン1.1と1.0での行と一致すると、アクセスコードを200 -

/usr/local/nagios/libexec/check_logwarn -d /tmp/logwarn_nginx_access /mnt/log/nginx/access_20170118_14.log '!.*HTTP/1.[:digit:]\"\s*(200|204)' 

(私が望むものではない)出力 -

Log errors: 127.0.0.1 - - [18/Jan/2017:14:22:16 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.1" 200 168 "-" "curl/7.40.0" - 0.008 
127.0.0.1 - - [18/Jan/2017:14:22:24 +0000] "GET //fam/shared_generate_test_devicelist.php HTTP/1.0" 200 168 "-" "curl/7.40.0" - 0.008 
+0

おそらくあなたは既に\ sを使用しているので、代わりに\ dを試すことができますか? –

+0

先頭の '!'は正規表現では何ですか? – sweaver2112

答えて

0

POSIX文字クラスは、正規表現文字クラス内で使用する必要があります。したがって、1桁は、次のように表すことができます。

[[:digit:]] 

二重角括弧に注意してください。詳細はthis documentを参照してください。

また、期間(私は推測)を表す裸の.があります。これは、リテラル期間を表すためにバックスラッシュを\.としてエスケープする必要があります。

+0

裸の '.'はどうにかして動いていました。方法はわかりません。とにかくそれを逃れました。 –

+0

また、この回答にお役立てください。http://stackoverflow.com/questions/41716338/modify-regex-match-in-nagios-logwarn-which-matches-against-string-to-not-match –