10 正規表現

概要

Perl互換の正規表現 (PCRE、PCRE2)がZabbixでサポートされています。

Zabbixで正規表現を使用するには2つの方法があります。

  • 正規表現を手動で入力する
  • Zabbixで作成したグローバルな正規表現を使用する。

正規表現

サポートされている場所に正規表現を手動で入力することができます。 ただし、Zabbixでは@記号がグローバル正規表現を参照するために使用されているため、式の先頭に@を付けることはできません。

正規表現を使用するとスタックが不足する可能性があります。 詳細については pcrestack manページ を参照してください。

複数行マッチングでは、^ および $ のアンカーはそれぞれ各行の先頭/末尾にマッチし、文字列全体の先頭/末尾にはマッチしないことに注意してください。

さまざまなコンテキストでの正しいエスケープの例も参照してください。

グローバル正規表現

ZabbixのWebインターフェースには、複雑な正規表現を作成およびテストするための高度なエディターがあります。

この方法で正規表現を作成すると、名前の先頭に @ を付けて参照することで、Webインターフェース内の複数の場所で使用できます。例えば、\@mycustomregexp のように指定します。

グローバル正規表現を作成するには:

  • 管理 → 一般 に移動します
  • ドロップダウンから 正規表現 を選択します
  • 新しい正規表現 をクリックします

タブでは、正規表現名の設定とサブ式の追加ができます。

必須入力フィールドには、すべて赤いアスタリスクが付いています。

Parameter Description
Name 正規表現名を設定します。任意のUnicode文字を使用できます。
Expressions Expressionsブロックで 追加 をクリックして、新しいサブ式を追加します。
Expression type 式の種類を選択します:
文字列を含む - 部分文字列に一致
任意の文字列を含む - 区切り文字付きリスト内の任意の部分文字列に一致します。区切り文字付きリストには、コンマ (,) 、ドット (.) 、またはスラッシュ (/) を使用します。
文字列を含まない - その部分文字列以外の任意の文字列に一致
結果がTRUE - 正規表現に一致
結果がFALSE - 正規表現に一致しない
Expression 部分文字列/正規表現を入力します。
Delimiter 正規表現内の文字列を区切るためのコンマ (,) 、ドット (.) 、またはスラッシュ (/) です。このパラメータは、"任意の文字列を含む" の式の種類が選択されている場合にのみ有効です。
Case sensitive 正規表現で英字の大文字・小文字を区別するかどうかを指定するチェックボックスです。

式内のスラッシュ (/) は区切り文字ではなく、文字どおりに扱われます。これにより、スラッシュを含む式もエラーなく保存できます。

Zabbixのカスタム正規表現名には、 コンマやスペースなどを含めることができます。そのような場合、参照時に誤解釈される可能性がある箇所では(例えば、アイテムキーのパラメータ内にコンマがある場合)、参照全体を次のように引用符で囲むことができます:"\@My custom regexp for purpose1, purpose2"
正規表現名は、他の場所では引用符で囲んではいけません(例えば、LLDルールのプロパティ内など)。

テスト タブでは、テスト文字列を入力して、正規表現およびそのサブ式をテストできます。

結果には、各サブ式のステータスと、カスタム式全体のステータスが表示されます。

カスタム式全体のステータスは Combined result として定義されます。複数のサブ式が定義されている場合、Zabbixは Combined result の計算にAND論理演算子を使用します。つまり、少なくとも1つの結果がFalseであれば、Combined result もFalseになります。

デフォルトのグローバル正規表現

Zabbixには、デフォルトのデータセットにいくつかのグローバル正規表現が含まれています。

名前 一致する内容
ディスカバリ用ファイルシステム ^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$ "btrfs" または "ext2" または "ext3" または "ext4" または "jfs" または "reiser" または "xfs" または "ffs" または "ufs" または "jfs" または "jfs2" または "vxfs" または "hfs" または "refs" または "apfs" または "ntfs" または "fat32" または "zfs"
ディスカバリ用ネットワークインターフェース ^Software Loopback Interface "Software Loopback Interface"で始まる文字列
^lo$ "lo"
^(In)?[Ll]oop[Bb]ack[0-9._]*$ 任意で"In"で始まり、次に"L"または"l"、"oop"、"B"または"b"、"ack"が続き、その後に任意の桁数の数字、ドット、アンダースコアが続く文字列
^NULL[0-9.]*$ "NULL"で始まり、その後に任意の桁数の数字またはドットが続く文字列
^[Ll]o[0-9.]*$ "Lo"または"lo"で始まり、その後に任意の桁数の数字またはドットが続く文字列
^[Ss]ystem$ "System"または"system"
^Nu[0-9.]*$ "Nu"で始まり、その後に任意の桁数の数字またはドットが続く文字列
SNMPディスカバリ用ストレージデバイス ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ "Physical memory" または "Virtual memory" または "Memory buffers" または "Cached memory" または "Swap space"
ディスカバリ用Windowsサービス名 ^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$ "MMCSS" または "gupdate" または "SysmonLog" または "clr_optimization_v2.0.50727_32"や"clr_optimization_v4.0.30319_32"のような文字列(ドットの代わりに改行以外の任意の文字を入れることができる)
ディスカバリ用Windowsサービスの起動状態 ^(automatic|automatic delayed)$ "automatic" または "automatic delayed"

