N-LAB.

Zabbixでログを監視してエラー発生時にメールを送信して通知する方法

投稿日:2023/04/21

目標

  • Zabbixで任意のログファイルを監視し、エラーが出力された場合は指定のメールアドレス宛にメールを送信して通知する。


前提

  • 監視対象のログファイルが存在するサーバーにZabbixエージェントがインストールされていること。
  • 本手順書ではZabbixのバージョン6.4.1を使用しています。
  • メールの送信元として有効なメールアドレスを取得していること。

※本手順書ではメールプロバイダとしてGmailを利用しています。

目次

  1. ホストの登録
  2. アイテムとトリガー
  3. アイテムの設定
  4. ログファイルの監視
  5. トリガーの設定
  6. ログファイルのエラー検知
  7. 障害の復旧
  8. 送信元メールアドレスの追加
  9. メールテンプレートの追加
  10. 送信先メールアドレスの追加
  11. 障害発生時のメール送信設定
  12. 障害発生時のメール送信確認


1. ホストの登録

  • 監視対象のサーバー情報を登録します。


1. 左サイドメニューの「監視データ」を選択し、「ホスト」をクリックします。画面右の「ホストの作成」をクリックします。
host list
※Zabbixにおけるホストとは、監視対象のデバイス(サーバ、ワークステーション、スイッチなど)のことを指します。詳細は以下を参照ください。
https://www.zabbix.com/documentation/6.0/jp/manual/config/hosts

2. 「ホストグループ」に「Zabbix servers」を追加します。「インターフェース」に「エージェント」を追加します。「ホスト名」、「IPアドレス」に任意の値を設定します。画面右下の「追加」をクリックします。
create host
ホスト名:監視対象のログファイルが存在するサーバーにインストールされているZabbixエージェントの設定ファイル(zabbix_agentd.conf)のHostnameで設定されている値を指定します。

表示名:表示用に使う名称を設定できます。

ホストグループ:ホストが所属するグループ。最低1つのグループに所属する必要があります。

IPアドレス:監視対象のログファイルが存在するサーバーのIPアドレスを指定します。本手順書ではローカルのサーバーを監視対象としているため「127.0.0.1」を指定しています。外部のサーバーのIPアドレスを指定する場合はファイアウォール等の設定を調整して、Zabbixサーバーと通信ができる状態にしてください。

ポート番号:監視対象のログファイルが存在するサーバーにインストールされているZabbixエージェントの設定ファイル(zabbix_agentd.conf)のListenPortで設定されている値を指定します。ListenPortの設定がない場合はデフォルト値の10050を設定します。

3. ホスト追加の完了メッセージが表示されていることを確認します。
host created msg

4. 左サイドメニューの「監視データ」を選択し、「ホスト」をクリックします。「エージェントの状態」の「ZBX」が緑色に表示されていることを確認します。「ZBX」クリックすると「ステータス」が「利用可能」になっていることも確認します。
check host status

2. アイテムとトリガー

  • Zabbixでログファイルの監視を行うには、アイテムとトリガーをホストに対して設定します。

※ホストとは、監視対象のデバイス(サーバー、ワークステーション、スイッチなど)のことを指します。

  • アイテム:アイテムはホストからデータ(CPU負荷やディスク使用状況、ログの中身など)を収集するために利用します。どのようなデータを取得するかを監視項目としてアイテムに設定します。


  • トリガー:アイテムで設定した監視項目をもとにホストから収集したデータを条件式により評価 し、正常/障害/不明のいずれかにステータスを変更します。


3. アイテムの設定

1. 左サイドメニューの「データ収集」を選択し、「ホスト」をクリックします。「1. ホストの登録」で作成したホストが一覧に表示されていることを確認します。
host list
2. 「アイテム」をクリックします。アイテムの一覧画面が表示されることを確認します。画面右上の「アイテムの作成」をクリックします。
item list
3. 「名前」、「監視間隔」に任意の値を設定します。「タイプ」は「Zabbix エージェント (アクティブ)」を選択します。「データ型」は「ログ」を選択します。「キー」には「log[ログのフルパス]」を入力します。画面下の「追加」をクリックします。
※本手順書では以下のログファイルを監視対象として設定しています。
/var/log/hoge/app.log
create item
名前:表示用に使う名称を設定します。本手順書では「web app log」を設定しています。

