ログ監視に役立つZabbix正規表現の使い方

こんにちは。SCSK株式会社の上田です。

今回は、Zabbixの監視で利用できる”正規表現“という機能の使い方を紹介します。正規表現を使うことで、複雑な条件にマッチするログの監視をすることが可能です。

正規表現とは

正規表現とは、文字列のパターンを表現するための記法です。特定の文字列を検索したり、置換したりする際に使われます。

例えば、電話番号やメールアドレスのフォーマットに一致する文字列を抽出したり、
Sysログ等の大量の文字列の中から特定のキーワードを含む行を検索したりするときに、正規表現が使われます。

Zabbixにおける正規表現

Zabbixでは、Perl互換の正規表現(PCRE、PCRE2)がサポートされています。これにより、柔軟なパターンマッチングが可能になっています。

Zabbixで主に使用される正規表現をいくつか紹介します。

正規表現 意味
. 任意の一文字
* 直前の文字の0回以上の繰り返し
+ 直前の文字の1回以上の繰り返し
? 直前の文字の0回または1回の出現
^ 行の先頭
$ 行の末尾
[abc] a,b,cのいずれか一文字
[^abc] a,b,c以外
| いずれかの文字列に一致
\ エスケープ文字(直後の文字を、正規表現ではなく普通の文字列とする)

これらを組み合わせることによって、文字列のパターンを表現します。
とはいえ、この表だけではピンとこないと思いますので、いくつか例を挙げてみます。

  • .*】は、任意の一文字それの0回以上の繰り返しということで、任意の0文字以上の文字列を表します。
  • ^zabbix.*test$】という正規表現は、zabbix”で始まり”test”で終わる行を表します。
  • \[hoge\]】という正規表現は、“[hoge]”という文字列を表します。ここで、“[]”はそのままだと正規表現文字のため、“[]”という文字自体にマッチさせたい場合はエスケープ文字の”\“を使います。もしエスケープ文字が無ければ、h,o,g,eのいずれか一文字とマッチしてしまいます。

Zabbixでの正規表現の設定方法

ここまで正規表現とは何かについて説明してきました。続いてZabbixで正規表現を使う方法について説明します。
Zabbixでは、アイテムキーに直接正規表現を書き込んだりユーザーマクロで正規表現を使ったり、いろいろな場所で正規表現を使えます。
今回は、その中からグローバル正規表現の使い方を説明します。グローバル正規表現の設定画面では、ある文字列が作成した条件式にマッチするかのテストが実施できるので、正しく正規表現が書けているかチェックできて便利です。

グローバル正規表現の設定方法

グローバル正規表現設定画面を開くには、ZabbixのWEBコンソールから【管理 >一般設定 >正規表現】と選択します。

正規表現の設定画面

正規表現の設定画面

デフォルトでいくつか正規表現が作成されています。
新しく正規表現を作成するために、右上のボタンをクリックします。

正規表現の作成画面

正規表現の作成画面

このような設定画面が開きます。
「文字列が含まれる」「いずれかの文字列が含まれる」「文字列が含まれない」は、その名の通り入力した文字列が含まれるか含まれないかの条件を追記できます。
「結果が真」「結果が偽」を選択すると、正規表現を使うことができます。

ここで、先ほど例示した正規表現を条件式に書いてみましょう。

条件式作成後の画面

条件式作成後の画面

これで、【^zabbix.*test$】にマッチし、かつ【\[hoge\]】にマッチしない という条件の正規表現が作成できました。
想定通りの条件になっているかテストしてみましょう。

以下の3つの文字列を考えます。

 1:zabbixにおける正規表現のtest
 2:zabbixにおける正規表現のtestです。
 3:zabbixにおける[hoge]のtest
これらは、作成した正規表現にマッチするでしょうか?

1は、【^zabbix.*test$】にマッチし、かつ【\[hoge\]】にマッチしないので、マッチします。

※最終結果が真ならマッチしている、偽ならマッチしていないことを表します。

テスト①

テスト①

 

2は、【^zabbix.*test$】にマッチしないので、マッチしません。

テスト②

テスト②

 

3は、【^zabbix.*test$】にマッチしますが、【\[hoge\]】にもマッチするので、マッチしません。(hogeのテストって何だろう。。。)

テスト③

テスト③

トリガー条件式への正規表現の適用

これで正規表現が作成できたので、これをトリガー条件式に適用してみましょう。
正規表現を使いたいトリガーの設定画面を開きます。条件式に、以下のように記入します。
find (/host/key,,”regexp”,”@正規表現名”)
find関数は、アイテムから一致する値を見つける関数です。
通常では、第1パラメーターにホスト名とアイテムキーを指定し、第4パラメータに一致させたい値を入力しますが、第3パラメータに“regexp”を指定することで、第4パラメータで正規表現が使用できます。
第4パラメータに直接正規表現を書き込むこともできますが、作成したグローバル正規表現を指定するときは、頭に“@”を付けてグローバル正規表現名を指定します。

今回は、ホスト「Zabbix server」の/var/log/messagesを監視するアイテムに対してトリガーを設定してみます。

トリガーの設定画面

トリガーの設定画面

これで、作成した正規表現に一致するログが出力されたら障害を検知するトリガーが作成できました。

障害検知テスト

実際にログを出力させてみて、障害検知するか確認してみましょう。
監視対象ログに、正規表現に一致するログを出力させてみます。

# echo zabbixにおける正規表現のtest >> /var/log/messages

出力したログが、アイテムとして取得されると。。。

ログアイテムの取得状況

ログアイテムの取得状況

想定通り、障害検知しました!

障害検知結果

障害検知結果

まとめ

今回は、Zabbixにおける正規表現の使い方と、ログ監視への適用方法をまとめました。今回は簡単な正規表現を作ってテストしましたが、うまく活用すればより複雑な条件で検知したいログを絞ることが可能です。
複雑なログ監視のやり方については、別記事でまとめておりますのでそちらも是非ご覧ください。

最後まで読んでいただき、ありがとうございました。


弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。

★SCSK Plus サポート for Zabbix★

★YouTubeに、SCSK Zabbixチャンネルを開設しました!★

★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★

タイトルとURLをコピーしました