アクティブチェックとパッシブチェックの違いについて(その他2点)

現在、サーバ監視にZabbixを使い始めようと思って最近検証を始めました。
私なりに検証はしてみましたが、挙動が不明な点がありましたので、3点質問したい事があります。
ご教授いただければ幸いです。

①アクティブチェックとパッシブチェックの違いについて
 Zabbixによる機能として、アクティブチェックとパッシブチェックにおける監視機能の違いは
 存在しないと思って良いのでしょうか。
 下記フォーラムにて、アクティブチェックのデメリットはエージェントが入っているサーバがダウンしていることを検知するのが難しいということだけ、と記載がありますがその通りでよいのでしょうか。
 https://www.zabbix.com/forum/showthread.php?t=20971

②Zabbixが導入されているサーバに存在しているデータ項目について
 監視対象ホスト情報や監視設定のテンプレート等Zabbixにて監視を行う設定は全てDBに格納されていると考えているのですが、正しいでしょうか。
 以前自分で検証した時に、DBサーバを停止した状態でZabbixダッシュボードからテンプレート作成を行いましたが、正常に追加され、DBサーバ復旧後もそのテンプレートが残っておりました。
 DBサーバに全データが格納されているのであれば、DBサーバ停止時には作成・更新できないと思っているのですが、この挙動は正しいのでしょうか。

③DBサーバフェイルオーバー時のZabbixの挙動について
 Zabbix稼働中にDBサーバ(AWS_RDS:Postgres)のフェールオーバーを実施いたしましたが、
 フェールオーバー直後は問題なく動作していたZabbixサーバが、
 数十分後には使用していたpgpoolの接続が切断され、異常状態となりました。
 DBサーバのフェールオーバーはZabbixサーバプロセスは停止して実施するべきなのでしょうか。

コメント表示オプション

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

(1)アクティブチェックとパッシブチェックの違いについて

大きな違いは、ログ監視(log、logrt、eventlog)はアクティブチェックでしか
監視できません。
あと、アクティブチェックだけしか利用しない場合は、エージェント側から
データが送られてこないのか障害が発生して送ることができていないかを判別
する方法が無いので、パッシブチェックでagent.pingなどを実行した方が、
より確実にエージェントと通信できる状態であるのかを確認できると思います。

(2)Zabbixが導入されているサーバに存在しているデータ項目について

Webフロントエンドは、DBMSが稼働していることは必須です。
DBMSを停止したのであれば、監視項目の登録も変更もできません。

(3)DBサーバフェイルオーバー時のZabbixの挙動について

確実にということであれば、Zabbixサーバを停止しておくのが確実です。
稼働したままでも、再接続しに行くはずなのですが、どのようにフェール
オーバーさせたのか、pgpoolやRDSの構成や設定も合わせて情報を頂けれ
ば調べられるかもしれません。

ユーザー kobayashi_masayuki の写真

ご連絡遅くなり、申し訳ございません。
ご回答ありがとうございます。

>大きな違いは、ログ監視(log、logrt、eventlog)はアクティブチェックでしか
>監視できません。
>あと、アクティブチェックだけしか利用しない場合は、エージェント側から
>データが送られてこないのか障害が発生して送ることができていないかを判別
>する方法が無いので、パッシブチェックでagent.pingなどを実行した方が、
>より確実にエージェントと通信できる状態であるのかを確認できると思います。
承知いたしました。
ありがとうございます。

>Webフロントエンドは、DBMSが稼働していることは必須です。
>DBMSを停止したのであれば、監視項目の登録も変更もできません。
手順が間違っていた可能性が高いので、
こちらで再調査を行います。

>確実にということであれば、Zabbixサーバを停止しておくのが確実です。
>稼働したままでも、再接続しに行くはずなのですが、どのようにフェール
>オーバーさせたのか、pgpoolやRDSの構成や設定も合わせて情報を頂けれ
>ば調べられるかもしれません。
Zabbixサーバを停止することで、対応できました。ありがとうございます。

