正規表現

概要

Perl Compatible Regular Expressions (PCRE, PCRE2) は Zabbix でサポートされています。

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

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

正規表現

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

正規表現を使用すると、スタックメモリが不足する可能性があります。
詳細は PCRE PERFORMANCE を参照してください。

マルチライン一致では、^$ のアンカーは文字列全体の先頭/末尾ではなく、それぞれ各行の先頭/末尾に一致することに注意してください。

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

グローバル正規表現

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

この方法で正規表現を作成すると、@ を前置した名前で参照することで、Webインターフェース内の複数の場所で使用できます。たとえば、@mycustomregexp です。

グローバル正規表現を作成するには、次の手順を実行します。

  1. 管理 > 一般 に移動します。
  2. ドロップダウンから 正規表現 を選択します。
  3. 新しい正規表現 をクリックします。

Expressions タブでは、正規表現名の設定とサブ式の追加を行えます。

必須入力フィールドには赤いアスタリスクが表示されます。

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

式内のスラッシュ (/) は区切り文字ではなく、リテラルとして扱われます。 このため、スラッシュを含む式でもエラーなく保存できます。

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

Test タブでは、テスト文字列を指定して正規表現とそのサブ式をテストできます。

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

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

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

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

Name Expression Matches
File systems for discovery ^(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"
Network interfaces for discovery ^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" で始まり、その後ろに数字またはドットが任意の個数続く文字列。
Storage devices for SNMP discovery ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ "Physical memory" または "Virtual memory" または "Memory buffers" または "Cached memory" または "Swap space"
Windows service names for discovery ^(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 service startup states for discovery ^(automatic|automatic delayed)$ "automatic" または "automatic delayed"

例 1

低レベルディスカバリで、特定の名前のデータベースを除外してデータベースを検出するために、次の式を使用します。

^TESTDATABASE$

regexp\_expr\_2.png

選択した Expression type は「Result is FALSE」です。名前に一致せず、文字列 "TESTDATABASE" を含みません。

インライン正規表現修飾子を使用した例

以下の正規表現では、インライン修飾子 (?i) を使用して文字列 "error" に一致させます。

(?i)error

regexp\_expr\_3a.png

選択した Expression type: "Result is 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

選択した式の種類: "Result is TRUE"。 特定の行の後ろにある文字が一致します。

g 修飾子は行内で指定できません。 使用可能な修飾子の一覧は pcresyntax man page で確認できます。 PCRE の構文の詳細については、PCRE HTML documentation を参照してください。

場所別の正規表現サポート

場所 正規表現 グローバル正規表現 複数行マッチング コメント
エージェントアイテム
eventlog[] Yes Yes Yes regexpseveritysourceeventid パラメータ
eventlog.count[] regexpseveritysourceeventid パラメータ
log[] regexp パラメータ
log.count[]
logrt[] Yes/No regexp パラメータは両方をサポートし、file_regexp パラメータは非グローバル正規表現のみをサポート
logrt.count[]
proc.cpu.util[] No No 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[] Yes regexp パラメータ
vfs.file.regmatch[]
web.page.regexp[]
SNMPトラップ
snmptrap[] Yes Yes No regexp パラメータ
アイテム値の前処理 Yes No No pattern パラメータ
トリガー/計算アイテム用関数
count() Yes Yes Yes operator パラメータが regexp または iregexp の場合は pattern パラメータ
countunique() Yes Yes
find() Yes Yes
logeventid() Yes Yes No pattern パラメータ
logsource()
低レベルディスカバリ
Filters Yes Yes No Regular expression フィールド
Overrides Yes No Operation 条件の matchesdoes not match オプション内
アクション条件 Yes No No Host name および Host metadata の自動登録条件における matchesdoes not match オプション内
スクリプト Yes Yes No Input validation rule フィールド
Web監視 Yes No Yes regex: プレフィックス付きの Variables
Required string フィールド
ユーザーマクロのコンテキスト Yes No No regex: プレフィックス付きのマクロコンテキスト内
マクロ関数
regsub() Yes No No pattern パラメータ
iregsub()
マップ内のリンクインジケーター Yes No No Pattern フィールド(テキストアイテム用)
アイコンマッピング Yes Yes No Expression フィールド
値のマッピング Yes No No マッピングタイプが regexp の場合の Value フィールド
エージェント設定パラメータ
AllowKeyRegexp Yes No No Pattern
DenyKeyRegexp