カスタム正規表現におけるIPアドレスの表現方法について

お世話になっております
使用環境----------
Zabbix Version: 3.2.4
OS Version: CentOS: 7.2.1511
----------------------

■前提条件
ログ監視で出力されるログにIPアドレスが付記されるのですが、
その該当するネットワークアドレスについて監視を除外したく
カスタム正規表現で制御できないかと検討していますが、うまく
いかないのですが何かお知恵はございませんでしょうか

■ZABBIX監視設定
アイテムでログ監視するアイテムを作成。
log[<監視ログファイル名>,<正規表現で規定した名前>,UTF8]

トリガでログで新たな行が追加された場合にトリガを発生させる
ものを作成しています。
{<hostname>:log[<監視ログファイル名>,<正規表現で規定した名前>,UTF8].nodata(30)}<>1

■カスタム正規表現の設定
この前提から正規表現で
[管理]→[一般設定]→[正規表現]から
名前:<正規表現で規定した名前>
で定義したもので「結果が偽」の際を監視対象外としようとしています

たとえばIPアドレスが10.0.0.1/12のようなネットワークのIPアドレスの
入ったログを監視しないということにしようとすると、ホストアドレス
は「10.0.0.1~10.15.255.254」となります
私が考えた正規表現の書き方では

10.[0-9]|1[0-5].[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4].[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4].*

としましたが、第三および第四オクテットの表現が拙いのかうまくテスト
をしたところですべて偽となってしまいます。
本来、第一オクテットおよび第二オクテットだけの表現
10.[0-9]|1[0-5].*
でも問題ないかと思うのですが、IPアドレス以外の数字表現で引っかかること
を恐れているので、第四オクテットまできちんとした形で表現をフィルタしたい
と考えています。

■お知恵を拝借したい内容
そこで
上記の正規表現はいろいろなWebサイトを見てorで繰り返しておりますが
この表現では間違いなのか、間違いならどうすればよいのか
あとIPアドレスを表示する際の「.」文字が正規表現でワイルドカード式の「?」
文字と同等の扱いになっていないか、その場合の回避方法をご教示
いただければ幸甚です

お知恵がございましたらなにとぞよろしくご教示のほどお願いします

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

どこまで厳密に設定するかですが、以下のような正規表現でもある
程度チェックできるかもしれません。

10\.([0-9]{1}|1[0-5]{1})\.[0-9]+\.[0-9]+

ユーザー HERCULY の写真

TNKさま

ありがとうございます
この方法で制御が可能でした。

追加でご質問させていただきたいのですが、
第三オクテットおよび第四オクテットについてもは0-255までで
範囲指定したいと思っています
(小生的にはそこまでする必要はあるのかなと疑問なのですが、
どうしてもやりたいということらしいので)

で、第三オクテットと第四オクテットについては
0~9:[0-9]{1}
10-99:[1-9]{1}[0-9]{1}
100~199:1[0-9]{2}
200~249:2[0-4]{1}[0-9]{1}
250~255:25[0-5]{1}
と区切り

<第二オクテット以前>\.([0-9]{1}|[1-9]{1}[0-9]{1}|1[0-9]{2}|2[0-4]{1}[0-9]{1}|25[0-5]{1})\.([0-9]{1}|[1-9]{1}[0-9]{1}|1[0-9]{2}|2[0-4]{1}[0-9]{1}|25[0-5]{1})

となるかなと考えています。ただ、これではテストで間違いが出たので
どうかと考えています。

範囲を指定した数値の指定はどのように考えるべきなので
しょうか。皆様のお知恵を拝借いたしたく再びよろしくお願いします

ユーザー yk_taiko の写真

どう間違いが出たのかわからないのでその部分は置いといて、、、

ログ上で IP の後ろに入る内容(スペースとか末尾指定とか) まで指定してあげないと、第4オクテットの判定がちゃんと動作しないと思います。
ログの前方部分も指定してあげたほうが良いです。
(例えば第1オクテットが 110. とか 210. とかも引っかかるかと)

ユーザー HERCULY の写真

yk_taikoさま

お世話になっております
ログ上でIPアドレスの末尾については不定の記号や文字が入るために「.*」で最後は締めております
それでもなぜか第三オクテットも第四オクテットも255以上の数字を入れると「結果が偽」となります

お尋ねの件については取り急ぎご報告します

ユーザー yk_taiko の写真

第三オクテットが偽となる原因はいまいちわかりませんが、
第四オクテットは IP の後ろの文字が入っていない為だと思います。
第四オクテットの指定の「\.([0-9]{1}|」が、1桁でも数字が来たら合致しちゃいますので
例えば "10.1.1.1234" でも "10.1.1.1" の部分で拾われます

ユーザー heya の写真

あまり関係ないんですが、 {1} って、要らなくないですか?
あと、最後に .* をつける必要はありませんよ。
「ログが指定したパターンを含んでいるかどうか」であって、「ログの全体(先頭から末尾まで)が指定したパターンに一致しているかどうか」ではないので。

第4オクテットの終わりを示すなら、最後の部分を ~|25[0-5])[^0-9]? のようにすればいいと思います。「第4オクテットの後に数字以外が続く」とするのです(アドレスで終わることが無いのであれば最後の ? は不要)。

ユーザー HERCULY の写真

お世話になっております

自己解決というか皆様のご指摘等で以下のようにして運用することで
決まりそうです

■前提条件の追加
ログに出力されるIPアドレスはsnmptrapからperlで整形した後にログとして
ログファイルに出力されるためログは定型です
ex)
~<IPアドレス>:~
※~についてはメッセージなどの一定のメッセージ

■カスタム正規表現の設定
この前提から正規表現で
[管理]→[一般設定]→[正規表現]から
名前:<正規表現で規定した名前>
で定義したもので「結果が偽」の際を監視対象外としようとしています

たとえばIPアドレスが10.0.0.1/12のようなネットワークのIPアドレスの
入ったログを監視しないということにしようとすると、ホストアドレス
は「10.0.0.1~10.15.255.254」となりますので

10\.([0-9]|1[0-5])\.(\d{1,3})\.(\d{1,3}):
※IPアドレスの末尾は必ず「:」なので「:」をつけました

で取るとうまく検証できました

みなさまありがとうございました

ユーザー heya の写真

そのパターンだと「第1オクテットは必ず100未満」という前提でもない限り、例えば 110.1.1.1 のようなアドレスもマッチして(つまり監視対象外になって)しまいます。先頭部分にも : のような決まった文字があるなら、それを書いておいた方がいいですよ。

ユーザー HERCULY の写真

heyaさん

ありがとうございます
少々説明不足でしたが、IPアドレスの前には定型の単語が入りますので
そこまでを範囲としています。

つまり
~<定型単語><IPアドレス>:~

の構文がログの基本となります。<定型単語>までしっかり書けばよいので
これでいこうと思います。
ご指摘ありがとうございました