Zabbix上のホストの自動削除のタイミングについて
おわかりになる方、お教えください。
AWSのEC2インスタンスをオートスケールで動的にスケールアウト/スケールインする環境にて、Zabbixでインスタンスの監視などを行おうとしております。
スケールアウト時のZabbix側のホストについては自動登録は問題なくできるようになりました。
スケールインした際のZabbix側のホストの自動削除について、Zabbixのディスカバリをきっかけに、以下サイトのスライドの19ページ近辺を参考に設定をしております。
https://www.slideshare.net/qryuu/zabbix-82271571
スケールイン時にZabbix上からのホストの自動削除も動いている状況ですが、実際にホストが削除されるタイミングが非常に遅いと感じており、その時間を短縮したいと考えております。
しかし削除されるタイミングがなにで決定されているか分からないため、どの設定の変更すれば、削除されるまでのタイミングをコントロールできるかが分かっておりません。
各種バージョン
Zabbixサーバ側
- zabbix-agent-4.0.30-1.el7.x86_64
- zabbix-sender-4.0.30-1.el7.x86_64
- zabbix-server-mysql-4.0.30-1.el7.x86_64
- zabbix-web-4.0.30-1.el7.noarch
- zabbix-web-japanese-4.0.30-1.el7.noarch
- zabbix-web-mysql-4.0.30-1.el7.noarch
Zabbix Proxy
- zabbix-proxy-mysql-4.0.32-1.el7.x86_64
Zabbix Agent
- zabbix-agent-4.0.33-1.el7.x86_64
環境
1.AWSのEC2でElasticIPをつけたインスタンスを用意し、ここにZabbix Proxyをインストールしております。
2.ZabbixサーバはAWS外の別なネットワークにあります。
3.ZabbixサーバとProxyの間はグローバル経由となっており、PSKで暗号化しています。
4.Proxyモードはパッシブとしています。
5.AWSのVPC内サブネットは、192.168.0.0/24となっています。
ZabbixサーバのWebUIから設定→ディスカバリを以下のように設定しています。
ディスカバリルール
1. プロキシによるディスカバリ 環境1のZabbix Proxyを指定
2. IPアドレスの範囲 192.168.0.0/24
3. 監視間隔 5m
4. チェック チェックのタイプ: Zabbixエージェント キー: "system.uname"
5. デバイスの固有性を特定する基準 IPアドレス
6. 有効にチェック
次に設定→アクション→イベントソース ディスカバリから以下のように設定しています。
アクション
1. 計算のタイプ And/Or A and B and C
2. 実行条件
A. ディスカバリルール 上記ディスカバリルールに設定した名前
B. アップタイム/ダウンタイム 以上 600
C. ディスカバリのステータス 等しい Down
3. 有効にチェック
実行内容
1. デフォルトの件名・メッセージは省略
2. 実行内容
・ユーザにメッセージを送信(省略)
・ホストを削除
自分としてはこう考えておりました。
ア. ディスカバリルールの監視間隔(今回は5m)ごとに、そのネットワーク内のZabbixエージェントの指定したキー(今回は"system.uname")の値が返ってきているかをチェック
イ. 前回キーの値が返ってきていたホストが今回の監視タイミングでは値が返ってこなかった場合、ディスカバリのステータスがDownと判定
ウ. アクションの実行条件Bで600以上としていることから、イと判定されてから10分以上経過した場合に、アクションが実行され、ホストが削除される
そのため長くとも15分程度で削除されるものと思っておりました。
ただ現状ですと、AWSのEC2インスタンスが削除されてから、12時間以上経過して削除されたのが確認できました。
ディスカバリルールの監視間隔 + アクションの実行条件 アップタイム/ダウンタイムとはかけ離れております。
これらのタイミングはどこで決定されるのでしょうか。
以上、よろしくお願いいたします。
TNK - 投稿数: 4731
タイムアウトは何秒に設定していますか?
ディスカバリで指定しているネットワーク内で、起動しているホス
トの台数は何台程度ですか?
ディスカバリの処理では、指定されたネットワーク内のIPアドレス
を1つ1つチェックし、応答が無い場合はタイムアウトの時間だけ待
って次のIPアドレスのチェックに進むような処理になっていたと思
います。
例えば、タイムアウトがデフォルトの3秒のままに設定していて、
使用していないIPアドレスが200あったとすると、それだけで600秒
かかってしまうので、ディスカバリの間隔で指定している5分以内
に指定した範囲のIPアドレスすべてをチェックし終えることができ
ません。
どの程度の比率でホストが起動しているか次第になりますが、タイ
ムアウトの時間やディスカバリの時間間隔などと照らし合わせて、
余裕を持ってディスカバリの処理ができるよう、ディスカバリルー
ルを分割することを検討した方が良いかもしれません。
seena - 投稿数: 20
TNKさん、ご返信ありがとうございました。
タイムアウトの設定はZabbix Server側、Proxy側ともにあるかと思います。
タイムアウトの値については、Server側では反応に時間がかかるスクリプトの値を取得するために、最長の30秒にしておりました(ただし今はこのスクリプトはもう使っていないため、短くすることができそうです)。
Proxy側の設定は、現在4秒となっております。
また現在ネットワーク内で稼働しているインスタンスは2~3台というところですので、ご指摘にあるとおり、指定したCIDRで利用できるIP数と、その中で稼働しているインスタンス(=生きているIP)数で考えると比率として極端に低い値になっています。
タイムアウト値を調整する場合は、今回の場合はProxy先にあるネットワークのディスカバリとなりますので、この場合はZabbix Proxyのタイムアウトを調整することになりますでしょうか。
ディスカバリルールをもっと細かいCIDRにして複数作成してみるというのも検討してみます。
加えて、当初の質問を投稿した後に気づいたのですが、以下についても問題になり得るでしょうか。
ディスカバリによる削除の設定を行う前に、自動登録で登録されたホストについて不要になったホストをZabbixのWeb I/Fから手動で削除しておりました。
ZabbixのWeb I/Fをあちこち見ていますと、監視データ→ディスカバリの欄に、現在稼働中のホストに加え、手動で削除したと思われるホストがグレーの文字で多く並んでおります。
ディスカバリルールのチェックのタイプをZabbixエージェントキーの system.uname としている関係かと思いますが、表の右端に「Zabbix エージェント: system.uname」という欄があり、稼働しているホストはおそらく登録されてからの時間、また削除したと思われるホストについては「29d 4h 27m」などと赤背景で表示されております。
これは手動で削除してしまったがために、内部的に何か設定が残り続けているもの、ということでしょうか。
また今回の質問の自動削除のタイミングが遅くなる要因にもなっていますでしょうか。
可能であればこの監視データ→ディスカバリの欄にある古いホストも削除できればと思うのですが、削除の方法が分からず、という状況です。
こちらについても情報がございましたらお教えください。
よろしくお願いいたします。
natty - 投稿数: 4
seena様
突然のご連絡申し訳ございません。
> スケールアウト時のZabbix側のホストについては自動登録は問題なくできるようになりました。
私の環境では自動登録がうまくいかず、どのような設定で自動登録が正常に動作したか教えて頂きたくご連絡致しました。
うまくいかない事象とは、以下になります。
①1台目のEC2は正常に自動登録できます。
②2台目のEC2を起動すると、自動登録はされません。
③1台目のEC2をターミネートし、zabbixサーバのホスト一覧から削除すると2台目が登録されます。
この時、zabbixサーバ(WEB-UI)のホストの一覧画面には、1台目のホスト名で登録されてしまいます。
なお、インターフェース欄には2台目のEC2のIPアドレスが表示されています。
zabbix-agent(zabbix_agentd.conf)には、自分のホスト名をzabbixサーバに通知するよう"HostnameItem=system.hostname"を有効にしていますが、
何故か上記のような挙動となり、2台目以降の自動登録がうまくいかず困っている所に、この書き込みを見つけご連絡させて頂いた次第です。
ちなみに、"Hostname=Zabbix server"はコメントアウトしています。
環境は、AWSを使っております。
OSはサーバ、エージェント、どちらもAmazon-linux2になります。
zabbixは5.0を使っていますが、4.0でも同じ事象でうまくいきませんでした。
簡単ですが、自動登録の設定について記載いたします。
■zabbix-serverの設定(WEB-UI)
[設定] - [アクション] - [自動登録アクション]
・実行条件
タイプ:ホスト名
オペレータ:含む
値:ip
・実行内容
ホストを追加
ホストグループに追加
テンプレートとリンク
■zabbix-agentの設定(etc/zabbix/zabbix_agentd.conf)
Server=[zabbixサーバのIP]
ServerActive=[zabbixサーバのIP]
#Hostname=Zabbix server ←コメントアウトしています。
HostnameItem=system.hostname
横からの割り込みで誠に恐縮ですが、seena様の自動登録設定の内容をご教示頂けますと幸いです。
seena - 投稿数: 20
すみません!コメントをいただいていたのに気づいておりませんでした!まとめるのに少し時間をいただきたいと思います。
同様の症状になったことがないため、こちらの設定でうまくいくか分かりませんが、分かる範囲でまとめたいと思います。
(すでに解決済みでしたら申し訳ございません)
natty - 投稿数: 4
seena様
ご質問させて頂いた件ですが、解決いたしました。
お騒がせしてしまい申し訳ありませんでした。
zabbix-agentがインストールされているEC2のホスト名はデフォルト(ip-xx-xx-xx-xx.ap-northeast-1.compute.internal)のままだったのですが、
これが原因だったようです(何故これではダメなのかはわかっておりませんが。。。)
上記の状態で「HostnameItem=system.hostname」にて、zabbixサーバに登録しようとするとご質問した現象が発生します。
実施した対策としては「HostnameItem=system.hostname」の使用は止めて、起動テンプレートのUserdataに「Hostname=Zabbix server」を任意のホスト名(ホスト名+インスタンスID)に書き換える処理を
追加することで解決いたしました。