10 正規表現

概要

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

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

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

正規表現

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

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

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

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

グローバル正規表現

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

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

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

  • Administration > General に移動します
  • ドロップダウンから Regular expressions を選択します
  • New regular expression をクリックします

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
ディスカバリ用のファイルシステム ^(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 は「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[] はい はい はい 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 フィールド