タイプ:ホストからデータを取得するための方法を設定します。ログファイルを監視する場合は必ず「Zabbix エージェント (アクティブ)」を選択します。詳細はこちらを参照ください。

キー: 監視対象を設定します。疎通結果であればpingコマンド等を記載します。ログファイル「/var/log/hoge/app.log」の内容を監視したい場合は、log[/var/log/hoge/app.log]と記載します。

データ型:キーをもとにホストから収集したデータの型を指定します。ログファイルであればログを設定します。

監視間隔(秒):キーをもとにしたホストの監視間隔を設定します。ログファイル監視の場合は、1 秒に設定するとログファイルの最新の出力内容をできるだけ早く取得することができます。

4. アイテム追加の完了メッセージが表示されていることを確認します。
item created msg

4. ログファイルの監視

  • 前項でアイテムのキーに指定したログファイルの内容が取得できているかを確認します。

※本手順書では以下のログファイルを監視対象としてアイテムのキーに設定しています。
/var/log/hoge/app.log

1. 左サイドメニューの「監視データ」を選択し、「最新データ」をクリックします。「名前」に前項でアイテムの名前に設定した値を入力し、「適用」をクリックします。
data list
2. 一覧に前項で作成したアイテムが表示されます。「最新の値」にログファイルの最新行が表示されていることを確認します。
check data
3. ログファイルの内容を更新し、Zabbixで最新の情報を取得できているかを確認します。以下のコマンドを入力し、ログファイルの内容を更新します。

$ sudo echo "update log file" >> /var/log/hoge/app.log


4. 「最新の値」に「update log file」が表示されていることを確認します。
check latest data
5. 取得したログファイルの内容をすべて表示するには画面右の「ヒストリ」をクリックします。
click history
6. ログファイルの内容がすべて表示されていることを確認します。
show logfile

5. トリガーの設定

1. 左サイドメニューの「データ収集」を選択し、「ホスト」をクリックします。「1. ホストの登録」で作成したホストが一覧に表示されていることを確認します。「トリガー」をクリックします。
host list
2. 画面右上の「トリガーの作成」をクリックします。
create trigger
3. 「名前」、「深刻度」、「説明」に任意の値を設定します。「正常イベントの作成」に「なし」を選択します。「障害イベント生成モード」に「単一」を選択します。「手動クローズを許可」、「有効」にチェックをつけます。「条件式」の「追加」をクリックします。
trigger configure
名前:表示用に使う名称を設定します。本手順書では「web app log error」を設定しています。

深刻度:障害の度合いを設定します。

条件式: ホストから収集したデータに問題があるかどうかを評価するために定義する論理式。条件式の評価結果がTRUEと評価された場合は障害と判断します。条件式の詳細はこちらを参照ください。

正常イベントの生成:障害の復旧を検知する条件を設定します。本手順書では障害の復旧は手動で行うため「なし」を設定しています。

手動クローズの許可:障害の復旧を手動で行うことを許可するか設定します。本手順書では障害の復旧は手動で行うためチェックをつけています。

4. 「アイテム」の「選択」をクリックし、「3. アイテムの設定」で作成したアイテムをクリックします。「関数」に「find()」を選択します。「V」に「error」を入力します。「結果」に「=」、「1」を設定し、「挿入」をクリックします。
trigger expression
アイテム:監視対象のアイテムを指定します。

関数:ホストから収集したデータを評価するために実行する関数を設定します。本手順書ではログファイルに「error」という文字列が存在するかどうかを判定するため「find()」を設定しています。

V:関数に渡す引数を設定します。関数に「find()」を設定してる場合は検知する文字列を設定します。本手順書ではログファイルに出力された「error」を検知したいため、「error」を設定しています。

結果:関数の評価結果と比較する値を設定します。「find()」関数は評価結果に「1」(合致)または「0」(合致しない)を返すため、比較する値として「1」を設定しています。

