「Zabbix housekeeper processes more than 75% busy」の対処方法について

現在「Zabbix housekeeper processes more than 75% busy」が20時間以上継続してしまい、
復旧後、おおよそ1時間後に再度「Zabbix housekeeper processes more than 75% busy」が
発生してしまいます。
※繰り返し発生しています。

housekeeper実行から1~2時間ぐらいは発生する認識で、その場合は特に問題ないと認識しておりますが、
長時間に及ぶ為、監視の遅延が発生し障害の発生の気付きが遅れる等を懸念しております。

対処方法等、ご教授願いますでしょうか。

【サーバ構成】
「OS」CentOS Linux release 7.6.1810 (Core)
「CPU」4CPU
「メモリ」8GB

【ソフトウェア関連】
・zabbix_server (Zabbix) 4.0.24
・psql (PostgreSQL) 9.2.24

【システム情報】
・「ホスト数 (有効/無効/テンプレート)」953(735 / 65 / 153)
・「アイテム数 (有効/無効/取得不可)」19602(16185 / 3188 / 229)
・「トリガー数 (有効/無効 [障害/正常])」8543(7073 / 1470 [47 / 7026])
・「1秒あたりの監視項目数(Zabbixサーバーの要求パフォーマンス)」115.23

【zabbix_server.logのhousekeeper部分のログ】
16412:20201004:115414.409 housekeeper [deleted 1467427 hist/trends, 40000 items/triggers, 490 events, 1400 problems, 0 sessions, 0 alarms, 0 audit items in 76220.449075 sec, idle for 1 hour(s)]
16412:20201005:115506.827 housekeeper [deleted 1486042 hist/trends, 111700 items/triggers, 350 events, 1110 problems, 0 sessions, 0 alarms, 0 audit items in 82851.759024 sec, idle for 1 hour(s)]
16412:20201006:110007.910 housekeeper [deleted 1501746 hist/trends, 73241 items/triggers, 1310 events, 2764 problems, 0 sessions, 0 alarms, 0 audit items in 79500.478997 sec, idle for 1 hour(s)]
16412:20201007:101037.832 housekeeper [deleted 1502485 hist/trends, 60000 items/triggers, 106 events, 2253 problems, 0 sessions, 0 alarms, 0 audit items in 79829.328265 sec, idle for 1 hour(s)]
16412:20201008:092028.804 housekeeper [deleted 1502832 hist/trends, 60000 items/triggers, 14 events, 2350 problems, 0 sessions, 0 alarms, 0 audit items in 79790.348986 sec, idle for 1 hour(s)]

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

PostgreSQLのパフォーマンスを向上させるか、監視の規模を小さく
する、もしくはサーバーを分割することが考えられます。

PostgreSQLのチューニングは何か行われていますか?

TNK様

早々のご回答ありがとうございます。

規模は小さくすることは難しいため、サーバを分割するという方向で
検討する必要があります。
ちなみに、サーバの分割とは、zabbixプロキシを使用せず、
ただ単にサーバを幾つか用意し、ある程度のグループでそれぞれのサーバで
監視するという事でしょうか?

PostgreSQLのチューニングした項目は以下となります。

max_connections = 200
shared_buffers = 2GB
work_mem = 8MB
checkpoint_segments = 128
checkpoint_timeout = 60min
effective_cache_size = 4GB

他にチューニングする項目等はありますでしょうか。
ご教授の程、よろしくお願いいたします。

ユーザー TNK の写真

ちなみに、サーバの分割とは、zabbixプロキシを使用せず、
ただ単にサーバを幾つか用意し、ある程度のグループでそれぞれのサーバで
監視するという事でしょうか?

いいえ違います。

Zabbixサーバーは、
 ・Webサーバー
 ・DBMSサーバー
 ・Zabbixサーバー(のデーモン)
と分割できるので、それぞれを別のサーバー機器上で稼働させるこ
とができます。

Zabbixプロキシを使用したとしても、中心となるPostgreSQLの処理
パフォーマンスが向上しなければ改善されません。

PostgreSQLのチューニング項目は後で確認してみます。

TNK様

ありがとうございます。

分割の件、ご教授いただきましてありがとうございます。
知識不足で申し訳ございません。
ご教授いただきました内容で具体的にどうすれば良いか自分で勉強してみます。

チューニングの件、お手数おかけいたしますが、
よろしくお願いいたします。

ユーザー Yasumi の写真

zabbix_server.confの「HousekeepingFrequency」と「MaxHousekeeperDelete」の値はどうなっていますでしょうか。
見たところ、24H間隔になっていますでしょうか? 1時間ごとにしていないのであれば、理由は何でしょうか。

「deleted 1467427」となっているので、相当量の削除をしています。
これだけの情報を削除できる設定がなっているか、まず確認する必要があります。

Yasumi様

早々のご回答ありがとうございます。

HousekeepingFrequencyもMaxHousekeeperDeleteも指定をしていない為、
デフォルト値になっていると認識しております。

HousekeepingFrequencyのデフォルト値1、MaxHousekeeperDeleteのデフォルト値5000と
認識しておりますが合っておりますでしょうか。

「deleted 1467427」から判断して、MaxHousekeeperDeleteの最大指定値は1000000とする
必要がありますでしょうか。
そうしたところで最大値を超えた値の為、ここだけの設定では解決できないでしょうか。

