Zabbixでは保存期間を超過したアイテムのヒストリ・トレンドや障害イベントなどのデータを定期的に自動で削除する機能が備わっており、この処理をHousekeepingと呼ぶ。
本記事では、ZabbixのHousekeepingの動作に関する調査結果と、手動でHousekeepingを実行する手順について記載する。
環境
- OS : CentOS 8.1
- Zabbix : 5.0.8
Housekeepingの実行間隔と1回あたりの削除の上限数
Housekeepingに関するパラメータは/etc/zabbix/zabbix_server.conf
に以下の2つが存在する。
①HousekeepingFrequency
HousekeepingFrequency
は、Housekeepingの実行間隔となる。0は定期実行の無効化となり、1~24時間の間で設定が可能となる。通常はデフォルト値となる1時間毎の設定で問題ないだろう。
HousekeepingFrequency=1
②MaxHousekeeperDelete
MaxHousekeeperDelete
は、各ヒストリやイベント単位で設けられる削除データ数の上限数となる。0に設定すると無制限で対象となるすべてのデータの削除を行う。デフォルトは5,000件で設定されており、たとえ1秒間隔でデータ取得を行うアイテムがあったとしても1時間あたり3,600件となることから、削除が追い付く計算となる。
MaxHousekeeperDelete=5000
もし、1時間で5,000件以上の大量のアイテムなどのデータが登録されるような環境ではHousekeepingの処理が追い付かないため、本設定のチューニング (最大1,000,000件まで設定可能) をする必要がある。
Housekeepingはデータを徐々に削除する
ZabbixのHousekeepingは、削除対象のデータを徐々に削除する仕様となっており、削除処理に伴うデータベースへの負荷を抑えるよう動作する。具体的には、削除対象のデータの最も古いデータの時間からHousekeepingFrequency
の時間の4倍の時間 (1時間毎であれば4時間) に存在するデータを削除対象とする。
定期的にHousekeepingを実行している場合は、本処理を意識する必要はないが、データの保存期間を途中で短くした場合には、データが一度では削除されず徐々に消される動作となるため注意が必要となる。
なお、データの保存期間の設定は、ZabbixのGUIにて「管理」→「一般設定」→「データの保存期間」にて設定が可能となる。
このHousekeepingの動作については、以下サイトで詳細に解説されている。
Housekeepingを手動で実行する
このようにHousekeepingが徐々に削除される仕様があるが、場合によっては時間を待たずにデータを消したい場合がある。そのような場合は、コマンドにて直接Housekeepingを実行すればい。
# zabbix_server -R housekeeper_execute
zabbix_server [9056]: command sent successfully
実行結果は、/var/log/zabbix/zabbix_server.log
に出力される。手動実行の場合のみforced execution of the housekeeper
というメッセージが表示される。
# tail -10 /var/log/zabbix/zabbix_server.log | grep house
1816:20210216:200333.918 executing housekeeper
1816:20210216:200335.168 housekeeper [deleted 64354 hist/trends, 0 items/triggers, 0 events, 0 problems, 0 sessions, 0 alarms, 0 audit, 0 records in 1.248852 sec, idle for 1 hour(s)]
1816:20210216:201236.878 forced execution of the housekeeper
1816:20210216:201236.878 executing housekeeper
1816:20210216:201237.695 housekeeper [deleted 9750 hist/trends, 0 items/triggers, 0 events, 0 problems, 0 sessions, 0 alarms, 0 audit, 0 records in 0.816834 sec, idle for 1 hour(s)]
1回実行しただけでは、最も古いデータから4時間分しか削除されないため、for
文を使って繰り返し実行させる。例えば、以下は600回のHousekeepingを実行し、少なくとも100日分のデータ (4時間 x 600回 = 100日) を削除する例となる。なお、以下コマンドでは負荷を抑えるため、sleep
による実行間隔の調整を実施している (以下のコマンドでは0.5秒で設定している)。
# for i in {1..600}; do zabbix_server -R housekeeper_execute > /dev/null 2>&1; sleep 0.5; done
0 件のコメント:
コメントを投稿