5. 「条件式」に値が挿入されていることを確認します。
check trigger expression
6. 画面下の「追加」をクリックします。
add trigger
7. トリガー追加の完了メッセージが表示されていることを確認します。
created trigger msg

6. ログファイルのエラー検知

  • 前項で作成したトリガーの条件式により、ログファイルに「error」が出力された場合に障害として検知できるかを確認します。


1. 左サイドメニューの「データ収集」を選択し、「ホスト」をクリックします。「1. ホストの登録」で作成したホストが一覧に表示されていることを確認します。「トリガー」をクリックします。
host list
2. 「名前」に前項で作成したトリガーの名前を入力し、「適用」をクリックします。
search trigger
3. 前項で作成したトリガーが表示され、「値」が「正常」となっていることを確認します。
check trigger status
4. 以下のコマンドを入力し、ログファイルに「error」を書き込みます。

$ sudo echo "error" >> /var/log/hoge/app.log


5. 画面をリロード(F5など)し、トリガーの「値」が「障害」となっていることを確認します。
check trigger status
6. 左サイドメニューの「監視データ」を選択し、「障害」をクリックします。一覧に障害が表示されていることを確認します。
check trigger

7. 障害の復旧

1. 左サイドメニューの「監視データ」を選択し、「障害」をクリックします。一覧に障害が表示されていることを確認します。画面右下の「更新」をクリックします。
show latest data
2. 「メッセージ」に任意の値を入力します。「障害のクローズ」にチェックをつけ、「更新」をクリックします。
close problem
3. 「ステータス」が「解決済」になっていることを確認します。
check status

8. 送信元メールアドレスの追加

  • 障害発生時のメール送信元の設定を行います。

※本手順書ではメールプロバイダとしてGmailを利用します。

1. 左サイドメニューの「通知」を選択し、「メディアタイプ」をクリックします。画面右上の「メディアタイプの作成」をクリックします。
media type list
2. 「名前」、「説明」に任意の値を入力します。「タイプ」に「メール」、「メールプロバイダ」に「Gmail」を選択します。「メール」に送信元として使用したいGmailアドレスを入力します。「パスワード」にアプリパスワードを入力し、「追加」をクリックします。
※アプリパスワードの生成方法は以下を参照ください。
https://support.google.com/accounts/answer/185833
create media type
※従来はgoogleアカウントのセキュリティ設定より「安全性の低いアプリのアクセス」を「オン」にすることで、googleアカウントのパスワードを用いてログイン認証を行うことができましたが、2022年6月より「安全性の低いアプリのアクセス」機能が利用できなくなりました。
そのため、googleアカウントのパスワードを指定した場合ログイン認証に失敗するようになり、メールを送信することができなくなくなりました。代替案として生成したアプリパスワードをパスワードに指定することでログイン認証に成功し、メールを送信することができます。詳細に関しては以下を参照ください。
https://support.zabbix.com/browse/ZBX-21187
https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/415786-not-being-aboe-to-use-smtp-gmail-com-within-zabbix

3. メディアタイプ追加の完了メッセージが表示されていることを確認します。
created media type msg
4. 追加したメディアタイプの「テスト」をクリックします。
media type test
5. 「送信先」に任意のメールアドレスを入力します。「件名」、「メッセージ」に任意の値を入力し、「テスト」をクリックします。
media type configure
6. 「メディアタイプのテストに成功しました。」が表示されていることを確認します。
success send mail
7. 「送信先」に設定したメールアドレス宛にメールが送信されていることを確認します。送信元は先ほど作成したメディアタイプの「メール」で指定したメールアドレスが表示されていることも確認します。
check email

9. メールテンプレートの追加

