3. ログ監視 - 正規表現の指定方法
ログ監視のキーlog、logrtなどでは、2番目の引数で、対象の文字列を指定するための正規表現を指定します。
正規表現は、アイテム設定のキー欄で直接指定するだけでなく、ユーザマクロや、グローバル正規表現というシステム共通の正規表現も利用可能です。
直接指定
正規表現をアイテムのキー欄に直接するパターンです。
ERROR または WARN を含むログデータが監視データとして抽出されます。
次の例は、(INFO)という文字列を対象にする指定方法です。()はエスケープする必要があるのでバックスラッシュをおいています。
ユーザマクロ
正規表現はユーザマクロを使って指定することもできます。テンプレートなどでログ監視アイテムを作成する場合、利用するホストによって監視対象文字列を変更する可能性もあるため、マクロにしておいたほうが変更・管理がしやすくなります。
アイテム設定
マクロ設定
キーに直接正規表現を記述する際、正規表現を"(ダブルクオーテーション)"で囲んでも囲まなくても、結果は同じでした。ただし、マクロで正規表現を指定する場合は、ダブルクォーテーションで囲んではいけません。
マクロ内でダブルクォーテーションを記載すると、それ自体もエスケープされてしまい、想定したとおりに文字列がヒットしなくなります。
以下の例は、ユーザマクロで正規表現を指定した場合と、キーに直接指定した場合をすべて並べて確認した結果です。
最初の2つがユーザマクロ、下の2つがキーに直接指定したアイテムです。 ユーザマクロにダブルクォーテーションを記載したケースのみ、監視データを取得できていません。
グローバル正規表現
正規表現は、グローバル正規表現という機能を使って指定することもできます。
グローバル正規表現はあらかじめZabbixにセットされていますが、自分で追加することも可能です。
グローバル正規表現を確認するには、メニューから、管理→一般設定 を選択します。
右端のプルダウンから、正規表現 を選択します。
グローバル正規表現の画面です。インストール時にいくつか設定されています。
ここで、先ほど指定した正規表現と同じ条件を作成します。 画面右の正規表現の作成をクリックします。
正規表現の名称と条件式を指定します。ちょっとややこしいのですが、この正規表現の欄では、()をエスケープする必要はありません。
監視アイテムのキー指定では、正規表現の名称の頭に@をつけてグローバル正規表現を指定します。
キーに直接指定した場合や、マクロ指定場合と同様、監視データを取得できることが確認できます。
正規表現をユーザマクロの中に記述することもできます。
このように、グローバル正規表現を使ってログの検索対象を指定することができます。ただ、グローバル正規表現は、ホストやテンプレートのエクスポート/インポートの対象に含まれていないため、設定を他のサーバに移す際に少し面倒です。
まとめ
ダブルクオートの扱いや、エスケープシーケンスの有無が指定する箇所で違うため、正規表現の指定は少し注意する必要があります。
複数のメンバーで設定を管理する場合、ログ監視の正規表現をどこで指定するか、チーム内で決めておいたほうが混乱を避けることができると思います。