Project

General

Profile

ログ監視(可変ファイル名)

Zabbix-Agentを利用して、ログファイルの監視を行う。

前提条件

  • Zabbix-Agentのインストールを行っていること
  • ログファイルおよび監視仕様は以下の仕様であること
    • 「/var/log/YYYYMMDD」を監視する(日付ファイル名)
    • ログファイルは日次でローテーションされる
    • 1分ごとに監視を行う
    • 5分間再度キーワードマッチングがなければ復旧と判断する
    • 特定のキーワード(エラーコード)の有無を監視する
    • 警告のトリガーのみ発生させ、通知メールは別途アクションで送信する

Zabbix-Agentの設定

  • ログの読み取りに際しroot権限が必要となるため、以下の設定と再読み込みを行う。
    # vi /etc/zabbix/zabbix_agentd.conf
    
     # AllowRoot=0
     ↓
     AllowRoot=1
    
    # systemctl restart zabbix-agent
    

設定

正規表現プリセットの設定

複数の文字列をマッチングする場合に作成する。
単一の文字列とのマッチングのみでいい場合はスキップする。

  • WebUIにログインする
  • 「管理」をひらく
  • 「一般設定」をひらく
  • 右上のプルダウンメニューから「正規表現」を選択する
  • 「正規表現の作成」ボタンを押す
  • 以下の内容を設定する
    • 名前「log-error」
    • 条件式の形式「いずれかの文字が含まれる」
    • 条件式「error,warn,fail,fatal,ERROR,WARN,FAIL,FATAL」
    • 区切り文字「,」
    • 大文字小文字を区別「チェックしない」
  • 「テスト」リンクをクリックし、「テスト文字列」に入力した文字列が正しくマッチするか確認する。
    「テスト条件式」ボタンを押し、未検出時が「偽(false)」、検出時が「真(true)」となるように設定する。
  • 「追加」ボタンを押す

アイテムの作成

任意のテンプレートまたはホストに新規「アイテム」を作成する。

  • 任意のテンプレートまたはホストの「アイテム」ページを表示する。
  • 「アイテムの作成」ボタンを押す
  • 以下の内容を設定する
    • 名前「日付ログファイル監視」
    • タイプ「Zabbixエージェント(アクティブ)」
    • キー「logrt["/var/log/^[0-9]{8,8}\.log$",@log-error]」
      • 単一の文字列でいい場合「logrt["/var/log/test/^[0-9]{8,8}\.log$"].str(error)」
    • データ型「ログ」
    • 更新間隔「60s」
    • ヒストリ保存期間「90d」
    • ログの時間の形式「」
    • アプリケーションの作成「log-messages」
    • アプリケーション「-なし-」
    • 説明「」
    • 有効「チェック」

トリガーの作成

  • 上記アイテムを追加したテンプレートまたはホストの「トリガー」ページを表示する
  • 「トリガーの作成」ボタンを押す
  • 以下の内容を設定する
    • 名前「日付ログファイル監視 {HOST.NAME}」
    • 深刻度「重度の障害」
    • 条件式
      ({テンプレート名:logrt["/var/log/^[0-9]{8,8}\.log$",@log-error].iregexp(@log-error)})<>0
      and
      ({テンプレート名:logrt["/var/log/^[0-9]{8,8}\.log$",@log-error].nodata(300)})=0
      
      • 単一の文字列でいい場合「{テンプレート名:logrt["/var/log/test/^[0-9]{8,8}\.log$"].str(error)}=1」
    • 正常イベントの生成「条件式」
    • 障害イベントの生成モード「単一」
    • 正常時のイベントクローズ「すべての障害」
    • タグ「」
    • 手動でのクローズ許可「チェック」
    • URL「」
    • 説明「」
    • 有効「チェック」
  • 「追加」ボタンを押す

動作確認

  • 監視対象のサーバで次のコマンドを発行し、意図的に警告ログを検知させる
    echo "warning" > /var/log/20170101.log
    
  • /var/log/messagesに上記のログが発生したことを確認し、監視のタイミングまで待つ
  • 障害を検知すれば成功
  • 監視対象のサーバで次のコマンドを発行し、意図的にログレベルのみ警告でマッチしないログを出力する
    echo "error" > /var/log/20170101.log
    
  • /var/log/messagesに上記のログが発生したことを確認し、監視のタイミングまで待つ
  • 障害を検知しなければ成功