Zabbixのログ監視
Zabbixのログ監視は、アイテムタイプとしては「Zabbixエージェント(アクティブ)」に分類されます。
この監視をおこなうためには、監視対象にZabbixエージェントをインストールし、zabbix_agentd.confで主に以下の設定をする必要があります。
Zabbixでのログ監視ではこの中の「Hostname」の情報をもとに、どの監視対象のログであるかを判断しています。
設定項目 | 説明 |
Server | ZabbixサーバのIPアドレスまたはホスト名(通常監視用) |
ServerActive | ZabbixサーバのIPアドレスまたはホスト名(アクティブチェック用) |
Hostname | 自身のホスト名 |
※詳細はZabbixのマニュアルをご参照ください。
https://www.zabbix.com/documentation/6.0/jp/manual/appendix/config/zabbix_agentd
Hostnameが重複した場合の挙動
Zabbixでは、ログ監視をおこなう際、サーバの判別をエージェントの「Hostname」設定と、Zabbixサーバ上で監視対象として登録している「ホスト名」が一致しているかどうかで判断します。
また、ログをどこまで読み込んだかという情報を管理しており、この情報に不整合が発生するとログ監視に不整合が発生します。
実際に発生させてみる
それでは、以下の条件の場合、ログ監視がどうなってしまうのか検証してみましょう。
- サーバAとサーバBで「ServerActive」と「Hostname」設定が同じZabbixエージェントが起動している
- サーバAがZabbixの監視対象として登録されており、ログ監視が設定されている
- ログ監視対象のログファイルがサーバAとサーバBのどちらにも存在する
- サーバBのログファイルの方がサーバAのログファイルよりサイズが小さい
準備
実験のため、各サーバで設定をしていきます。
サーバA側の設定
サーバA側はZabbixサーバ兼監視対象とします。
■OSのホスト名:zabbix60
■IPアドレス:172.19.80.65
■zabbix_agentd.confの設定
設定項目 | 設定値 | 備考 |
Server | 172.19.80.65 | ZabbixサーバのIPアドレスを設定 |
ServerActive | 172.19.80.65 | ZabbixサーバのIPアドレスを設定 |
Hostname | zabbix60 | 自身の監視をするため自身のホスト名を設定 |
■監視対象ログ:/var/log/zabbix/zabi_activechk_test.log
[root@zabbix60 ~]# ls -l /var/log/zabbix/zabi_activechk_test.log -rw-r–r–. 1 zabbix zabbix 34 3月 9 16:11 /var/log/zabbix/zabi_activechk_test.log [root@zabbix60 ~]# cat /var/log/zabbix/zabi_activechk_test.log zabbix60 This Server is zabbix60 [root@zabbix60 ~]# |
サーバB側の設定
サーバB側はzabbix_agentdの設定をサーバAと同じにします。また、監視対象ログファイルも用意します。
Zabbixの監視が始まらないようZabbixエージェントサービスは停止しておきます。
■OSのホスト名:zabbix40
■IPアドレス:172.19.80.65
■zabbix_agentd.confの設定
設定項目 | 設定値 | 備考 |
Server | 172.19.80.65 | ZabbixサーバのIPアドレスを設定 |
ServerActive | 172.19.80.65 | ZabbixサーバのIPアドレスを設定 |
Hostname | zabbix60 | 自身のホスト名ではなく、サーバAのホスト名を設定 |
■監視対象ログ:/var/log/zabbix/zabi_activechk_test.log
[root@zabbix40 ~]# ls -l /var/log/zabbix/zabi_activechk_test.log |
監視設定
Zabbixサーバでの監視設定は以下のように設定します。
■ホスト設定
ホスト設定では、ホスト名、IPアドレスともにサーバAのホスト名とIPアドレスを設定します。
■アイテム設定
今回は検証なのでホストに直接アイテムを設定します。
ログ監視開始
上記設定をすると、サーバA側で監視が始まり、監視結果としてはサーバAにあらかじめ入力されていた文字列が監視結果として取得され、履歴に保存されます。
それではサーバAのログに、1分間に1回の間隔でログを出力さてみましょう。
当然ながら以下のようにログが監視履歴に溜まっていきます。
その後サーバB側でZabbixエージェントを起動すると、サーバB側のログが監視履歴に追加されます。
サーバBのログにも1分間に1回の間隔でログを出力させましょう。すると以下のようにサーバA、サーバBのログが交互に監視履歴に表示されます。
これでサーバAのログファイルの方がサーバBのログファイルより、2行分ファイルサイズが大きいという状態が作り出され、前述の前提条件を満たした状態が作り出されました。
本来サーバBのログとして検知される必要があるということ以外は特に監視に問題はなさそうです。
サーバAのエージェントを停止・起動した場合
ここで、ログサイズの大きい側サーバAのZabbixエージェントを停止し、しばらくしてから起動してみると、過去に一度読み込んだログを再度取り込んでしまいます。
これは、サーバAのZabbixエージェントを停止してから、サーバAのzabi_activechk_test.logよりサイズの小さいサーバBのzabi_activechk_test.logを読み込んだことにより、Zabbixサーバ上では、以下の動作となった結果の動作となります。
- サーバAの「/var/log/zabbix/zabi_activechk_test.log」を監視し、「/var/log/zabbix/zabi_activechk_test.logをどこまで読み込んだか」という情報が更新される(定期的にログを出力してから5回目のログの位置まで読み込んだ)
- サーバAのZabbixエージェント停止
- サーバBの「/var/log/zabbix/zabi_activechk_test.log」を監視し、「/var/log/zabbix/zabi_activechk_test.logをどこまで読み込んだか」という情報が更新される(定期的にログを出力してから3回目のログの位置まで読み込んだ)
- サーバAのZabbixエージェント起動
- ZabbixサーバはサーバAのエージェントに、「/var/log/zabbix/zabi_activechk_test.log」は定期的にログを出力してから3回目のログの位置まで読み込んでいることを通知
- サーバAの「/var/log/zabbix/zabi_activechk_test.log」を監視するが、定期的にログを出力してから3回目のログまでしか監視していないと判断してしまい、4回目のログから読み込みなおしてしまう
サーバBのエージェントを停止・起動した場合
では次に、ログサイズの小さい側のサーバBでエージェントの停止・起動をしてみます。
すると、今度はサーバBのログを最初からすべて読み込みなおしてしまいました。
これはサーバBのZabbixエージェントを停止してから、サーバBのzabi_activechk_test.logよりサイズの大きいサーバAのzabi_activechk_test.logを読み込んだことにより、Zabbixサーバ上では、以下の動作となった結果の動作となります。
- サーバBの「/var/log/zabbix/zabi_activechk_test.log」を監視し、「/var/log/zabbix/zabi_activechk_test.logをどこまで読み込んだか」という情報が更新される(定期的にログを出力してから6回目のログの位置まで読み込んだ)
- サーバBのZabbixエージェント停止
- サーバAの「/var/log/zabbix/zabi_activechk_test.log」を監視し、「/var/log/zabbix/zabi_activechk_test.logをどこまで読み込んだか」という情報が更新される(定期的にログを出力してから9回目のログの位置まで読み込んだ)
- サーバBのZabbixエージェント起動
- ZabbixサーバはサーバBのエージェントに、「/var/log/zabbix/zabi_activechk_test.log」は定期的にログを出力してから9回目のログの位置まで読み込んでいることを通知
- サーバBの「/var/log/zabbix/zabi_activechk_test.log」を監視するが、定期的にログを出力してから9回目のログの位置分までログ容量がない状況であることをエージェントが確認
- エージェントは「ログがローテートされた」と判断し、ログファイルをはじめから読み込みなおす
運用の場面では、サーバ構築の際に既存のサーバを複製して新規構築したりすることがありますが、このとき、Zabbixエージェントの設定までコピーしたまま移行してしまうと、「Hostname」の設定までコピー元のサーバと同じ状態でZabbixエージェントが起動してしまうこととなります。この場合、今回試したような状況が発生しやすい状況となるため注意が必要です。
今回のようにログが少なく、トリガー設定や障害通知設定もない場合は被害は軽微ですが、そうでない場合は過去のログを再検知し、障害通知することでZabbixサーバに負荷がかかり、他の監視の通知に遅延が生じたりすることも考えられます。
エージェントを新規に起動する際はZabbixエージェントの設定を確認してから起動するよう注意が必要です。
Zabbixに関してのお困りごと、ご相談などございましたら下記お問い合わせよりご連絡ください。