ZabbixのDiscovery機能を使ってAuto ScalingするEC2インスタンスをZabbixに自動で登録や削除してみた

ZabbixでAuto ScalingするEC2インスタンスを監視する場合はDiscoveryを使おう
2023.10.16

Auto ScalingするEC2インスタンスをZabbixに自動で登録や削除したい

こんにちは、のんピ(@non____97)です。

皆さんはAuto ScalingするEC2インスタンスをZabbixに自動で登録や削除したいなと思ったことはありますか? 私はあまりありません。

ZabbixではDiscovery機能を使って、条件に当てはまる機器をZabbixにホストとして自動で登録することができます。

なんとなくですがZabbixを触らなければならない予感がするので、久しぶりに触ってみようと思います。

私が業務で触っていたZabbixは3系までだったので、思い出しながら設定します。

いきなりまとめ

  • ZabbixのDiscovery機能を使えばAuto ScalingするEC2インスタンスをZabbixに自動で登録や削除ができる
  • Auto Scalingで削除されたEC2インスタンスがホストに登録されたままにならないように、削除設定もしよう
    • あまりにも削除するまでの閾値が低いと、一時的なダウンであっても削除されるかもしれないので注意しよう

検証環境

検証環境は以下の通りです。

Zabbix Discoveryを使ってAuto ScalingするEC2インスタンスをZabbixに自動で登録や削除してみた検証環境構成図

検証環境はAWS CDKでデプロイしました。

Zabbix ServerのインストールやDBの初期設定などもユーザーデータで行なっています。Web UIで設定する箇所以外は一撃でZabbix Serverを構築することができます。

使用したコードは以下の通りです。

Auto Scaling groupのユーザーデータの詳細は以下記事をご覧ください。こちらの記事で紹介している処理に加えて、Zabbix Agentをインストールし、Zabbix ServerのIPアドレスを設定ファイルに追記しているだけです。

デプロイ後はブラウザからZabbix Web UIにて設定を行います。

Zabbix Web UI

設定の詳細な手順は以下記事の「WebブラウザからのZabbixのセットアップ」をご覧ください。

設定の概要は以下の通りです。

Pre-installation summary

設定に完了するとCongratulations! You have successfully installed Zabbix frontend.と表示されます。

Congratulations! You have successfully installed Zabbix frontend

デフォルトのユーザーAdminを使用してZabbixにログインします。

Zabbix login

Global viewが表示されることを確認します。

Global view

なお、/etc/zabbix/zabbix_server.confにてDBPasswordを入力しなかった場合は、Zabbix server is not running: the information displayed may not be currentとメッセージが表示され、各種監視設定を行うことができません。

Zabbix server is not running- the information displayed may not be current

Zabbixへの自動登録

Discoveryの設定

Discoveryの設定を行います。

まず、Discovery ruleを作成します。

こちらはホストを検出するための定義です。今回は1分間隔で10.10.10.0/26内のZabbix Agentからの応答があるホストを検出するようにします。

Discovery Ruleの作成

検出したホストはsystem.unameの値をホスト名として追加します。system.unameはZabbix Agentから取得できるアイテムキーです。単純にOSホスト名を取得したい場合はsystem.hostnameを指定しましょう。

アイテムキーの一覧は以下Zabbix公式ドキュメントをご覧ください。

Discovery ruleのその他のパラメーターの詳細は以下Zabbix公式ドキュメントをご覧ください。

Discovery ruleの作成が完了したら、次はDiscovery actionの設定をします。

こちらはDiscovery ruleで条件に当てはまった場合にどのような処理を行うかを定義するものです。

デフォルトでAuto discovery. Linux serversというDiscovery actionがありました。こちらを再利用しましょう。

Default Auto discovery. Linux servers

作成したDiscovery ruleにおいて検出されたホストを、ホストとして追加するように設定変更します。

Action updated

ホストグループや関連付けるテンプレートはZabbixが提供しているものを利用します。

Zabbixに登録されることの確認

しばらく待つとLinux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64などホストが登録されました。

ホストが追加されたことを確認

こちらのホスト名はDiscovery ruleで指定したsystem.unameの値です。要するにuname -aの値です。

追加されたホストを確認します。IPアドレスやDNS名が登録されていますね。

ホストが設定されていることを確認

ちなみに、Problemsの黄色い1となっているものは、The host uptime is less than 10 minutes.とシステムが起動してから10分未満であるためです。放置しておくと消えます。

