Zabbixによる監視(9) 第10回 20年02月 / 最終更新:2020.02.18

前回は、SNMP機器監視について説明しました。今回は、ログファイル監視について説明しようと思います。

ログファイル監視

ログ監視は、OSやアプリケーションが出力するログファイルを対象とした監視/分析方法です。Windows Serverなどの場合は、イベントログの監視も可能です(今回は説明しません)。

通常の物理サーバ・IaaSでは、カーネルやシステムのエラー情報をjournald や syslog/syslogng/rsyslogなどでログをファイルに出力します。また、Apacheなどのミドルウェアやアプリケーションもログファイルにログを出力することが多いです。
ログファイル監視は特定のログファイルを監視し、特定の文字列をが含まれている場合に通知を行います。

ログファイル監視設定

ログ監視項目は、以下のように設定します。

- アイテム名

- アイテム種別
  Zabbix agent(active)を設定する

- key
  ログ監視を行う関数を設定する

  - log\[ファイル名, (regex, encoding, maxlines, mode, output, maxdelay)\]
    ファイルを分析し、分析した文字列を返す

    - ファイル名(必須)
      監視対象ファイル名

    - regex
      検知する文字列の正規表現

      - log\[ファイル名,\"large result buffer allocation.\*Entries: ([0-9]+)\",,,,\\1\] と指定する

      - 指定したファイルに以下の文が書かれていた場合、「5948」を返す

        ```
        Feb 07 2014 11:07:36.6690 */ Thread Id 1400 (GLEWF) large result buffer allocation - /Length: 437136/Entries: 5948/Client Ver: >=10/RPC ID: 41726453/User: AUser/Form: CFG:ServiceLevelAgreement
        ```

    - maxlines
      ZabbixエージェントがZabbixサーバに送信する1秒あたりの新しい行の最大数

    - mode

      - all(デフォルト値): すべてのログを対象
      - skip: 古いログ情報をSKIPする

    - output

      - 出力形式を設定する
      - regexに設定した正規表現のグループ\(\"\(\)\"でくくった表現\)を、\1などの値として使用することが可能

    - maxdelay

      - 最大遅延時間(秒)
      - ログファイルの古い行を無視し、「maxdelay」秒以内の最新行を分析する

  - log.count\[ファイル名, \(regex, encoding, maxlines, mode, output, maxdelay\)\]   

- logと同じだが、分析して検知した回数を返す   

  - logrt\[ファイル名正規表現, \(regex, encoding, maxlines, mode, output, maxdelay\)\]

  - log[]と同じだが、ログローテションを考慮してファイル名の正規表現を指定する   

- logrt.count\[ファイル名正規表現, \(regex, encoding, maxlines, mode, output, maxdelay\)\]   

    - logrt[]と同じだが、分析して検知した回数を返す

- 情報の種類
  log[]/logrt[]の場合はLog、log.count[]/logrt.count[]の場合はNumeric(unsigned)を指定する

- 更新間隔(秒)

- ログ時間形式
  ログファイルの時間指定方式

  - y[年]・M(月)・d(日)・h(時)・m(分)・s(秒)を指定できる
  - 「23480:20100328:154718.045」が時刻の場合、pppppp:yyyyMMdd:hhmmss のように指定する
  - 上記の「p」や「:」はただのプレースホルダーで、その他の文字列も指定できる

物理サーバ・IaaSを使用する場合は、ログにしか出力されないエラーがあります。ログ監視はアプリケーションのエラー検知など、OSやプロセスは起動しているけど正常に動作していないことを検知できます。

例えば、以下のようなユースケースを検知できます。

- httpdのレスポンスが2xxと4xx/5xxの回数を監視し、2xx以外が多くなったことを検知する。
- PHP-FPMのエラー検知
- OOMkillerの検知
- 非要件項目(メール、システムデーモン)のエラーを検知

Paas/SaaS/コンテナ環境ではログは標準出力や別の場所に出力されるため、ログを直接監視することは少ないと思います。コンテナ環境ではノード単位でログを収集して監視する、もしくはログ収集を別ツールで行う方が良いでしょう。

ファイルチェック

ログとは違いますが、ファイルの存在/内容/チェックサムをチェックすることが可能です。例えば以下のような使用方法が可能です。

- /etc/passwd, /etc/shadow が変更されたかチェックサムで確認
- /var/run 以下のPIDファイルが存在するか確認
- /etc/hosts.allow から、sshd が許可するホストのみを表示

これにより、不正なファイル変更・必要ファイルの存在チェックが可能になります。

終わりに

今回は、ログ監視について説明しました。次回は、監視項目の履歴と特殊な監視項目について説明しようと思います。次回をお楽しみに。