プロキシを使用した分散監視

概要

Zabbixプロキシは、効果的で信頼性の高い分散監視環境を構築するために使用できます。

プロキシは、パフォーマンスデータと可用性データを収集するためにローカルに配置します。 その後、データは一元管理されたサーバーに報告されます。

Zabbixプロキシは、次の用途に使用できます。

  • リモートロケーションの監視
  • 通信が不安定なロケーションの監視
  • 数千台のデバイスを監視する際のZabbixサーバーの負荷軽減
  • アプリケーションパフォーマンス監視(APM)のためのテレメトリデータの収集

プロキシには、ZabbixサーバーへのTCP接続が1つだけ必要です。 このため、ファイアウォールルールを1つ設定するだけで済み、ファイアウォールを容易に通過できます。

Zabbixプロキシは、専用のデータベースを使用する必要があります。 Zabbixサーバーのデータベースを指定すると、設定が破損します。

プロキシが収集したすべてのデータは、サーバーに送信される前にローカルに保存されます。 これにより、サーバーとの一時的な通信障害によるデータ損失を防止できます。 プロキシ設定ファイルのProxyLocalBufferおよびProxyOfflineBufferパラメータで、データをローカルに保持する期間を制御します。

Zabbixサーバーのデータベースから最新の設定変更を直接受信するプロキシは、Zabbixサーバーよりも新しい設定を持つ場合があります。これは、CacheUpdateFrequencyの値によって、Zabbixサーバーの設定更新が遅れる可能性があるためです。 その結果、プロキシがデータの収集を開始してZabbixサーバーに送信しても、Zabbixサーバーがそのデータを無視する場合があります。

Zabbixプロキシはデータコレクターです。 トリガーの計算、イベントの処理、アラートの送信は行いません。 プロキシの機能の概要については、次の表を参照してください。

機能 プロキシでのサポート
アイテム
Zabbixエージェントチェック はい
Zabbixエージェントチェック(アクティブ) はい 1
シンプルチェック はい
トラッパーアイテム はい
SNMPチェック はい
SNMPトラップ はい
IPMIチェック はい
JMXチェック はい
ログファイル監視 はい
内部チェック はい
SSHチェック はい
Telnetチェック はい
外部チェック はい
依存アイテム はい
スクリプトアイテム はい
ブラウザーアイテム はい
テレメトリクエリアイテム はい
組み込みWeb監視 はい
アイテム値の前処理 はい
ネットワークディスカバリ はい
アクティブエージェントの自動登録 はい
ローレベルディスカバリ はい 2
リモートコマンド はい
テレメトリデータの収集(APM) はい 3
トリガーの計算 いいえ
イベントの処理 いいえ
イベント相関 いいえ
アラートの送信 いいえ

[1] エージェントがアクティブチェックについてサーバーではなくプロキシに問い合わせるようにするには、エージェント設定ファイルのServerActiveパラメータにプロキシを指定する必要があります。
[2] LLDでは、Zabbixプロキシはデータの収集と前処理のみを行い、その後、さらなる処理のためにZabbixサーバーへ送信します。
[3] テレメトリデータは、プロキシでAPMが有効になっている場合にのみ収集されます(プロキシの設定のAPMタブを参照)。Zabbixサーバーはテレメトリデータを受信できません。

プロキシの機能

プロキシを使用するかどうかを選択する際には、いくつかの考慮事項を 踏まえる必要があります。

プロキシ
軽量 はい
GUI いいえ
独立して動作する はい
保守が容易 はい
DBの自動作成 はい1
ローカル管理 いいえ
組み込みハードウェアに対応 はい
一方向のTCP接続 はい
集中設定 はい
通知を生成する いいえ

1 DBの自動作成機能はSQLiteでのみ動作します。 その他の対応データベースでは手動セットアップが必要です。

Zabbixプロキシはメンテナンス期間を認識しません。詳細はメンテナンス中のキューの計算を参照してください。

過負荷からの保護

