MaxHousekeeperDeleteに関して説明します。
MaxHousekeeperDeleteはdefaultが5000になっています。
これはHousekeepingFrequencyに設定した時間に削除する最大値と思うと一部は正しい、一部は間違いです。
HousekeepingFrequencyを24にしてHousekeeperをすると一日削除する最大値が5000行になりそれ以上のデータは削除はできなくなります。正しいでしょうか?そしたら、データは積み重なっていつかDBが溢れます。
ですのでMaxHousekeeperDeleteはHousekeeperには関係があるですが私たちが知っている処理ではなく、ITEMが削除された場合実行されるパラメタです。
今まで、削除対象になるITEMのデータが1000万件だとすると一気に削除するならDBに大きい負荷がかかります。
そこで使われているものがMaxHousekeeperDeleteになります。
削除されたITEMのデータは一回に多くてもMaxHousekeeperDelete以上は削除しないことです。
この作業を確認するためにはITEMを削除してみてください。
そうするとhousekeeperテーブルに削除したITEMがInsertされます。
このITEMはデータが全部削除されるとテーブルからなくなります。
私がMaxHousekeeperDeleteに説明する理由は
Housekeeperが重くなっていることでMaxHousekeeperDelete調整する人がいます。そこで削除したITEMがある場合は効果的ですが、削除したITEMがなかった場合はDBのチューニングお願いいたします。
ご参考まで
以上です。
2017年3月25日土曜日
2017年3月22日水曜日
ZabbixのHousekeeperについて
Housekeeperとは、Zabbixにてアイテムが収集したデータをいつまで保存するかを決めてそれ以上古くなったデータを削除するプロセスを言います。
この説明はzabbix 3.0を基準にします。
赤い丸のところにヒストリ保存期間とトレンド保存期間があります。
各アイテムことに保存期間を設定することができます。
2.データ保存期間の一括更新
データの保存期間を一括で管理した場合は管理 → 一般設定 → 右上のデータの保存期間を選択します。
データの削除処理を有効のところにチェックを入れると
ZabbixのHousekeeperが動作することになります。
ここには見えないですが上のページの下の部分を見るとヒストリのところとトレンドのところがあります。
アイテムのヒストリ(またはトレンド)の保存期間を上書きをチェックすると各アイテムで書いた保存期間が上書きされます。一括更新にはよいと思います。
保存期間を急に短くしても、データの量は急激にはならないです。
その理由はZabbixの処理がDBに負荷をかけないよう徐々に削除するからです。
計算式は
rule->min_clock = MIN(keep_from, rule->min_clock +
HK_MAX_DELETE_PERIODS * CONFIG_HOUSEKEEPING_FREQUENCY * SEC_PER_HOUR);
です。
計算式の解説:
zabbix_server.confファイルにあるHousekeepingFrequencyがあります。上の式CONFIG_HOUSEKEEPING_FREQUENCY を意味します。
HousekeepingFrequencyはHousekeeperのサイクル周期です。単位は時間になります。
HousekeepingFrequencyが1のことは1時間に1回の作業です。2の場合は2時間に1回の作業です。
HK_MAX_DELETE_PERIODS は4です。
SEC_PER_HOURは1です。
min_clockは削除対象になるデータ中に一番古いものです。
keep_fromはWEBページにて設定した保存期間の数字になります。
例)今まで保存期間30日のものを20日に変更した場合どうなるか?HousekeepingFrequency=1にする。
解説:この計算はunix timeになります。現在が一番高い数字になります。
結局20日までくるために、一番古いデータの日付(30日前)+(HousekeepingFrequency*4))時間にして削除しますので、10日分を削除するために60時間かかることになります。
20日より古いデータがなくなるとその日からは20日が基準になり1時間分のデータが削除されます。
3.手動作成
データの削除処理を有効のチェックを外します。または、HousekeepingFrequency=0セットします。
そうするとHousekeeperは自動削除は停めることになります。
保存データを手動削除する対象になるテーブルは
history, history_str, history_log, history_uint, history_text, trends, trends_uint, service_alarms, auditlog, events, sessions になります。
定期的にこのテーブルを削除するとHousekeeperと同様な作業ができます。
作業内容は
http://naiggy.blogspot.com/2017/03/zabbix-housekeeper.html
ご参照ください。
定期的に削除するためにはJob Arrangerをお勧めします。
Job ArrangerのMysql用は
https://naiggy.blogspot.jp/2017/03/job-arranger-install.html
PostgreSQL用は
https://naiggy.blogspot.jp/2017/03/job-arranger-install-centos-7-postgresql.html
ご参照ください。
以上です。
Zabbix Housekeeper 手動実行
Zabbix Housekeeper に関して
http://naiggy.blogspot.com/2017/03/zabbixhousekeeper.html
参考ください。
手動実行は
僕の場合は60日以前のデータを削除するスクリプトです。
60のところだけを修正して必要な数字を入れてください。
delete from history_str where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from history_log where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from history_uint where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from history_text where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from trends where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from trends_uint where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from service_alarms where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from auditlog where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from events where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from sessions where lastaccess < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from history_str where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from history_log where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from history_uint where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from history_text where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from trends where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from trends_uint where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from service_alarms where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from auditlog where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from events where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from sessions where lastaccess < extract('epoch' from current_timestamp - interval'60 days') ;
http://naiggy.blogspot.com/2017/03/zabbixhousekeeper.html
参考ください。
手動実行は
僕の場合は60日以前のデータを削除するスクリプトです。
60のところだけを修正して必要な数字を入れてください。
Mysql
delete from history where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));delete from history_str where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from history_log where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from history_uint where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from history_text where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from trends where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from trends_uint where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from service_alarms where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from auditlog where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from events where clock < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
delete from sessions where lastaccess < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 day));
PostgreSQL
delete from history where clock < extract('epoch' from current_timestamp - interval'60 days') ;delete from history_str where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from history_log where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from history_uint where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from history_text where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from trends where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from trends_uint where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from service_alarms where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from auditlog where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from events where clock < extract('epoch' from current_timestamp - interval'60 days') ;
delete from sessions where lastaccess < extract('epoch' from current_timestamp - interval'60 days') ;
登録:
投稿 (Atom)

