こんにちは、SCSK株式会社の小寺崇仁です。
先日Zabbixの7.0がリリースされました。
Zabbix7.0では、様々な機能追加、改善が行われております。
詳細は以下をご確認ください。
はじめに
今回は7.0で行われた性能改善について検証をしていきたいと思います。
公式HPでは以下の記載があります。
Improved data collection speed and scalability
・Faster metric polling for agent, SNMP and HTTP checks
・Next metric can now be polled before waiting for a response from previously requested metric
今までは、エージェント監視、SNMPエージェント監視、HTTPエージェント監視は「poller」プロセスで監視が行われておりましたが、「agent poller」「snmp poller」「http poller」に分割されたようです。
また、値を取得する際に、リクエスト送信からレスポンス受信までの間はプロセスが待機をしており、ビジー率上昇をしておりましたが、非同期で処理を行うように改善されたようです。
検証環境について
6.0と7.0のZabbixサーバからSNMPDのインストールされたサーバーに対してSNMPポーリング監視を行い、稼働状況を確認します。
サーバ情報
項目 | Zabbix6.0 | Zabbix7.0 | SNMPサーバ |
---|---|---|---|
OS | RHEL 9.4 | RHEL 9.4 | RHEL 9.4 |
Zabbixバージョン | 6.0.30 | 7.0.0 | ー |
SNNPDバージョン | ー | ー | 5.9.1 |
インスタンスタイプ | t2.medium(2vcpu,4GB) | t2.medium(2vcpu,4GB) | t2.medium(2vcpu,4GB) |
ディスク | 30GB (gp3 3000iops) | 30GB (gp3 3000iops) | 30GB (gp3 3000iops) |
Zabbixのパラメータ情報
項目 | Zabbix6.0 | Zabbix7.0 | 備考 |
---|---|---|---|
StartPollers | 5 | 5 | デフォルト=5 |
StartSNMPPollers | ー | 10 | 7.0新機能 |
MaxConcurrentChecksPerPoller | ー | 1000 | 7.0新機能 |
CacheSize | 512M | 512M | 検証時に不足 |
TrendCacheSize | 256M | 256M | 検証時に不足 |
※上記以外がデフォルトパラメータを使用
※Mariadbはデフォルトパラメータを使用
監視設定
- インターフェースのステータスを取得するテンプレートを作成しました。
- インターフェースは50個ある想定で50アイテム作成しています。
- ホストを1000台登録し、1のテンプレートを適用しました。
- SNMPインターフェースのBulkリクエストは検証のため無効にしました。
- アイテムの取得間隔は1分です。
7.0の新機能を使うには、アイテムのOIDは「get[OID]」「walk[OID,OID]」と記入する必要があります。
Zabbixの状態としては以下の通りです。
項目 | Zabbix6.0 | Zabbix7.0 | 備考 |
---|---|---|---|
監視対象ホスト | 1002 | 1002 | |
アイテム数 | 50175 | 50180 | |
1秒あたりの監視項目数(NVPS) | 835.86 | 835.91 |
検証結果1(通常監視)
Zabbix6.0
- Pollerプロセスの使用率は平均11%
- キューなし
Zabbix7.0
- SNMPPollerプロセスの使用率は1%前後
- キューなし
結果&考察
Zabbix7.0でSNMPPollerプロセスの使用率がほぼ上がらず、とても効率よく処理ができていると思われます。
検証1はZabbixサーバとSNMPサーバが同じVPCにあり、SNMPの値の取得が一瞬で終わっています。検証2では実際の環境に近い形で検証しします。
検証2(レスポンスの悪いOIDを追加する)
実際の監視では、レスポンスの悪いNW機器があり、待機時間によりPollerプロセスの使用率を上昇させていることがあると思います。
検証2では、レスポンスの悪いカスタムOIDを追加し検証します。
/etc/snmp/snmpd.confに以下を追記します。
view systemview included .1 extend sleep /tmp/test.sh
/tmp/test.shの内容は以下となります。2秒待機してから値を返却します。
#!/bin/sh sleep 2 echo 11
新しく作成した監視のアイテムを作成します。
各ホストにアイテムを1つ(1000アイテム)追加しています。
Zabbix6.0
- 応答が遅いOIDが追加されたことでPollerプロセスの使用率が50%弱まで上昇しました。
Zabbix7.0
- SNMPサーバ側が負荷に耐えられなくなったため、MaxConcurrentChecksPerPollerを1000→100に変更しました。
- SNMPPollerプロセスの使用率は1%前後のままから上昇しませんでした。(値を取得するまで待機していない事が分かります)
値が正しく取得できているか不安になりますが、問題なく取得できています。
総括
- データ収集処理は非同期処理に変更され、値の取得を待機しなくなったため、パフォーマンスが劇的に改善しました。
- 1プロセスのリクエスト数(MaxConcurrentChecksPerPoller)が設定できるようになり、効率化されている。
- アイテム作成時にOIDの書き方に注意が必要です。(get[],walk[]をつける必要がある)
最後に
弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
SCSK Plus サポート for Zabbix
★YouTubeに、SCSK Zabbixチャンネルを開設しました!★
★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★