Zabbixサーバーがしばらく停止していて、プロキシが大量のデータを収集した後にサーバーが起動すると、過負荷状態になることがあります(しばらくの間、ヒストリキャッシュの使用率が95~100%のままになります)。 この過負荷により、チェックの処理速度が本来より遅くなり、パフォーマンスが低下する可能性があります。 ヒストリキャッシュの過負荷によって発生する問題を回避するため、このシナリオに対する保護機能が実装されています。

Zabbixサーバーのヒストリキャッシュがいっぱいになると、ヒストリキャッシュへの書き込みアクセスが制限され、サーバーのデータ収集プロセスが停滞します。 ヒストリキャッシュが過負荷になる最も一般的なケースは、サーバーの停止後にプロキシが収集したデータをアップロードするときです。 これを回避するため、プロキシのスロットリングが追加されています(現在、無効にすることはできません)。

ヒストリキャッシュの使用率が80%に達すると、Zabbixサーバーはスロットリングモードになります。 スロットリングモードでは、ヒストリキャッシュの使用率が60%未満の場合にのみプロキシデータを受け入れ、受け入れるプロキシを順番に切り替えます。 ヒストリキャッシュの使用率が20%未満になると、サーバーは通常モードに戻ります。

さらに、ヒストリキャッシュの使用率が60%を超えている場合、通常モード中であっても、アップロード制限によってアップロードが途中で切り詰められた個々のプロキシを、Zabbixサーバーが延期することがあります。 この判断は、サーバーがプロキシのアップロードを評価する瞬間に適用されます。そのため、ヒストリキャッシュの使用率グラフにすぐ反映されない場合があります(zabbix[wcache,history,pused]内部アイテムとその更新間隔では、短時間のスパイクを捉えられないことがあります)。

このスロットリングモードは、キャッシュの使用率が再び80%に達するか、20%まで低下するか、またはスロットリングリストが空になるまで継続します。 最初のケースでは、サーバーは再びプロキシデータの受け入れを停止します。 後の2つのケースでは、サーバーは通常どおり動作し、すべてのプロキシからデータを受け入れ始めます。

上記の情報は、次の表で説明できます。

ヒストリ書き込みキャッシュの使用率 Zabbixサーバーのモード Zabbixサーバーのアクション
60%超(「通常」モードで、80%に達するまで) 通常 アップロード制限によってアップロードバッチが途中で切り詰められたプロキシを延期し、その他のプロキシからの受け入れを継続します。
80%に到達 待機 プロキシデータの受け入れを停止しますが、スロットリングリスト(後で接続するプロキシの優先順位付きリスト)は保持します。
60%未満に低下(「待機」モード後) スロットリング プロキシデータの受け入れを再開し、スロットリングリスト内のプロキシを順番に処理します。
20%未満に低下(「スロットリング」モード後) 通常 スロットリングリストを破棄し、通常どおりプロキシデータの受け入れを開始します。

zabbix[wcache,history,pused] 内部アイテムを使用して、Zabbixサーバーのこの動作をメトリクスと関連付けることができます。

設定

インストールし、設定したプロキシを、Zabbix Webインターフェースで設定します。

プロキシの追加

独自のインフラストラクチャにプロキシをインストールする代わりに、Zabbix Cloudにデプロイできます。 デプロイするには、管理 > プロキシでCloudにプロキシを作成をクリックします。Zabbix Cloudが新しいブラウザータブで開きます。 そこでプロキシノードを作成した後、以下の説明に従ってZabbixのWebインターフェースでプロキシを設定します。 詳細については、Zabbix Cloudプロキシのセットアップを参照してください。

ZabbixのWebインターフェースでプロキシを設定するには、次の手順に従います。

  1. 管理 > プロキシに移動します。
  2. プロキシの作成をクリックします。
  3. フォームにプロキシのパラメータを入力します。

