関数nodateのチェックタイミングについて

トリガーの関数nodataのチェックタイミングについて質問です。

nodataのチェックは定期的に行われているのでしょうか。それとも、値が更新されたタイミングでタイマーがセットされ、一定時間後に一度だけチェックが走るのでしょうか。

nodata(60)とした場合に比べてnodata(30)とした場合は2倍負荷がかかる(チェック回数が2倍になる)のかどうかが気になっています。

負荷が変わらないのであれば、nodata(60)とした場合と比べてnodata(30)とした場合のデメリットは何かありますでしょうか。
# 障害発生時、なるべく早くトリガーのステータスを正常に戻したいと考えています。

コメント表示オプション

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

こんにちは。

実際に試して負荷を見たわけではないので確実ではないですが、
ソースを見たところnodata()を使った関数がある場合は、30秒に一度評価されるようになっていますので、nodata(30)とnodata(60)のどちらであってもチェックされる回数は変わらないと思います。

負荷が変わらないのであれば、nodata(60)とした場合と比べてnodata(30)とした場合のデメリットは何かありますでしょうか。

環境によってはイベントやアクションの回数が増えるかもしれません、というくらいでしょうか。デメリットというほどのことではないと思いますが。

ユーザー KAZ の写真

takaiさん

■チェック先・タイミング
nodataですが、確認先はzabbix backenddbのトレンド情報を見ているみたいです。指定周期で、zabbix agentdの入っている環境を見に行っているのではないようです。

■nodata(60)とした場合と比べてnodata(30)とした場合のデメリット
・backenddbの参照回数が増える為、サーバ側のCPU等の負荷が若干上がる可能性が有ります。(アイテムの量によるかと…)

ユーザー KAZ の写真

takaiさん

下記訂正です。

■チェック先・タイミング nodataですが、確認先はzabbix backenddbのトレンド情報を見ているみたいです。指定周期で、zabbix agentdの入っている環境を見に行っているのではないようです。

backenddbのトレンド情報ではなくヒストリ情報の誤りでしたすいません。

ユーザー takai の写真

kodaiさん、KAZさん、ご返信ありがとうございます。
# 反応が遅くなり申し訳ないです。

お二方のお話を参考に、勉強の為に自分でもソースを少し読んでみました。基本的には以下のように動いていそうだと理解(思い込み?)しましたが、正しいでしょうか。

1. 30秒ごとにnodataを使っているトリガーのリストを取得
2. 1.で取得したトリガーそれぞれについて、nodataの部分が返す値をヒストリ値を基に再計算
3. 2.の結果を基に、トリガー全体のステータスを再計算

結論としてはnodata(x)のxが何であろうとチェック回数は変わらない(上記2.でnodataが返す値が違うだけ)ので、負荷はほぼ変わらない。

だんだんとZABBIXの動きが分かってきたような気がします。ご返信いただきありがとうございます。

ユーザー takai の写真

こんばんは。お世話になっています。

連投になり申し訳ないですが、nodataについて一点困った現象が発生しているので相談させて下さい。

現在、以下のような形で、ログ監視でnodataを用いています。

({host1:log[/var/log/hoge.log].nodata(30)}=0)&({host1:log[/var/log/hoge.log].str(ERR)}=1)

通常は問題無くERRを検知できているのですが、ZABBIXサーバを再起動した際、過去のエラーについて再度障害を検知してしまいます。

nodataの評価が、アイテムの最終取得からの経過時刻【又は】ZABBIX Server起動からの経過時刻、となっている為に起こるのではないかと考えていますが、何か良い対処方法(過去に検知したアラートは再検知しない)はありますでしょうか。

ちなみに一日に一度ZABBIX Serverを再起動しています。(データベースバックアップの為。)

ユーザー tmine の写真

takaiさんは書きました:

通常は問題無くERRを検知できているのですが、ZABBIXサーバを再起動した際、過去のエラーについて再度障害を検知してしまいます。

見当違いでしたらすいません。
過去のエラーについて再度障害を検知と事ですが、Server/Agentの保持しているLogの解析済み位置カウンタの影響で再起動後にLogファイルを先頭から解析しているということはないでしょうか?マニュアルのLog File Monitoring→How it worksに記述さているようです。

ユーザー KAZ の写真

takaiさん

返信遅くなりました。
zabbixのバージョンは何でしょうか?
1.6系で1.6.2以前ですとバグの可能性があります。

ユーザー takai の写真

>tmineさん
ご返信ありがとうございます。
Logファイルを線等から再度読み込んでいることも考えたのですが、アイテムの値が2度サーバ側へ転送されているわけではなく(ヒストリには1度しか記録されていない)、イベントのみが2回発生している状態です。

>KAZさん
ご返信ありがとうございます。情報がきちんとお伝えできておらず申し訳ありません。

