改行ありのメッセージを正規表現で登録する
イベントログの監視で以下のメッセージを除外設定する為に正規表現で登録しようと
したのですが、うまくいきません。
========================================
このディレクトリ パーティションは少なくとも次の日数の間、バックアップされていません。
ディレクトリ パーティション:
DC=XXXXXXXXXX,DC=XXXXXX,DC=XX
'バックアップ潜在期間' (日):
90
========================================
以下のように設定したのですが、うまくいきません。
「結果が真」で設定してもテストボタンを押しても「偽」と返ってきます。
「^このディレクトリ パーティションは少なくとも次の日数の間、バックアップされていません。\s\n\sディレクトリ パーティション:\s\nDC=XXXXXXXXXX,DC=XXXXXX,DC=XX」
アドバイスいただけないでしょうか。
KAZ - 投稿数: 1085
tomi12120321さん
Zabbixの正規表現の登録ですが改行使えないかと思います。
以下の3つをandで登録すれば、1つのメッセージに下記のキーワードが含まれる事になるかと…
「このディレクトリ パーティションは少なくとも次の日数の間、バックアップされていません。」
「ディレクトリ パーティション:」
「DC=XXXXXXXXXX,DC=XXXXXX,DC=XX」
ただ、アイテムのログ監視はログの1行を1回の取得として読み込みます。
「アプリの出力する1メッセージ=Zabbixの取得する1件の情報」にはなりません。
「アプリの出力する1メッセージを行単位に分解したもの情報=Zabbixの取得する1件の情報」となります。
その為、複数行を判定する正規表現を登録できたとしてもアイテムで設定しても意味ないかと…
tomi12120321 - 投稿数: 109
KAZさん
ご回答ありがとうございます!
試してみます。
1点確認させてください。
最新データを見ると、改行の状態でログメッセージが出ているのですが
実際には1行という扱いでZabbixに登録されているということでしょうか。
KAZ - 投稿数: 1085
tomi12120321さん
すいません、Windowsのイベントログの監視でしたね…
もしかして改行コードの違いが関係しているかもしれません。
Linuxは\x0AですがWindowsは\x0D\x0Aなので…
なんかそんな話あったような…それだったら3つの条件をandで繋げた正規表現登録して
アイテム監視のキーワードに入れれば絞り込めると思います。
heya - 投稿数: 319
こんにちは。
改行がどうこうというより、正規表現が間違っていると思います。
\s は空白文字一文字ですが、「~バックアップされていません。\s\n\sディレクトリ~」では、改行の前後に空白がそれぞれ一文字入る必要があります。
つまり、これでどうでしょうか。
「^このディレクトリ パーティションは少なくとも次の日数の間、バックアップされていません。\n\nディレクトリ パーティション:\nDC=XXXXXXXXXX,DC=XXXXXX,DC=XX」
試しに条件式を a\nb にして、テスト文字列を
a
b
にしてみると、真になりました。(Zabbix 2.2.9)
#柔軟性を持たせるために「0 個以上の空白」を追加するのであれば、\s ではなく \s* とすればいいと思います。
> なんかそんな話あったような…
ひょっとして、私が質問したこれですかね?これはトリガーの regexp なので少し違うかもしれませんが。
http://www.zabbix.jp/node/2395
あとはこっちか(これも微妙に違うかも)。
http://www.zabbix.jp/node/2587
以下、余談。
改行コードということを考えると、\n が CRLF にマッチするんですかね?そうでないと a\nb のテスト結果が真になる理由が説明できない気がする・・・。ちなみに、条件式を a\r\nb とするとテスト結果は偽になりました。
Web UI で登録したテスト文字列の改行部分は CRLF となっていたようですが(length(test_string) が 4 だった)、データベースを直接いじって改行部分を LF だけにしてみる(length(test_string) は 3 になった)と、やはりテスト結果は真でした(条件式は a\nb )。ということは、\n は CRLF でも LF でもマッチする???
さらに試しに、条件式を a\x0Ab としても、テスト文字列の改行が LF 、CRLF どちらの場合も真になりました。逆に a\x0A\x0Db とするとどちらも偽になりました。ひょっとして、パターンマッチの直前で改行を LF にしている?
まとめるとこんな感じ
↓テスト文字列の改行\条件式→ a\nb a\r\nb a\x0Ab a\x0A\x0Db
LF 真 偽 真 偽
CRLF 真 偽 真 偽
・・・この手の話は考えだすと混乱してきますね。試しにやってみて、できたらそれで OK と割り切ってしまうのがいいのかもしれません。
KAZ - 投稿数: 1085
heyaさん
フォローどうもです。m(__)m
正規表現が違っているかは意識になかったです。(。・ ω<)ゞてへぺろ
余談…
改行コードですが…
Winddows … CRLF
Linux … LF
Mac … LFCR
読む時に上記を意識してた筈で…
もしかすると読み込む時に全てLFに付け替えてるかもしれません。
※:2.2系の昔のソースの話で今時は変わっているかも…