パラメータ 説明
プロキシ名 プロキシ名を入力します。プロキシ設定ファイルのHostnameパラメータと同じ名前である必要があります。
プロキシグループ プロキシの負荷分散/高可用性に使用するプロキシグループを1つ選択します。
アクティブエージェント用アドレス 監視対象のアクティブエージェントまたは送信元が接続するアドレスを入力します。Zabbix 7.0以降のエージェントでのみサポートされます。
このアドレスは、アクティブプロキシとパッシブプロキシの両方への接続に使用されます。このフィールドは、プロキシグループフィールドでプロキシグループが選択されている場合にのみ使用できます。
アドレス 接続先のIPアドレス/DNS名。
ポート 接続先のTCPポート番号(デフォルトは10051)。ユーザーマクロを使用できます。
プロキシモード プロキシモードを選択します。
アクティブ - プロキシがZabbixサーバーに接続し、設定データを要求します
パッシブ - Zabbixサーバーがプロキシに接続します
暗号化通信を使用しない場合(機密情報)、アクティブプロキシの使用時に、Zabbixサーバーのトラッパーポートにアクセスできる第三者がプロキシ設定データを取得できる可能性があることに注意してください。これは、認証が行われていない場合、またはプロキシアドレスフィールドでプロキシアドレスが制限されていない場合、誰でもアクティブプロキシを装って設定データを要求できるためです。
プロキシアドレス 指定した場合、アクティブプロキシからの要求は、カンマ区切りのIPアドレス(CIDR表記も使用可能)またはアクティブなZabbixプロキシのDNS名のリストからのみ受け付けられます。
このフィールドは、プロキシモードフィールドでアクティブプロキシが選択されている場合にのみ使用できます。マクロはサポートされません。
インターフェース パッシブプロキシのインターフェース情報を入力します。
このフィールドは、プロキシモードフィールドでパッシブプロキシが選択されている場合にのみ使用できます。
アドレス パッシブプロキシのIPアドレス/DNS名。
ポート パッシブプロキシのTCPポート番号(デフォルトは10051)。ユーザーマクロを使用できます。
説明 プロキシの説明を入力します。

暗号化タブでは、プロキシとの暗号化接続を必須にできます。

パラメータ 説明
プロキシへの接続 サーバーがパッシブプロキシに接続する方法:暗号化なし(デフォルト)、PSK(事前共有鍵)または証明書を使用。
プロキシからの接続 アクティブプロキシから許可する接続の種類を選択します。複数の接続タイプを同時に選択できます(テストや別の接続タイプへの切り替えに便利です)。デフォルトは「暗号化なし」です。
発行者 証明書で許可する発行者。証明書はまずCA(認証局)で検証されます。有効でCAによって署名されている場合、発行者フィールドを使用して許可するCAをさらに制限できます。このフィールドは任意であり、Zabbixのインストール環境が複数のCAの証明書を使用している場合に使用することを想定しています。
サブジェクト 証明書で許可するサブジェクト。証明書はまずCAで検証されます。有効でCAによって署名されている場合、サブジェクトフィールドを使用して、サブジェクト文字列の値を1つだけ許可できます。このフィールドが空の場合、設定されたCAによって署名された有効な証明書はすべて受け入れられます。
PSK ID 事前共有鍵のID文字列。
PSK IDには機密情報を含めないでください。使用するPSKを受信側に通知するため、ネットワーク上で暗号化されずに送信されます。
PSK 事前共有鍵(16進文字列)。ZabbixがGnuTLSまたはOpenSSLライブラリを使用する場合の最大長は512桁の16進数(256バイトPSK)、Zabbixがmbed TLS(PolarSSL)ライブラリを使用する場合は64桁の16進数(32バイトPSK)です。例:1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

APMタブでは、プロキシでアプリケーションパフォーマンス監視(APM)を設定できます。 プロキシは、OpenTelemetryプロトコル(OTLP/gRPC)を介してアプリケーションまたはOpenTelemetryコレクターから送信されたテレメトリデータ(トレース、メトリクス、ログ)を収集し、データをテレメトリデータソースに書き込むことができます。

