誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

3. 正規表現(PCRE)

Zabbix3.4から正規表現の処理が、拡張POSIXから、PCRE(Perl Compatible Regular Expressions)になりました。

これで、正規表現の柔軟性が高まることと、Webインターフェースで提供されていた正規表現のテスト機能と実際の動作が異なる、というケースも解消されそうです。

否定的先読み(除外する文字の定義)

以前のバージョンでは使うことができなかった否定的先読みを確認します。

Windowsのイベントログのチェックで、再起動を伴うWindowsアップデートや、更新のエラーを抽出するため、Zabbix Agentのアクティブチェックで以下のようなキー指定をします。

eventlog[SYSTEM,,,WindowsUpdateClient,^(?!.*(^19$|^27$)).*$]


^(?!.(^19$|^27$)).$の部分が、イベントIDをフィルタする正規表現です。19は(再起動を伴わない)更新の成功、27は更新の一時停止で、どちらも頻繁に発生します。

この正規表現で、WindowsUpdateClientというイベントソースから、イベントID 19と27を含まないイベントだけを監視データとして取り込むことができます。

f:id:Unam:20180109210246p:plain

Webインターフェースのテスト画面

正規表現のテスト画面でチェックした結果です。

19はFalse
f:id:Unam:20180109211128p:plain

119はTrue
f:id:Unam:20180109211239p:plain

念のため、外部のテストツールでも結果が同じことを確認。

https://regex101.com/ f:id:Unam:20180109212423p:plain

実際の監視データ

監視データも、期待通りの(イベントID 19と27を含まない)データが取得できました。

f:id:Unam:20180109212304p:plain

メリット

Zabbixの正規表現の場合、画面上の条件定義機能を使って、以下のように除外条件を設定し、
f:id:Unam:20180109225137p:plain

キーの中で正規表現名(@で始まる名称)を指定することで、対応することも可能です。

eventlog[SYSTEM,,,WindowsUpdateClient,@EVENT_FILTER]



ただこの方法だと、テンプレートでこのようなキー指定がされていると、ホスト毎に個別の設定をすることはできません。それよりも、キーの定義は以下のようにし、

eventlog[SYSTEM,,,WindowsUpdateClient,{$EVENT_FILTER}]


テンプレートマクロで正規表現を設定しておけば、ホスト毎に違う設定に変更する、ということも可能になります。
f:id:Unam:20180109230106p:plain