現在位置: ホーム / 製品・サービス / 統合システム監視 MIRACLE ZBX / MIRACLE ZBX - Zabbix テック・ラウンジ / Housekeeperによるデータ削除を実行するRuntime Controlのオプション

Housekeeperによるデータ削除を実行するRuntime Controlのオプション

今回はRuntime Control機能のオプションの中からHousekeeperによりデータの削除を実行する機能について詳しく解説します。

はじめに

以前に書いた記事ではRuntime Control機能について解説を行いました。

Runtime Control 機能の解説

今回はRuntime Control機能のオプションの中からHousekeeperによりデータの削除を実行する機能(以下、本機能)を詳しく解説します。

本機能を実行すると、実行したタイミングでHouseKeeperによるデータの削除を実行することができます。

使い方

Zabbixサービスを起動するコマンド(zabbix_server,zabbix_proxy)に”-R”を付与し、その引数としてオプションを指定する文字列(housekeeper_execute)を渡し実行します。

実行例)

 # zabbix-server -R housekeeper_execute

解説 

本機能は他の Runtime Controlのオプションと同様に実装されています。

[参照: Runtime Control 機能の解説]

コマンドを実行すると既に起動しているZabbixサービスの親プロセスに対して、シグナルと引数のデータを送信します。シグナルを受け取った親プロセスはHouseKeeperプロセスに対してシグナルを送ります。

更にHouseKeeperプロセスのシグナルハンドラが親プロセスからシグナルを受け取ると最終的には下記の関数をコールします。

src/zabbix_server/housekeeper/housekeeper.c

154 void zbx_housekeeper_sigusr_handler(int flags)
155 {
156   if (ZBX_RTC_HOUSEKEEPER_EXECUTE == ZBX_RTC_GET_MSG(flags))
157   {
158     if (0 < zbx_sleep_get_remainder())
159     {
160       zabbix_log(LOG_LEVEL_WARNING, "forced execution of the housekeeper");
161       zbx_wakeup();
162     }
163     else
164       zabbix_log(LOG_LEVEL_WARNING, "housekeeping procedure is already in progress");
165   }
166 }

この処理では、Housekeeperプロセスがスリープする時間を設定するためのカウンタの値を取得します。
この値が0より大きい場合はプロセスがスリープしてしていることを意味します。
この値を0に書き換えることにより、スリープを中断してデータ削除処理に遷移させます。

また、この値が0である場合は何もせずに処理を戻します。0であることは、Housekeeperプロセスがデータ削除処理の実行中か起動直後であることを意味します。
つまり、プロセスがそれらの状態にある場合に、Housekeeperによるデータ削除が実行されないようにするためのミューテックスロックとしての機能が実装されています。

 Housekeeper(zbx-tl-028用)

 

HouseKeeperプロセスの処理を見て行きます。HouseKeeperプロセスは大まかには起動した後、スリープとデータの削除を延々と繰り返し行います。

src/zabbix_server/housekeeper/housekeeper.c

804 ZBX_THREAD_ENTRY(housekeeper_thread, args)
805 {
...
832   for (;;)
833   {
834     sec = zbx_time();
835
836     if (0 == CONFIG_HOUSEKEEPING_FREQUENCY)
837       zbx_sleep_forever();
838     else
839       zbx_sleep_loop(sleeptime);
...
843     time_slept = zbx_time() - sec;
844
845     hk_period = get_housekeeping_period(time_slept);
...
858     d_history_and_trends = housekeeping_history_and_trends(now);
...
891     if (0 != CONFIG_HOUSEKEEPING_FREQUENCY)
892       sleeptime = CONFIG_HOUSEKEEPING_FREQUENCY * SEC_PER_HOUR;
...
897   }
898 }

スリープ処理はデータの削除処理の自動実行が無効である(HousekeepingFrequencyが0である)かにより分岐します。※HousekeepingFrequency(zabbix_server.conf)
スリープ処理を終了した後はデータの削除処理に遷移し、データの削除処理が終了すると、またスリープ処理に戻ります。

各々のスリープ処理の実装を見て行きます。

1. データの削除処理の自動実行が無効である場合

560 void zbx_sleep_forever(void)
561 {
562   sleep_remains = 1;
...
566   do
567   {
568     sleep(1);
569   }
570   while (0 != sleep_remains);
...
573 }

Housekeeperによるデータの削除処理の自動実行を無効に設定した場合でも、Housekeeperプロセスは起動され、1秒スリープすること(sleep(1))を延々と繰り返します。
この実装は、自動実行を無効している場合でも、本機能を使用できるようにするためのものです。

本機能の実行によりカウンタ(sleep_remains)が0にセットされると、sleep()を繰り返すループから抜けます。
これにより、データの削除処理に遷移します。

 2. データの削除処理の自動実行が有効である場合

Housekeeperによるデータの削除処理の自動実行を無効に設定した場合でも、Housekeeperプロセスは起動され、1秒スリープすること(sleep(1))を延々と繰り返します。
この実装は、自動実行を無効している場合でも、本機能を使用できるようにするためのものです。

本機能の実行によりカウンタ(sleep_remains)が0にセットされると、sleep()を繰り返すループから抜けます。
これにより、データの削除処理に遷移します。

542 void zbx_sleep_loop(int sleeptime)
543 {
...
547   sleep_remains = sleeptime;
...
551   do
552   {
553     sleep(1);
554   }
555   while (0 < --sleep_remains);
...
558 }

カウンタ(sleep_remains)の分だけ、1秒スリープすることを繰り返す実装となっています。
本機能の実行によりカウンタ(sleep_remines)が0にセットされると、スリープ処理を中断してデータを削除する処理に遷移します。

ところで、本機能を使用するとどの範囲のデータが削除されるのでしょうか?

ヒストリ/トレンドデータについては、アイテムの保存期間より古いデータが存在した場合、最も古い時刻のデータから、[4 * “HouseKeeperがスリープした時間”]分が削除されます。
ただし、スリープした時間が1時間未満である場合は4時間(4*1時間)分となります。

“スリープした時間”にはスリープ処理が終わった時刻から、スリープ処理に入る直前の時刻を引いた時間が入ります。(l.843)

例えば、HousekeepingFrequency(zabbix_server.conf)に12(時間)を設定していたとしても、プロセスが2時間スリープした時点で本機能を実行した場合では、8時間(4*2時間)分のデータが削除されるこになります。

データを早く削除したい場合等の目的で、繰り返し(1時間未満の間隔で)実行すれば、そのつど4時間分のデータが削除されることになります。

 関連情報

 

注意事項

本ドキュメントの内容は、予告なしに変更される場合があります。
本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、当社はその損害についての責任を負いません。あくまでお客さまのご判断にてご使用ください。

 

MIRACLE ZBX 製品・サポートサービス 詳しくはこちら

MIRACLE ZBX Virtual Appliance V3.0 評価版のお申し込み

製品・サービスについてのお問い合わせ

お問い合わせフォームMIRACLE ZBX製品やサポートサービスについてのご相談やご質問は、「お問い合わせフォーム」よりお気軽にお問い合わせください。