1. 左サイドメニューの「通知」を選択し、「メディアタイプ」をクリックします。「名前」に前項で作成したメディアタイプの名前を入力し、「適用」をクリックします。一覧に表示されているメディアタイプの名前(gmail for app error notification)をクリックします。
media type list
2. タブの「メッセージテンプレート」を選択し、「追加」をクリックします。
add template
3. 「メッセージタイプ」に「障害」を選択します。「件名」、「メッセージ」に任意の値を入力し、「追加」をクリックします。
※本手順書では「件名」、「メッセージ」はデフォルト値のままで設定しています。
template configure
4. 一覧に追加されていることを確認します。「更新」をクリックします。
check template
5. メディアタイプ更新完了メッセージが表示されていることを確認します。
created template msg

10. 送信先メールアドレスの追加

  • 障害発生時のメール送信先の設定を行います。


1. 左サイドメニューの「ユーザー」を選択し、「ユーザー」をクリックします。「ユーザー名」の「Admin」をクリックします。
user list
2. タブの「メディア」を選択し、「追加」をクリックします。
add media
3. 「タイプ」に「8. 送信元メールアドレスの追加」で作成したメディアタイプの名前を選択します。「送信先」に障害発生時の通知先となるメールアドレスを入力し、「追加」をクリックします。
media configure
4. 一覧に追加されていることを確認します。「更新」をクリックします。
check media
5. ユーザー更新完了メッセージが表示されていることを確認します。
updated user msg

11. 障害発生時のメール送信設定

  • ログファイルに「error」が出力され、障害として検知した場合の検知後の行動を設定します。検知後の行動はアクションを作成することで設定することできます。本手順書では検知後の行動としてメール通知をアクションに設定します。


1. 左サイドメニューの「通知」の「アクション」を選択し、「トリガーアクション」をクリックします。画面右上の「アクションの作成」をクリックします。
trigger action list
2. 「名前」に任意の値を入力し、「実行条件」の「追加」をクリックします。
trigger action configure
3. 「タイプ」に「トリガー」、「オペレータ」に「等しい」、「トリガー発生元」に「ホスト」を選択します。「トリガー」の「選択」をクリックします。
trigger action configure
4. 「5. トリガーの設定」で作成したトリガーにチェックをつけて「選択」をクリックします。
add trigger
5. 「追加」をクリックします。
trigger action configure
6. 「実行条件」に追加されていることを確認します。
check trigger
7. タブの「実行内容」を選択します。「実行内容」欄の「追加」をクリックします。
add trigger
8. 「ユーザーに送信」に「Admin」を追加します。「次のメディアのみ使用」に「8. 送信元メールアドレスの追加」で作成したメディアタイプの名前を設定し、「実行条件」の「追加」をクリックします。
action configure
9. 「タイプ」に「障害確認のステータス」、「オペレータ」に「等しい」、「確認済」に「はい」を選択し、「追加」をクリックします。
add condition
※実行条件をもう1つ追加します。「実行条件」の「追加」をクリックし、「タイプ」に「障害確認のステータス」、「オペレータ」に「等しい」、「確認済」に「いいえ」を選択し、「追加」をクリックします。

10. 「計算のタイプ」に「And/Or」を選択します。画面右下の「追加」をクリックします。
operation type configure
11. 「実行内容」欄に追加されていることを確認します。画面右下の「追加」をクリックします。
check condition
12. アクション追加の完了メッセージが表示されていることを確認します。
created action msg

12. 障害発生時のメール送信確認

  • ログファイルに「error」が出力され、障害として検知した場合に「10. 送信先メールアドレスの追加」で設定した通知先のメールアドレスにメールが送信されているかを確認します。


1. 以下のコマンドを入力し、ログファイルに「error」を書き込みます。

$ sudo echo "error" >> /var/log/hoge/app.log


2. 左サイドメニューの「監視データ」を選択し、「障害」をクリックします。一覧に障害が表示されていることを確認します。画面右端の「アクション」列に表示されているアイコンをクリックします。
data list
3. 「ステータス」が「送信済」になっていることを確認します。
check status
4. 「10. 送信先メールアドレスの追加」で設定した通知先のメールアドレス宛にメールが送信されていることを確認します。送信元は「8. 送信元メールアドレスの追加」で作成したメディアタイプの「メール」で指定したメールアドレスが表示されていることも確認します。
check email

以上で全ての手順は完了になります