また1点お伺いさせていただけないでしょうか。
現在エージェントレスでICMP監視のシンプルチェックを行っておりますが、
タイムアウトやパケットロスのため、1週間に1度程度失敗する事象が発生しております。

そこでICMP監視のシンプルチェックの挙動を解析するためにいろいろ調査しておりましたが、
シンプルチェックのfpingにおけるデフォルト値の意味合いがよくわかっておりません。
https://www.zabbix.com/documentation/jp/2.0/manual/config/items/itemtype...
上記ページのICMPチェックパラメータのデフォルト値、制限、説明という表をみるとfpingのデフォルト値が記載されておりますが、
【packets パケット数 ターゲットにリクエストするパケットの数 -C 3】
とありますが、デフォルト値の3がfpingではなく、Serverという項目になっております。
これはfpingとしての引数ではないのでしょうか?
fpingとServerという項目について違いをご存知でしたらご教授いただけないでしょうか。

ユーザー heya の写真

こんにちは。

たぶんこういうことじゃないかと。
「fping」は、fping コマンドの引数で何も指定しなかったときに使われる値。
「server」は、fping コマンドではデフォルト値は無しだが、zabbix-server の内部で fping を呼び出すときにその引数を指定している。つまり、アイテムのパラメーターで指定しないときにはこの欄に書いてある値を指定する。

例えば、単にコマンドライン上で「fping アドレス」としたときは
・連続したパケットの待ち時間は1000ms
・パケットサイズは 56 or 68
・タイムアウトは 500ms
・-C を指定しないので、繰り返しモードではなくデフォルトのモードで動く
で動作し、zabbix のアイテムで、パラメーター無しで icmpping とだけ指定したら zabbix 内部で実行されるコマンドは「fping -C 3 アドレス※」となり、icmpping[,5,,,1000] としたら「fping -C 5 -t 1000 アドレス※」を実行する・・・ということ。
#target を指定しなければそのアイテムが登録してあるホストが対象になります。

※厳密にはもう少し違います。C のソースが読めるなら src/libs/zbxicmpping/icmpping.c の process_ping() をご覧になると細かい動作が分かると思います。params という変数(fping6 なら params6)が実際に実行するコマンドになります。

ユーザー KAZ の写真

kobayashi_masayukiさん、heyaさん


たぶんこういうことじゃないかと。
「fping」は、fping コマンドの引数で何も指定しなかったときに使われる値。
「server」は、fping コマンドではデフォルト値は無しだが、zabbix-server の内部で fping を呼び出すときにその引数を指定している。つまり、アイテムのパラメーターで指定しないときにはこの欄に書いてある値を指定する。

その通りですね。

以下、fpingのhelpの抜粋(添付に全文を付けました。)

-b n amount of ping data to send, in bytes (default 56)
-p n interval between ping packets to one target (in millisec)
(in looping and counting modes, default 1000)
-t n individual target initial timeout (in millisec) (default 500)

以下は2.2.1のソースでパラメータ「packets」の値を取得しているところ
src\zabbix_server\pinger\pinger.cのparse_key_params関数
countという変数がパラメータ「packets」の値を格納する変数です。
何故かオンコーディングしてますねーA(^^;
1~10000の間じゃないとエラールートに流れて「Number of packets \"{変数countの値}\" is not between 1 and 10000.」とエラーメッセージがログに出力されると思います。

if (0 != get_param(params, 2, buffer, sizeof(buffer)) || '\0' == *buffer)
{
*count = 3;
}
else if (FAIL == is_uint31(buffer, (uint32_t*)count) || MIN_COUNT > *count || *count > MAX_COUNT)
{
zbx_snprintf(error, max_error_len, "Number of packets \"%s\" is not between %d and %d.",
buffer, MIN_COUNT, MAX_COUNT);
return NOTSUPPORTED;
}