The host uptime is less than 10 minutes.

最新データも確認しておきましょう。一部情報は取得できていないですが概ね取得できていますね。

Itemの最新データの確認

グラフも確認しておきます。GDライブラリみのある円グラフや折れ線グラフなどが表示されています。

グラフの確認

また、Zabbix Serverのログを確認すると、ホストが追加された時のログが記録されていました。

/var/log/zabbix/zabbix-server.log

  1512:20231016:054431.140 Zabbix agent item "net.if.out["ens5"]" on host "ip-10-10-10-51.ec2.internal" failed: first network error, wait for 15 seconds
  1513:20231016:054431.141 Zabbix agent item "system.swap.size[,pfree]" on host "Linux web-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: first network error, wait for 15 seconds
  1515:20231016:054431.142 Zabbix agent item "system.localtime" on host "Linux web-06.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: first network error, wait for 15 seconds
  1513:20231016:054444.150 Zabbix agent item "system.swap.size[,pfree]" on host "Linux web-05.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: first network error, wait for 15 seconds
  1530:20231016:054449.980 Zabbix agent item "vm.memory.size[available]" on host "ip-10-10-10-21.ec2.internal" failed: another network error, wait for 15 seconds
  1530:20231016:054453.980 Zabbix agent item "system.cpu.num" on host "ip-10-10-10-51.ec2.internal" failed: another network error, wait for 15 seconds
  1530:20231016:054457.980 Zabbix agent item "agent.ping" on host "Linux web-06.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep26 20_06_16 UTC 2023 x86_64" failed: another network error, wait for 15 seconds
  1530:20231016:054501.980 Zabbix agent item "vm.memory.size[total]" on host "Linux web-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: another network error, wait for 15 seconds
  1530:20231016:054509.981 Zabbix agent item "agent.ping" on host "Linux web-05.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep26 20_06_16 UTC 2023 x86_64" failed: another network error, wait for 15 seconds
  1530:20231016:054513.982 Zabbix agent item "system.cpu.num" on host "ip-10-10-10-21.ec2.internal" failed: another network error, wait for 15 seconds
  1530:20231016:054517.982 temporarily disabling Zabbix agent checks on host "ip-10-10-10-51.ec2.internal": interface unavailable
  1530:20231016:054521.983 temporarily disabling Zabbix agent checks on host "Linux web-06.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64": interface unavailable
  1530:20231016:054525.983 temporarily disabling Zabbix agent checks on host "Linux web-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64": interface unavailable
  1530:20231016:054529.984 temporarily disabling Zabbix agent checks on host "Linux web-05.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64": interface unavailable
  1530:20231016:054533.089 temporarily disabling Zabbix agent checks on host "ip-10-10-10-21.ec2.internal": interface unavailable
  1515:20231016:055216.737 Zabbix agent item "system.localtime" on host "Linux web-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: first network error, wait for 15 seconds
  1530:20231016:055234.593 Zabbix agent item "system.sw.os" on host "Linux web-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: another network error, wait for 15 seconds
  1529:20231016:055245.761 Zabbix agent item "system.cpu.load[all,avg1]" on host "Linux web-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: first network error, wait for 15 seconds
  1530:20231016:055252.705 Zabbix agent item "agent.version" on host "Linux web-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: another network error, wait for 15 seconds
  1530:20231016:055304.709 Zabbix agent item "system.cpu.intr" on host "Linux web-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: another network error, wait for 15 seconds
  1530:20231016:055310.817 temporarily disabling Zabbix agent checks on host "Linux web-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64": interface unavailable
  1530:20231016:055323.820 Zabbix agent item "system.cpu.util[,interrupt]" on host "Linux web-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64" failed: another network error, wait for 15 seconds
  1530:20231016:055342.833 temporarily disabling Zabbix agent checks on host "Linux web-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64": interface unavailable
  1515:20231016:060135.311 enabling Zabbix agent checks on host "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64": interface became available
  1500:20231016:060223.949 executing housekeeper
  1500:20231016:060225.855 housekeeper [deleted 60 hist/trends, 5466 items/triggers, 0 events, 0 problems, 0 sessions, 0 alarms, 0 audit, 0 autoreg_host, 0 records in 1.889627 sec, idle for 1 hour(s)]
  1507:20231016:060244.498 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.file.contents["/sys/class/net/ens5/speed"]" became not supported: Cannot read from file: read /sys/class/net/ens5/speed: invalid argument
  1504:20231016:060245.498 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.await[nvme0n1]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.read.time.rate[nvme0n1])/(last(//vfs.dev.read.rate[nvme0n1])+(last(//vfs.dev.read.rate[nvme0n1])=0)))*1000*(last(//vfs.dev.read.rate[nvme0n1]) > 0)".
  1505:20231016:060246.500 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.await[xvda]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.read.time.rate[xvda])/(last(//vfs.dev.read.rate[xvda])+(last(//vfs.dev.read.rate[xvda])=0)))*1000*(last(//vfs.dev.read.rate[xvda]) > 0)".
  1506:20231016:060247.503 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.await[nvme0n1]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.write.time.rate[nvme0n1])/(last(//vfs.dev.write.rate[nvme0n1])+(last(//vfs.dev.write.rate[nvme0n1])=0)))*1000*(last(//vfs.dev.write.rate[nvme0n1]) > 0)".
  1504:20231016:060248.506 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.await[xvda]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.write.time.rate[xvda])/(last(//vfs.dev.write.rate[xvda])+(last(//vfs.dev.write.rate[xvda])=0)))*1000*(last(//vfs.dev.write.rate[xvda]) > 0)".
  1506:20231016:060256.513 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.file.contents[/sys/block/xvda/stat]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1506:20231016:060256.513 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1506:20231016:060256.513 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.time.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1506:20231016:060256.513 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.queue_size[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1506:20231016:060256.513 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1506:20231016:060256.513 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.time.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1506:20231016:060256.513 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.util[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1512:20231016:060326.336 enabling Zabbix agent checks on host "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64": interface became available
  1504:20231016:060346.555 error reason for "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023x86_64:vfs.dev.read.await[xvda]" changed: Cannot evaluate function: item "/Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64/vfs.dev.read.time.rate[xvda]" is not supported at "last(//vfs.dev.read.time.rate[xvda])/(last(//vfs.dev.read.rate[xvda])+(last(//vfs.dev.read.rate[xvda])=0)))*1000*(last(//vfs.dev.read.rate[xvda]) > 0)".
  1506:20231016:060348.556 error reason for "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023x86_64:vfs.dev.write.await[xvda]" changed: Cannot evaluate function: item "/Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64/vfs.dev.write.time.rate[xvda]" is not supported at "last(//vfs.dev.write.time.rate[xvda])/(last(//vfs.dev.write.rate[xvda])+(last(//vfs.dev.write.rate[xvda])=0)))*1000*(last(//vfs.dev.write.rate[xvda]) > 0)".
  1507:20231016:060427.588 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.file.contents["/sys/class/net/ens5/speed"]" became not supported: Cannot read from file: read /sys/class/net/ens5/speed: invalid argument
  1504:20231016:060428.589 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.await[nvme0n1]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.read.time.rate[nvme0n1])/(last(//vfs.dev.read.rate[nvme0n1])+(last(//vfs.dev.read.rate[nvme0n1])=0)))*1000*(last(//vfs.dev.read.rate[nvme0n1]) > 0)".
  1505:20231016:060429.590 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.await[xvda]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.read.time.rate[xvda])/(last(//vfs.dev.read.rate[xvda])+(last(//vfs.dev.read.rate[xvda])=0)))*1000*(last(//vfs.dev.read.rate[xvda]) > 0)".
  1507:20231016:060430.594 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.await[nvme0n1]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.write.time.rate[nvme0n1])/(last(//vfs.dev.write.rate[nvme0n1])+(last(//vfs.dev.write.rate[nvme0n1])=0)))*1000*(last(//vfs.dev.write.rate[nvme0n1]) > 0)".
  1506:20231016:060431.596 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.await[xvda]" became not supported: Cannot evaluate function: not enough data at "last(//vfs.dev.write.time.rate[xvda])/(last(//vfs.dev.write.rate[xvda])+(last(//vfs.dev.write.rate[xvda])=0)))*1000*(last(//vfs.dev.write.rate[xvda]) > 0)".
  1504:20231016:060439.604 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.file.contents[/sys/block/xvda/stat]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1504:20231016:060439.604 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1504:20231016:060439.604 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.time.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1504:20231016:060439.604 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.queue_size[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1504:20231016:060439.604 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1504:20231016:060439.604 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.time.rate[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1504:20231016:060439.604 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.util[xvda]" became not supported: Cannot obtain file /sys/block/xvda/stat information: stat /sys/block/xvda/stat: no such file or directory
  1507:20231016:060445.612 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.await[nvme0n1]" became supported
  1505:20231016:060447.614 item "Linux host-02.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.write.await[nvme0n1]" became supported
  1504:20231016:060529.657 error reason for "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023x86_64:vfs.dev.read.await[xvda]" changed: Cannot evaluate function: item "/Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64/vfs.dev.read.time.rate[xvda]" is not supported at "last(//vfs.dev.read.time.rate[xvda])/(last(//vfs.dev.read.rate[xvda])+(last(//vfs.dev.read.rate[xvda])=0)))*1000*(last(//vfs.dev.read.rate[xvda]) > 0)".
  1505:20231016:060531.660 error reason for "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023x86_64:vfs.dev.write.await[xvda]" changed: Cannot evaluate function: item "/Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64/vfs.dev.write.time.rate[xvda]" is not supported at "last(//vfs.dev.write.time.rate[xvda])/(last(//vfs.dev.write.rate[xvda])+(last(//vfs.dev.write.rate[xvda])=0)))*1000*(last(//vfs.dev.write.rate[xvda]) > 0)".
  1507:20231016:060628.708 item "Linux host-01.asg.corp.non-97.net 6.1.55-75.123.amzn2023.x86_64 _1 SMP PREEMPT_DYNAMIC Tue Sep 26 20_06_16 UTC 2023 x86_64:vfs.dev.read.await[nvme0n1]" became supported

ちなみに、OSホスト名を変更してZabbix Agentを再起動しても別ホストが追加されるということはありませんでした。

Zabbixからホストを自動削除

ホストの自動削除がない場合の動き

次にホストの自動削除を行います。

ホストの自動削除が行われなければ、Auto Scalingにより削除されたEC2インスタンスもホストとして残ってしまいます。

ホストが長期間ダウンしている場合に、ホストを自動で削除したいところです。

また、古いホストが残り続けるという単純に煩わしいだけでなく、ホスト名が重複してしまった場合に上手く監視ができないという弊害もあります。

実際に試してみましょう。

まず、Auto Scaling groupに属するEC2インスタンスを停止します。

EC2インスタンスの停止

すると、Zabbix Agentとの疎通が取れなくなったとNot availableとなりました。

Get value from agent failed- cannot connect

Linux- Zabbix agent is not available (for 3m)

しばらくすると、停止したEC2インスタンスが削除され、新たにEC2インスタンスが追加されていました。

Auto Scaling groupのイベント

しかし、Interfaceが2つあり、新しく作成されたEC2インスタンスのIPアドレスのInterfaceはUnknownのままです。

Not availableのまま

削除されたEC2インスタンスのInterfaceの情報が残っていますね。しかも、そのInterfaceを削除することはできないようです。

Interfaceに情報が残っている

また、スクリーンショットを取得するの忘れてしまったのですが、アイテムのデータ更新もされていませんでした。

Discoveryの設定

自動削除の設定をします。

Discovery actionにて、Discovery ruleで検出したホストで60秒以上ダウンしているホストを削除する定義をします。

Auto delete. Linux servers

今回は60秒にしていますが、あまりにも削除するまでの閾値が低いと、一時的なダウンであっても削除されるかもしれないので注意しましょう。

Zabbixに登録されることの確認

再度確認します。

Auto Scaling groupのEC2インスタンスを停止します。

すると、Zabbixからホストが削除されました。

Hostが削除されたことを確認

また、少し待つとホストが追加されました。しかし、変わらずInterfaceは2つありました。

Hostが再追加されたことを確認する

しばらくすると、一度ホストが削除されて、再追加されました。

Hostが再追加されたことを確認する_2回目

Interfaceも1つのみ登録されています。

Interfaceも1つのみ登録されている

データも更新されていますね。

Latest dataが更新されていることを確認

同じホスト名だと直近2つのInterfaceの情報を保持するのでしょうか。

ZabbixでAuto ScalingするEC2インスタンスを監視する場合はDiscoveryを使おう

ZabbixのDiscovery機能を使ってAuto ScalingするEC2インスタンスをZabbixに自動で登録や削除してみました。

ZabbixでAuto ScalingするEC2インスタンスを監視する場合はDiscoveryを使いましょう。Zabbix AgentでOS内を監視する要件がない場合は、AWS by HTTPを使うのも良いと思います。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!