正規表現を使ったWEBシナリオ監視について
はじめまして。
いつもフォーラムの記事には大変お世話になっております。
WEBシナリオの文字列監視で困ったことがあり、
自身では手に負えなくなってしまったので知恵をお貸しいただきたいです。
■環境
OS:Centos7
Zabbixバージョン:3.0
■やりたいこと
監視対象のWEBページに特定の文字(例:ランタイム)という文字があった場合、ステップをFailedにしたいです。
マニュアルではステップの要求文字列には正規表現が利用できるとことですが、
文字列”ランタイム”がない場合にマッチするよう以下の正規表現を設定してみたところ、
ページにランタイムと記載されていてもFailedになりませんでした。
^(?!.*(ランタイム)).*$
■考察と質問
①もしかしてですが、WEBシナリオの要求文字列で使える正規表現では否定の?!が使えないのでしょうか?
②もし使えない場合は、何か代替の記法や方法があるのでしょうか?
■余談
単純に検知だけであれば、ランタイムという文字列を常に監視し続けて、
「Failed step of scenario」が成功の0になった場合に発砲すればいいのですが、
常にWEBシナリオが失敗だとZabbixのログにずっと書き込まれ続けてしまうため、
それを避けるために上記のような監視がしたいです。
heya - 投稿数: 319
3.0 の段階では、Zabbix の正規表現はまだ POSIX 拡張正規表現なので、?! は使えません。
3.4 からは PCRE に変わったので、使えるはずです。
・・・ですが、「含まれない」という条件にしたいのであれば、カスタム正規表現(グローバル正規表現とも呼ばれます)を使えば簡単です。
管理→一般設定→正規表現 がそれです。
例:
名前:xxx
条件式:ランタイム
条件式の形式:文字列が含まれない
こんな感じで設定しておいて、Web 監視の要求文字列には @xxx と書く。
iranika - 投稿数: 4
返信ありがとうございます。
試しにカスタム正規表現でやってみましたが、だめでした。
その際の設定は下記です。
---------------------------------------------------
■カスタム正規表現の設定
名前:string
条件式:ランタイム
条件式の名前:文字列が含まれない
■WEBシナリオのステップの設定
URL:http://zabbix.iranika.info
※テスト用のページのURLです。
要求文字列:@string
返ってきたエラーの内容:required pattern "@string" was not found on http://zabbix.iranika.info
---------------------------------------------------
マニュアルを再度読み直したところ、どうやらZabbix3.0で要求文字列の項目ではカスタム正規表現が使えないよう思います。
https://www.zabbix.com/documentation/3.0/manual/web_monitoring
POSIXで否定表現が使えないとなると、
やはりZabbix3.0のWEBシナリオでは、文字列が含まれない場合に正常とすることはできないのでしょうか。
TNK - 投稿数: 4769
「要求文字列」の設定では、特定の文字列が返却されることを判断
することはできますが、「含まれない」時を正常と判断することは
できなかったと思います。
iranika - 投稿数: 4
返信ありがとうございます。
やはりZabbixのWEBシナリオ監視では含まれないときに正常と判断はできないのですね。
外部スクリプトなり別の手段を考えてみます。
■余談
「含まれない」時を正常と判断できれば、
AWSの障害情報サイトなどで障害ステータスになった際などに
異常検知ができたりと便利そうなので今後できるようになってほしいですね。
heya - 投稿数: 319
>マニュアルを再度読み直したところ、どうやらZabbix3.0で要求文字列の項目ではカスタム正規表現が使えないよう思います。
確かにそう書いてありますね。正規表現が使えるところならどこでも使えると思いこんでいました。
確認不足ですみませんでした。
というわけで、TNK さんが書かれた通り、無理ですね。残念ながら。
逆に、「ランタイム」と出ないときにだけ必ず含まれる文字列は無いのでしょうか?
もしあればそれを条件にすればいいんですけどね。
#まあ、無いからこういう質問になっているんだと思いますが・・・。
iranika - 投稿数: 4
ありがとうございます。
>逆に、「ランタイム」と出ないときにだけ必ず含まれる文字列は無いのでしょうか?
>もしあればそれを条件にすればいいんですけどね。
> #まあ、無いからこういう質問になっているんだと思いますが・・・。
おっしゃる通り、です。。。
外部スクリプトなり、別の方法でやってみようかなと思います。
ご協力頂きありがとうございました。