パラメータ 説明
データ収集を有効にする チェックボックスをオンにして、プロキシでのテレメトリデータ収集を有効にします。
テレメトリデータ収集を有効にする前に、プロキシ設定ファイルでStartAPMCollectorパラメータを1に設定します(APMをサポートするZabbixプロキシが必要です)。
1秒あたりの最大メッセージ数 プロキシが受け入れる1秒あたりのメッセージ数の最大値を設定します。
無制限 - 受信するすべてのメッセージを受け入れます。
カスタム - 指定した1秒あたりのメッセージ数まで受け入れます。

メッセージとは、アプリケーション、OpenTelemetryコレクター、または別のテレメトリソースから送信されるOTLPリクエストです。サイズは送信元によって異なります。たとえば、OpenTelemetryコレクターは数千のスパンを1つのメッセージにまとめることがありますが、単純なアプリケーションはより小さなメッセージ(例:トレースごとに1つ)を送信する場合があります。

制限を超えると、プロキシはgRPCステータスコードUNAVAILABLE(一時的なエラー)を返します。そのため、送信元は設定に応じて後でメッセージの送信を再試行できます。
リソース属性 選択したカテゴリの受信テレメトリデータに追加するリソース属性を指定します(例:このプロキシが受信したすべてのデータに環境またはリージョンを示す属性を付加する)。これらの属性を使用して、たとえばテレメトリクエリアイテムの条件でテレメトリデータをフィルタリングできます。

受信データに同じキーのリソース属性がすでに含まれている場合は、ここで指定した属性ではなく受信した属性が保持されます。
キー 属性キーを入力します(例:deployment.environment、cloud.region)。選択したカテゴリ内で一意である必要があります。
値 属性値を入力します(例:production、eu-central-1)。空にすることもできます。
カテゴリ 属性を適用する受信データのカテゴリを選択します:トレース、メトリクス、またはログ。

タイムアウトタブでは、対応するアイテムタイプのグローバルタイムアウトを上書きできます。

パラメータ 説明
アイテムタイプのタイムアウト (タイプに基づく)アイテムのタイムアウトを設定します。
グローバル - グローバルタイムアウトを使用します(各アイテムタイプのグレー表示されたタイムアウトフィールドに表示されます)。
上書き - カスタムタイムアウトを設定します(各アイテムタイプのタイムアウトフィールドで設定します)。許可される範囲:1~600秒(デフォルト:グローバルタイムアウトから継承)。時間の接尾辞(例:30s、1m)およびユーザーマクロを使用できます。

グローバルタイムアウトリンクをクリックすると、グローバルタイムアウトを設定できます。グローバルタイムアウトリンクは、管理 > 一般設定のWebインターフェースセクションへの権限を持つ特権管理者タイプのユーザーにのみ表示されます。

プロキシレベルのタイムアウトはグローバルタイムアウトを上書きしますが、個々のアイテムのタイムアウトが設定されている場合は、そのタイムアウトによって上書きされることに注意してください。

プロキシのメジャーバージョンがサーバーのメジャーバージョンと一致しない場合、アイコンがアイテムタイプのタイムアウトの横に表示され、ホバー時に「プロキシとサーバーのバージョンが一致しないため、タイムアウトが無効です」というメッセージが表示されます。 この場合、プロキシはプロキシ設定ファイルのTimeoutパラメータを使用します。

既存のプロキシの編集フォームには、次の追加ボタンがあります。

  • 設定を更新 - プロキシの設定を更新します。
  • 複製 - 既存のプロキシのプロパティに基づいて新しいプロキシを作成します。
  • 削除 - プロキシを削除します。
ホスト設定

ホスト設定フォームの Monitored by フィールドを使用して、個別のホストをプロキシまたはプロキシグループで監視するように指定できます。

ホストの一括更新も、ホストをプロキシまたはプロキシグループで監視するように指定する別の方法です。