Zabbixでログ監視を行っていると、「特定のエラーメッセージを検出したい」「一部のログは除外したい」といった要望が必ず出てきます。そんなときに役立つのが、正規表現を使った監視設定です。
正規表現を活用すれば、単純なキーワード一致では対応できない複雑な条件式も表現でき、ログに含まれる日付や数字、ファイル名など、柔軟にパターンを設定できます。
また、ログ監視において複数の文字列に同時対応できるOR条件や、ログに文字列が含まれる・含まれない場合の判定なども、正規表現なら簡単に対応可能です。
本記事では、Zabbixにおける正規表現の基本的な使い方から、文字数制限のある条件やワイルドカードとの違い、除外設定の方法、ダブルクォーテーションや区切り文字の扱いまで、実務に役立つ具体的なポイントをわかりやすく解説します。
さらに、条件式と連携したアラート制御や、正規表現一覧のエクスポートと管理といった運用面のノウハウも取り上げていきます。
正規表現を使いこなすことで、ログ監視の精度と効率を飛躍的に向上させることが可能になります。
ぜひ本記事を参考に、より高度な監視設定を構築してみてください。
- Zabbixで正規表現を使ったログ監視の基本的な仕組み
- 特定の文字列を含む・含まない条件式の作り方
- OR条件や除外設定など複雑な正規表現の活用法
- 正規表現一覧の管理やエクスポートの方法
Zabbixの正規表現を使ったログ監視の基本
- ログ監視における正規表現の使い方
- 正規表現で特定の文字列を除外する方法
- 正規表現によるOR条件の書き方
- 結果が真・偽になる条件の違い
ログ監視における正規表現の使い方
Zabbixにおけるログ監視では、正規表現(Regular Expression)を使うことで、監視対象のログから特定のパターンを柔軟に検出することが可能になります。これは単純な文字列一致では対応できない複雑な条件にも対応できるため、多くの現場で活用されています。
例えば、ログファイル内に「error」や「fail」といった文字列が出現した際にアラートを出すように設定する場合、正規表現を使えば「error|fail」のような書き方で、どちらかのキーワードが含まれるログ行を検出できます。
また、正規表現を活用することで、日付・数字・特定の形式を持つメッセージを監視対象とすることも可能です。例えば、IPアドレスのような形式(例:[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
)を検出したい場合に非常に有効です。
一方で、正規表現は柔軟性が高い反面、表現のミスにより誤検知や未検出が発生するリスクもあります。特に複雑なパターンを扱う際には、Zabbix上でのテストやログ出力の確認が重要です。実運用に組み込む前に、対象ログが本当に正規表現に一致するかを事前に確認しておくことをおすすめします。
正規表現で特定の文字列を除外する方法
Zabbixでログ監視を行う際に「この文字列が含まれている行は無視したい」といったケースは珍しくありません。そのような場面では、正規表現を使って特定の文字列を除外する方法が有効です。
このとき使うテクニックのひとつに「否定の先読み(Negative Lookahead)」があります。これは、あるパターンを含まない行を対象としたいときに使います。たとえば、「ログ行に“DEBUG”という文字列が含まれていたら無視する」場合、^(?!.*DEBUG).*
のような正規表現が使えます。
このように書くことで、「DEBUG」が含まれていない行だけを検出することができます。ただし、Zabbixのバージョンや設定によっては先読みが使えないケースもあるため、事前の検証が必要です。
また、ログアイテムの「正規表現で除外」機能を使う方法もあります。Zabbixの正規表現一覧でパターンを登録し、それを除外条件としてフィルターに設定することで、特定のログパターンを無視できます。
注意点として、除外の条件を多用しすぎると本来検知すべきエラーまで見落とすリスクがあるため、どの文字列を除外するかは十分に検討する必要があります。
正規表現によるOR条件の書き方
複数の異なるパターンを1つの条件で検出したい場合、Zabbixのログ監視で活躍するのが「OR条件」の正規表現です。これにより、複数の文字列のいずれかがログに現れたときにアラートを発生させることができます。
基本的な構文としては「|
(パイプ)」を使います。例えば、「error」「fail」「critical」のいずれかの文字列を検出したい場合、error|fail|critical
というように記述します。これにより、これらのキーワードがどれか一つでも含まれていればマッチします。
Zabbixでは、ログ監視アイテムのキーに「log[]」を使って対象ファイルを指定し、その中で「正規表現に一致した場合にのみ反応する」といった設定が可能です。OR条件を使えば、監視ルールを一つにまとめられるため、設定の手間を減らすことができます。
ただし、単純なOR条件は便利な反面、意図しない一致を招くこともあります。例えば「fail」という文字列が、単に「email failed to send」といった無害なログにも含まれていると、誤検知となる可能性があります。そのため、必要であれば前後の文脈も正規表現に含めて、より限定的な条件にする工夫も重要です。
正しく使えば、OR条件は監視の柔軟性と効率を高める有効な手段となります。
結果が真・偽になる条件の違い
Zabbixのログ監視では、条件に一致したかどうかで「結果が真」または「結果が偽」と評価されます。この評価によって、トリガーの発火やアラートの送信が決まるため、違いを正しく理解しておくことが重要です。
「結果が真」とは、設定した正規表現にログの内容が一致した場合です。つまり、Zabbixがログをスキャンして、指定されたパターンに合致する文字列を見つけたときに「真(true)」と評価されます。一方で、「結果が偽」は、パターンに一致しなかった場合です。
例えば、「ERROR|FAIL」という正規表現を使ってログを監視しているとします。ログ内に「Process FAIL detected」といった文字列があれば、それは「結果が真」として認識されます。反対に、「Process started successfully」のようなログは一致しないため、「結果が偽」となります。
このとき注意したいのが、トリガー条件式における論理演算です。Zabbixでは、過去の一定時間内に「結果が真」となる回数などを条件にトリガーを構成します。そのため、パターンの書き方や設定の意図を誤ると、アラートが出ない・出過ぎるといった問題が発生します。
設定後は、Zabbixのアイテム履歴やトリガーの状態を確認し、想定通りに「真」と「偽」が判定されているかを検証することが推奨されます。
Zabbixの正規表現設定と応用テクニック
- 日付や数字に対応する正規表現の書き方
- ワイルドカードと正規表現の違い
- ファイル名に使える正規表現パターン
- 文字列が含まれる・含まれない条件式
- トリガー条件式と正規表現の組み合わせ
- 区切り文字やダブルクォーテーションの扱い方
- 正規表現一覧のエクスポート方法と管理
日付や数字に対応する正規表現の書き方
Zabbixで日付や数字のパターンを検出したい場合、正規表現の記述が少し複雑になります。特定の形式を正確にとらえる必要があるためです。ここでは代表的な書き方を紹介します。
まず、数字の検出には「\d
」または「[0-9]
」を使います。たとえば、「3桁以上の数字」を検出したい場合は「\d{3,}
」と書くことで、100や1000などの数字にマッチします。
次に、日付の形式には複数のパターンがありますが、よく使われる「YYYY-MM-DD」形式であれば「\d{4}-\d{2}-\d{2}
」という記述が一般的です。これは「2025-03-25」のような日付に対応します。
もう少し柔軟に対応させたい場合は、スラッシュ区切り(例:2025/03/25)やゼロ埋めの有無なども考慮したパターンを書く必要があります。例えば「\d{4}[/-]\d{1,2}[/-]\d{1,2}
」のようにすれば、「2025-3-5」や「2025/03/25」などにも対応できます。
ただし、正規表現だけで日付の正確性(2月29日が存在するかどうかなど)をチェックするのは難しいため、あくまで形式のマッチングに使うことを前提としましょう。また、Zabbixの監視対象によっては、タイムスタンプが含まれている場合もあります。その際は、「2025-03-25 14:05:22
」のような形式に合わせて、「\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}
」と記述するとよいでしょう。
こうした工夫により、ログ内の数値や日付データを的確に検出し、より精度の高い監視が可能になります。
ワイルドカードと正規表現の違い
Zabbixの監視設定では、「ワイルドカード」と「正規表現」は混同されがちですが、実際には機能も用途も異なります。それぞれの特性を理解することで、より適切な監視設定が行えます。
ワイルドカードは、主にファイル名やパスの指定など、簡易的なパターンマッチングに使われます。例えば、「*.log
」という指定であれば、拡張子が「.log」のすべてのファイルが対象になります。ワイルドカードは直感的で扱いやすく、少ない条件でざっくりとした一致を得たい場合に便利です。
一方、正規表現は、より複雑で詳細なパターンマッチングが可能です。例えば、「エラーコードが3桁で始まり、続けて文字列がある」といった条件を満たす行だけを検出したいときは、ワイルドカードでは対応できません。正規表現なら「\d{3}.*
」のように細かく定義することができます。
Zabbixにおいては、アイテムやトリガーの条件、正規表現一覧の設定など、場所によってワイルドカードと正規表現のどちらが使えるかが異なります。そのため、設定前にその入力欄がワイルドカード形式か正規表現形式かを確認することが大切です。
また、注意点として、ワイルドカードと正規表現は似た見た目の構文(例えば「*」や「.」など)でも意味が異なるため、混在させないようにしましょう。理解があいまいなまま使うと、意図しない動作に繋がることがあります。初めて設定する場合は、簡単なパターンから試しながら慣れていくのがおすすめです。
ファイル名に使える正規表現パターン
Zabbixでファイル名を条件にログ監視を行いたい場合、正規表現を活用することで柔軟な対象指定が可能になります。特に、定期的にファイル名が変化するようなログ(例:アプリケーションログが日付付きで保存される場合など)では、正規表現が非常に役立ちます。
例えば、app_log_2025-03-25.log
のように日付付きファイル名を検出したい場合は、次のようなパターンが使えます:app_log_\d{4}-\d{2}-\d{2}\.log
このパターンでは、年(4桁)・月(2桁)・日(2桁)をそれぞれ数字として扱い、正確な日付形式のファイル名を対象にします。
一方で、「毎日生成されるログファイルすべてを対象にしたいが、日付の部分は問わない」といった場合には、より柔軟な正規表現が必要です。例えば:app_log_.*\.log
このように記述することで、「app_log_」に続く任意の文字列+拡張子「.log」のすべてのファイル名にマッチさせることが可能です。
Zabbixの監視アイテムでファイル名を動的に処理する際は、このようなパターンを使って柔軟に対応できます。ただし、正規表現の書き方を間違えると、対象ファイルが認識されずログが取得できないという事態も起こり得るため、テストを行ったうえでの適用が望ましいです。
また、アスタリスク(*)などワイルドカード的に使われる記号も、正規表現上では別の意味を持つため、.
や*
を使う際はバックスラッシュでエスケープするなどの注意が必要です。
文字列が含まれる・含まれない条件式
Zabbixでログ監視を行う際、「ある文字列が含まれているかどうか」を条件にアラートを発生させたいケースは非常に多くあります。このような場合、正規表現を使った条件式で精度の高い監視が可能です。
文字列が「含まれる」ことを検出したい場合、シンプルにその文字列を正規表現として記述すれば対応できます。たとえば、「timeout」という文字列がログに含まれる行を検出するには、単に timeout
と指定するだけでマッチします。
一方で、「文字列が含まれない」条件を設定したいときには、少し工夫が必要です。前述の通り、「否定の先読み(Negative Lookahead)」を用いた正規表現を使えば実現できます。例えば、^(?!.*success).*
のようなパターンを使えば、「success」という文字列が含まれていない行だけをマッチさせることができます。
ただし、このような否定パターンはZabbixのバージョンや設定によっては使えないことがあるため、設定前にサポートされている構文かどうかを確認することが重要です。
また、Zabbixの「正規表現一覧」に除外ルールを登録し、それを条件式で適用する方法もあります。このようにすれば、特定の文字列が含まれる行だけを無視したり、含まれないものだけを拾う設定が視覚的にもわかりやすくなります。
ログ監視の信頼性を高めるには、こうした含有・非含有の条件を適切に使い分けることが欠かせません。
トリガー条件式と正規表現の組み合わせ
Zabbixにおいて、正規表現によるログ監視とトリガーの条件式を組み合わせることで、より実践的で柔軟な監視が可能になります。これは、特定のログが出力された回数や期間を元に、アラートを出すタイミングをコントロールする仕組みです。
例えば、「エラーという文字列を含むログが10分間に3回以上出現したらトリガーを発火する」といった条件は、以下のように書けます:{ホスト名:log[/var/log/app.log,error].regexp(error).count(600,,"gt")}>2
ここで、regexp(error)
は「正規表現にマッチするかどうか」を判定する部分です。ログ内に「error」が含まれる行が検出されると、Zabbixはそれを「一致(true)」としてカウントし、一定のしきい値を超えたときにトリガーが発動します。
このように正規表現をトリガー条件式と組み合わせることで、単なるログの存在チェックにとどまらず、「どのくらいの頻度で出ているか」「特定の時間内に何回出たか」といった、より高度な判断が可能になります。
一方で、正規表現が複雑すぎたり、意図しない文字列にマッチしてしまうと、不要なアラートが発生するリスクもあります。そのため、正規表現のテストやフィルターの最適化は事前にしっかりと行う必要があります。
Zabbixでは、トリガーの条件を工夫することで、過剰な通知を減らし、実際に重要なアラートだけを確実に拾う運用が実現できます。監視の精度と効率を上げたい場合には、正規表現との組み合わせを積極的に活用するとよいでしょう。
区切り文字やダブルクォーテーションの扱い方
Zabbixで正規表現を使ってログを監視する際、区切り文字(カンマやタブなど)やダブルクォーテーションの扱い方を正しく理解することが重要です。これらの文字は、ログフォーマットによっては頻繁に使われており、誤った扱いをするとパターンが意図通りにマッチしなくなる可能性があります。
まず、カンマ(,
)やタブ(\t
)などの区切り文字は、正規表現上では通常の文字と同様に扱えます。ただし、特定の記号には特別な意味があるため注意が必要です。たとえば、ピリオド(.
)は任意の1文字を意味するため、「ドットとして扱いたい」場合には \.
のようにバックスラッシュでエスケープする必要があります。
ダブルクォーテーション("
)も同様で、ログ中のフィールドが "
で囲まれている場合、その文字を正確にパターンに含める必要があります。例えば、「”ERROR”」という文字列を正確に検出したいなら、正規表現では "ERROR"
とそのまま書けば問題ありません。ただし、Zabbixの設定画面に入力する際は、ダブルクォーテーションを囲む形で全体を記述すると誤動作することもあるため、形式に注意が必要です。
また、複数の値が区切り文字で連結されているログ(CSV形式など)を扱う場合、正規表現で特定の列だけを対象にしたいというニーズも出てきます。このときは、例えば次のようなパターンが考えられます:^[^,]*,[^,]*,"ERROR",.*
このように書けば、3番目のフィールドに "ERROR"
が含まれている行を検出できます。
ダブルクォーテーションを含むパターンは、コピー&ペーストした場合に全角や文字化けが起こるケースもあるため、設定時には一文字ずつ確認するようにしましょう。
正規表現一覧のエクスポート方法と管理
Zabbixでは、共通のパターンを複数の監視設定で使い回すために「正規表現一覧」という機能があります。これは、特定の正規表現をテンプレート化し、アイテムやトリガーの中で参照できるようにする仕組みです。この一覧のエクスポートや管理は、設定の一貫性を保つうえで非常に重要な作業となります。
正規表現一覧は、Zabbixの管理画面から「管理」>「正規表現」メニューにアクセスすることで確認できます。ここに登録された各正規表現は、「名前」と「ルール」のセットとして管理されており、個別のルールに対して「一致する」「一致しない」などの判定設定が可能です。
エクスポート方法としては、Zabbixが提供するテンプレート機能を利用するのが一般的です。正規表現一覧はテンプレートに含めることができるため、テンプレートをXML形式でエクスポートすれば、その中に正規表現も一緒に保存されます。これにより、他の環境や別のZabbixサーバーに正規表現の設定を簡単に移行することが可能です。
管理のポイントとしては、以下の点が挙げられます。
名前付けルールを統一する
複数のユーザーで運用する場合、正規表現の名前がバラバラだと再利用や検索が難しくなります。例えば、「ログ_エラー検出用」「ログ_除外パターン」といったように、接頭辞で機能を分類すると管理しやすくなります。
使用状況を定期的に確認する
不要になった正規表現を放置すると、設定が肥大化し保守が難しくなります。定期的にどのアイテムやトリガーで使われているかを洗い出し、未使用のものは削除することが望ましいです。
バージョン管理を検討する
設定変更が多い環境では、正規表現の内容をテキストファイルで記録しておくと、いつ誰がどのように変更したかを後から追跡できます。構成管理ツール(Gitなど)と連携させるのも一つの方法です。
このように、正規表現一覧のエクスポートと適切な管理を行うことで、Zabbixの運用効率と信頼性を高めることができます。
Zabbixの正規表現を使ったログ監視のまとめ
記事のポイントをまとめます。
- Zabbixでは正規表現を使って柔軟なログ監視が可能
- パターンマッチにより特定のログ行のみを検出できる
- error|fail のようなOR条件で複数ワードを一括監視
- 否定の先読みで特定の文字列を除外した監視が行える
- log[]キーを使って監視対象ファイルを設定できる
- 結果が真・偽によってトリガーの発火が判断される
- 日付や数字は \d や [0-9] を使ってパターン化する
- 形式の異なる日付にも柔軟に対応できる記述がある
- ワイルドカードと正規表現は用途も意味も異なる
- ファイル名が動的に変わる場合も正規表現で対応可能
- 文字列が含まれる・含まれない条件を明確に区別可能
- トリガー条件式と組み合わせることで監視精度が向上
- 区切り文字やダブルクォーテーションは明示的に指定する
- 正規表現一覧を活用することで再利用と管理がしやすくなる
- テンプレートとしてエクスポートすれば他環境へ簡単に移行可能
