正規表現

概要

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

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

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

正規表現

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

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

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

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

グローバル正規表現

Zabbixでは、複雑な正規表現を作成およびテストするための高度なエディターがWebインターフェースに用意されています。
アクセスするには、Administration > General > Regular expressions に移動します。
Zabbixには、デフォルトデータセットとして多数の事前定義されたグローバル正規表現が含まれています。

正規表現の一覧は、名前と説明でフィルタリングして、必要な式を見つけることができます。

設定

グローバル正規表現を作成するには、正規表現の作成 をクリックし、フォームに正規表現のパラメータを入力します。

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

Parameter Description
Name 正規表現名を設定します。Unicode 文字を使用できます。
Expressions Expressions セクションで Add をクリックして、新しいサブ式を追加します。
Expression type 式の種類を選択します:
Contains string - 部分文字列に一致します。
Contains any substring from list - 区切り記号で区切られたリスト内の任意の部分文字列に一致します。区切り記号には、カンマ ,、ドット .、またはスラッシュ / を使用できます。
Does not contain string - 部分文字列を除く任意の文字列に一致します。
Matches regular expression - 正規表現に一致します。
Does not match regular expression - 正規表現に一致しません。
Expression 部分文字列/正規表現を入力します。
最大長: 2048 文字。
Delimiter 正規表現内のテキスト文字列を区切るためのカンマ ,、ドット .、またはスラッシュ / です。このパラメータは、Contains any substring from list の式タイプが選択されている場合にのみ有効です。
Case sensitive 正規表現が大文字と小文字を区別するかどうかを指定するチェックボックスです。
Description 正規表現の説明を入力します。
Test expression 正規表現のテストに使用する値です。

式内のスラッシュ / は区切り記号ではなく、文字そのものとして扱われます。 これにより、スラッシュを含む式をエラーなく保存できます。

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

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

フォームのボタン

フォーム下部のボタンを使用して、さまざまな操作を実行できます。

ボタン 説明
正規表現を追加します。このボタンは、新しい正規表現に対してのみ使用できます。
正規表現のプロパティを更新します。
現在の正規表現のプロパティを基に、別の正規表現を作成します。
指定した値に対して、正規表現とそのサブ表現をテストします。
正規表現を削除します。
正規表現のプロパティの編集をキャンセルします。

正規表現のテスト

Test expression フィールドに値を入力し、Test ボタンをクリックすると、正規表現とその部分式をテストできます。

Test result 列には、各部分式のステータスが表示されます。
Combined result フィールドには、正規表現全体のステータスが表示されます。
複数の部分式が定義されている場合、Zabbix は論理 AND 演算子を使用して Combined result を計算します。つまり、少なくとも 1 つの結果が False の場合、Combined resultFalse になります。

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

デフォルトのデータセットには、次の事前定義されたグローバル正規表現が含まれます。

Name Expression Matches
File systems for discovery ^(btrfs|ext2|ext3|ext4|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|apfs|refs|ntfs|fat32|zfs)$ "btrfs" または "ext2" または "ext3" または "ext4" または "reiser" または "xfs" または "ffs" または "ufs" または "jfs" または "jfs2" または "vxfs" または "hfs" または "apfs" または "refs" または "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"。

正規表現のインポート/エクスポート

正規表現 のエクスポート/インポート設定ページで説明されているように、グローバル正規表現をインポートまたはエクスポートできます。

完全一致する文字列を除外する例

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

^TESTDATABASE$

Test resultCombined result の両方に FALSE が表示されます。名前が "TESTDATABASE" に一致するため、Does not match regular expression 条件は満たされません。

インライン正規表現修飾子を使用した大文字小文字を区別しない一致の例

次の正規表現を使用します。これは、文字列 "error" に対して大文字小文字を区別しない一致を行うためのインライン修飾子 (?i) を含んでいます。

(?i)error

Test resultCombined result の両方に TRUE が表示されます。これは、Case sensitive が選択されていても、インライン修飾子 (?i) により一致が大文字小文字を区別しなくなるため、文字列 "error" が一致するからです。

複数のインライン正規表現修飾子を使用する例

複数のインライン修飾子を含む次の正規表現を使用して、特定の行の後ろにある文字を一致させます。

(?<=match (?i)eveRything(?-i) after this line\r\n)(?sx).*# comment

ここで、各修飾子は次の意味を持ちます。

  • (?i) - 大文字小文字を区別しない一致を有効にする;
  • (?-i) - 大文字小文字を区別しない一致を無効にする;
  • (?s) - dotall モードを有効にし、. が改行文字にも一致するようにする;
  • (?x) - 拡張モードを有効にし、正規表現内の空白とコメントを無視できるようにする。

Test resultCombined result の両方で TRUE が表示されます。つまり、特定の行の後ろにある文字が一致しています。

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

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

Location Regular expression Global regular expression Multiline matching Comments
エージェントアイテム
eventlog[] Yes Yes Yes regexp, severity, source, eventid parameters
eventlog.count[] regexp, severity, source, eventid parameters
log[] regexp parameter
log.count[]
logrt[] Yes/No regexp parameter supports both, file_regexp parameter supports non-global expressions only
logrt.count[]
proc.cpu.util[] No No cmdline parameter
proc.get[]
proc.mem[]
proc.num[]
sensor[] Linux 2.4 の device および sensor パラメータ
system.hw.macaddr[] interface parameter
system.sw.packages[] regexp parameter
system.sw.packages.get[] regexp parameter
vfs.dir.count[] regex_incl, regex_excl, regex_excl_dir parameters
vfs.dir.get[] regex_incl, regex_excl, regex_excl_dir parameters
vfs.dir.size[] regex_incl, regex_excl, regex_excl_dir parameters
vfs.file.regexp[] Yes regexp parameter
vfs.file.regmatch[]
web.page.regexp[]
SNMPトラップ
snmptrap[] Yes Yes No regexp parameter
アイテム値の前処理 Yes No No pattern parameter
トリガー/計算アイテム用関数
count() Yes Yes Yes operator パラメータが regexp または iregexp の場合は pattern パラメータ
countunique() Yes Yes
find() Yes Yes
logeventid() Yes Yes No pattern parameter
logsource()
低レベルディスカバリ
Filters Yes Yes No Regular expression field
Overrides Yes No In matches, does not match options for Operation conditions
アクション条件 Yes No No In matches, does not match options for Host name and Host metadata autoregistration conditions
スクリプト Yes Yes No Input validation rule field
Web監視 Yes No Yes regex: プレフィックス付きの Variables
Required string field
ユーザーマクロのコンテキスト Yes No No regex: プレフィックス付きのマクロコンテキスト
マクロ関数
regsub() Yes No No pattern parameter
iregsub()
マップ内のリンクインジケーター Yes No No Pattern field (for text items)
アイコンマッピング Yes Yes No Expression field
値のマッピング Yes No No マッピングタイプが regexp の場合の Value field
エージェント設定パラメータ
AllowKeyRegexp Yes No No Pattern
DenyKeyRegexp