利用しているのは1.4.5をソースからコンパイルしたものになります。

ソースのevaluate_NODATAで以下の記述がある為、サーバを再起動するとアラートが発生してしまうのは仕方が無いような気もするのですが、もし回避する方法がありましたら(思いつくようでしたら)教えて頂けると幸いです。

if((CONFIG_SERVER_STARTUP_TIME + parameter > now) || (item->lastclock + parameter > now))
{
strcpy(value,"0");
}
else
{
strcpy(value,"1");
}

ユーザー KAZ の写真

takaiさん

利用しているのは1.4.5をソースからコンパイルしたものになります。

なるほど…
私がメインで使っているのは1.4.2(お客様の都合でバージョンアップが簡単に行えない)で、その様な事象は発生しておらず、1.6.2で同事象を確認しています。

1.6系からのバグかと思ったのですが、1.4.5からのバグかもしれません。1.6.3で「サーバ再起動後の「nodata」関数の間違った動作を修正」と言うバグ修正が入ってますのでソースを確認してみます。

ユーザー KAZ の写真

takaiさん

※※※ 下記のソースでif逆に書いていたので修正しました。 ※※※

ソースを確認しました。
ご指摘通り、下記のif文の問題です。
<code>if (CONFIG_SERVER_STARTUP_TIME + parameter > now || item->lastclock + parameter > now)</code>

このバグが混入されたのはzabbix1.4.3からで1.4系は対応されていないようです。
1.6系は1.6.3から対応されていました。

evaluate_NODATAを下記のように修正いただければ回避できると思います。(1.6.3相当のソースです。)

<code>
static int evaluate_NODATA(char *value,DB_ITEM *item,int parameter)
{
int now;
int res = SUCCEED;

zabbix_log( LOG_LEVEL_DEBUG, "In evaluate_NODATA()");

now = time(NULL);

if(item->lastclock + parameter > now){
strcpy(value,"0");
}else{
if(CONFIG_SERVER_STARTUP_TIME + parameter > now){
res = FAIL;
}else{
strcpy(value,"1");
}
}

zabbix_log( LOG_LEVEL_DEBUG, "End of evaluate_NODATA()");

return res;
}
</code>

パッチを作った方が良いでしょうか?
本業が忙しいのでちょっと時間がかかるかもしれません。

ユーザー takai の写真

KAZさん

ご確認ありがとうございます。
なるほど、1.6系だと対応されているのですね。

可能でしたら、パッチを作成して頂けると幸いです。
# ちなみに、作成いただけるとしたら、ver. 1.4.5に対するパッチでしょうか。それとも、1.4系最新の ver. 1.4.6 へのパッチになるでしょうか。

まずは返信ありがとうございます。
対応して頂く時間があるようでしたら、ご対応いただければ幸いです。

ユーザー KAZ の写真

takaiさん

返信遅くなりました。

可能でしたら、パッチを作成して頂けると幸いです。
# ちなみに、作成いただけるとしたら、ver. 1.4.5に対するパッチでしょうか。それとも、1.4系最新の ver. 1.4.6 へのパッチになるでしょうか。

1.4.5と1.4.6両方作りました。

今、zabbix-jpでパッチを提供できる場所を作ろうと話しております。なので、パッチ提供はもう少々お待ち下さい。

ユーザー takai の写真

KAZさん

1.4.5と1.4.6両方作りました。

ありがとうございます。ご提供頂ける状態になりましたら、ローカルでの動作確認後、利用させて頂く予定です。

引き続きよろしくお願い致します。

ユーザー KAZ の写真

takaiさん

お待たせしました。
ZABBIX-JP フォーラムのバグ報告にパッチのリンクを張りました。
只、色々あって1.4.6用のみです。

1.4.5様が必要ならば、zabbix-jpアカウントのpmで送りしますが必要ですか?

ユーザー takai の写真

KAZさん

お忙しい中ご対応いただきありがとうございます。
1.4.5用のパッチも頂きたいのですが、お送り頂けますでしょうか。
お手数をおかけしますが、よろしくお願い致します。

ユーザー KAZ の写真

takaiさん

送りました。
zabbix-jpアカウントの受信箱を覗いて見て下さい。
保存する時、タブが空白にならない様に気を付けて下さい。

では!

ユーザー takai の写真

KAZさん

確認しました。ご対応ありがとうございます。
適用した結果については、後日フィードバックできればと思います。
(少し時間がかかるかもしれませんが…。)

ユーザー takai の写真

こちら、ご報告が遅くなってしまい、大変申し訳ありません。

個別にいただいたパッチと1.4.6 のパッチ、両方を試しまして、どちらも問題が解消されていることを確認致しました。1.4.5のパッチを適用した環境で3か月ほど実運用をしましたが、問題なく動作しております。

ご対応いただき本当にありがとうございました。