ご教授の程、よろしくお願いいたします。

ユーザー Yasumi の写真

MaxHousekeeperDeleteの値をまず「50000」や「100000」あたりにしてみてください。

housekeeperが何回も処理されるにつれて、削除量に追いついていく可能性があります。

Yasumi様

ありがとうございます。
MaxHousekeeperDeleteの値変更の件、承知しました。

色々と手続きがあるので、直々には設定変更ができませんが、
後日設定変更を実施してみます。
設定変更後、経過観察した上で、ご報告させていただきます。

また、何度も質問して申し訳ございませんが、以下の点を確認させてください。
例えばMaxHousekeeperDeleteの値を「100000」に変更することにより、
メモリ使用率やCPU使用率は結構上がるものでしょうか。

よろしくお願いいたします。

ユーザー Yasumi の写真

一般的に削除量が増えることによって、housekeeperの負荷率が上昇する可能性があります。
それによって多少リソース使用率に影響することもります。

しかし、現在はそもそもhousekeeperの負荷率が張り付いており、データを削除しきれていないと思われます。
削除量を上昇させて様子を見るのはひとつの手だと考えます。

Yasumi様

ご教授頂きまして、ありがとうございます。
本件、承知いたしました。

Yasumi様

すみません。
手続きの為、再度調査をしていたところ、以下の点が気になりました。
大変申し訳ございませんが、ご教授願います。

公式サイトに記載されているMaxHousekeeperDeleteの説明について、
以下の一文がありました。

「applies only to deleting history and trends of already deleted items.」
https://www.zabbix.com/documentation/4.0/manual/appendix/config/zabbix_server?s[]=maxhousekeeperdelete

上記記載が正しいのあれば、MaxHousekeeperDeleteの値を上げても
監視している項目の値は対象にならない為、housekeeperの時間は減少しないように思えます。
私の認識に誤りがありましたら、ご指摘して頂けますでしょうか。

ユーザー Yasumi の写真

「監視している項目の値は対象にならない為」とはどういう意味でしょうか。

housekeeperは、保存期間を終了したヒストリやトレンドなどの情報を削除する処理です。
MaxHousekeeperDeleteは、一度に削除できる量を規定しています。
※MaxHousekeeperDeleteの値が高いほどDBに負荷を掛けます

housekeeperの負荷率が上昇する理由は、例えば「in 76220.449075 sec」もの時間を要していることが原因です。
housekeeperの負荷率は、housekeeperが稼働している時間だけ上昇します。
ずっと処理が動き続けているため、housekeeperの負荷率が上がったままになっています。
この状態はデータを削除する処理が追いついていないと推測されるので、MaxHousekeeperDeleteの値を上げることを提案しました。

私の手元の環境では、MaxHousekeeperDeleteを50000にしていて、毎回の処理でヒストリとトレンド情報が平均で23000件程度削除されています。
そのため、housekeeperの稼働時間は平均11秒ほどになっており、その時間のみhousekeeperの負荷率が上昇しています。
※参考例に、手元情報を置いておきます。

Yasumi様

ご回答ありがとうございます。
返信が遅くなってしまい、申し訳ございません。

> 「監視している項目の値は対象にならない為」とはどういう意味でしょうか。

につきまして、説明が悪く申し訳ございません。

前述させていただきましたMaxHousekeeperDeleteの説明として、
「applies only to deleting history and trends of already deleted items.」の直訳は、
「すでに削除されたアイテムの履歴とトレンドの削除にのみ適用されます。」となりますので、
削除されたアイテム(もう監視していないアイテム)に対して有効であり、
削除していないアイテム(監視しているアイテム)に対しては無効なのでは?と疑問を抱いた次第です。

また、Yasumi様の手元環境を踏まえ、色々とご教授いただきましてありがとうございます。

最後に大変恐縮ですが、Yasumi様が添付していただきましたHousekeeperの各グラフですが、
どのように設定されておりますでしょうか。
もし可能でしたら、テンプレートを頂けないでしょうか。
こちらでも同じものを設定してみた結果、Yasumi様の環境とどれぐらい違うのか
比較してみたいと考えております。
よろしくお願いいたします。

ユーザー Yasumi の写真

確かにMaxHousekeeperDeleteの記述からはそう読むことができそうですね。。。
私が使っている感触的には、そんなことはない気はしているので、詳細な部分は確認しようと思います。

各情報の収集のアイテムは下記になっています。

・Housekeeper削除処理時間
log[/var/log/zabbix/zabbix_server.log,"housekeeper.*in ([0-9]+)",,,skip,\1]
浮動小数、単位s

・Housekeeperデータ削除量
log[/var/log/zabbix/zabbix_server.log,"housekeeper.*deleted ([0-9]+)",,,skip,\1]
整数

・Housekeeper負荷率 ※これはデフォルトで設定があります
zabbix[process,housekeeper,avg,busy]

Yasumi様

早々のご回答ありがとうございます。

お時間ある時で結構ですので、詳細な部分をご確認して頂けたら幸いです。
分かりましたら、結果の方ご教授ください。

収集アイテムにつきまして、ありがとうございます。
後程、設定してみようと思います。