例 1

低レベルの検出で次の式を使用すると、特定の名前のデータベース以外を検出できます。

^TESTDATABASE$

regexp_expr_2.png

選択されたExpression type : "結果はFALSE "です。"TESTDATABASE" を含んだ名前と一致しません。

インライン型正規表現修飾子を含む例

インラインモディファイアを含む次の正規表現を使用します。
(?i) を使用して、"error" という文字にマッチさせます。

(?i)error

regexp_expr_3a.png

選択されたExpression type : "結果はTRUE "です。文字 "error "にマッチする。

インライン正規表現修飾子を含む別の例

複数のインライン修飾子を含む次の正規表現を使用すると、特定の行以降の文字にマッチします。

(?<=match (?i)everything(?-i) after this line\n)(?sx).*# we add s modifier to allow .match newline characters

regexp\_expr\_4\_new.png

選択されたExpression type : "結果はTRUE "です。
特定の行以降の文字にマッチします。

g修飾子は、行内で指定することはできません。利用可能な修飾子の一覧は
利用可能な修飾子のリストは、pcresyntax manpageにあります。
PCRE の構文に関するより詳しい情報は PCRE HTML documentation を参照してください。

場所ごとの正規表現サポート

場所 正規表現 グローバル正規表現 複数行マッチング コメント
エージェントアイテム
eventlog[] はい はい はい regexpseveritysourceeventid パラメータ
eventlog.count[] regexpseveritysourceeventid パラメータ
log[] regexp パラメータ
log.count[]
logrt[] はい/いいえ regexp パラメータは両方をサポートし、file_regexp パラメータは非グローバル式のみをサポート
logrt.count[]
proc.cpu.util[] いいえ いいえ cmdline パラメータ
proc.get[]
proc.mem[]
proc.num[]
sensor[] Linux 2.4 の device および sensor パラメータ
system.hw.macaddr[] interface パラメータ
system.sw.packages[] regexp パラメータ
system.sw.packages.get[] regexp パラメータ
vfs.dir.count[] regex_inclregex_exclregex_excl_dir パラメータ
vfs.dir.get[] regex_inclregex_exclregex_excl_dir パラメータ
vfs.dir.size[] regex_inclregex_exclregex_excl_dir パラメータ
vfs.file.regexp[] はい regexp パラメータ
vfs.file.regmatch[]
web.page.regexp[]
SNMPトラップ
snmptrap[] はい はい いいえ regexp パラメータ
アイテム値の前処理 はい いいえ いいえ pattern パラメータ
トリガー/計算アイテム用関数
count() はい はい はい operator パラメータが regexp または iregexp の場合の pattern パラメータ
countunique() はい はい
find() はい はい
logeventid() はい はい いいえ pattern パラメータ
logsource()
ローレベルディスカバリ
フィルター はい はい いいえ Regular expression フィールド
オーバーライド はい いいえ Operation 条件の matchesdoes not match オプション内
アクション条件 はい いいえ いいえ Host name および Host metadata の自動登録条件の matchesdoes not match オプション内
スクリプト はい はい いいえ Input validation rule フィールド
Web監視 はい いいえ はい regex: 接頭辞付きの Variables
Required string フィールド
ユーザーマクロコンテキスト はい いいえ いいえ regex: 接頭辞付きのマクロコンテキスト内
マクロ関数
regsub() はい いいえ いいえ pattern パラメータ
iregsub()
マップ内のリンクインジケーター はい いいえ いいえ Pattern フィールド(テキストアイテム用)
アイコンマッピング はい はい いいえ Expression フィールド
値のマッピング はい いいえ いいえ マッピングタイプが regexp の場合の Value フィールド