WSFCマイナー
これは、Windows Server フェールオーバー クラスター (WSFC) からメトリックの値を取得するための小さな Powershell スクリプト ヘルプです。
実際のリリース 1.2.3
テスト対象:
- 運用モード: Windows Server 2008 R2 SP1、Powershell 2。
- 非運用モード: Windows Server 2012 R2、Powershell 4。
- 非運用モード: Windows Server 2016、Powershell 5.1。
サポートされているオブジェクト:
- クラスター- Windows Server フェールオーバー クラスター (WSFC)。
- ClusterNode - WSFC ノード。
- ClusterNetwork - WSFC ネットワーク。
- ClusterNetworkInterface - フェールオーバー クラスターのネットワーク アダプター。
- ClusterAvailableDisk - WSFC の使用可能な (未使用の) ディスク リソース。そのディスクはフェールオーバー クラスタリングをサポートでき、すべてのノードから認識できますが、まだクラスタ化されたディスクのセットには含まれていません。
- ClusterResourceDHCPService - WSFC リソース「DHCP サービス」;
- ClusterResourceGenericService - WSFC リソース「汎用サービス」;
- ClusterResourceVirtualMachine - WSFC リソース「仮想マシン」;
- ClusterResourceVirtualMachineConfiguration - WSFC リソース「仮想マシン構成」;
- ClusterResourceIPAddress - WSFC リソース「IP アドレス」;
- ClusterResourceNetworkName - WSFC リソース 'ネットワーク名';
- ClusterResourcePhysicalDisk - WSFC リソース「物理ディスク」;
- ClusterResourceSQLServer - WSFC リソース 'SQL Server';
- ClusterResourceSQLServerAgent - WSFC リソース 'SQL Server エージェント';
- ClusterSharedVolume - WSFC 共有ボリューム。
- ClusterQuorum - WSFC クラスターのクォーラム。
「Cluster」、「ClusterNode」オブジェクトの仮想キー:
- VirtualMachine.Online - オンライン状態のフェールオーバー クラスターのリソース「仮想マシン」。
- VirtualMachine.Offline - ... オフライン状態。
- VirtualMachine.OnlinePending - ... OnlinePending 状態。
- VirtualMachine.OfflinePending - ... OfflinePending 状態。
- VirtualMachine.summaryInformation - クラスター リソース「仮想マシン」に関連し、WMI クエリを使用して MsVM_virtualSystemManagementService クラスからフェッチされたメトリックのセット
- GenericService.Online - フェールオーバー クラスターのリソース「Generic Service」はオンライン状態です。
- GenericService.Offline - ... オフライン状態。
ClusterParameter (Get-ClusterParameter コマンドレットを参照) テーブルに含まれるすべてのオブジェクトの仮想キー
- ClusterParameter.<metric> - ClusterParameter テーブルからのオブジェクトのメトリック。
アクション
- ディスカバリー- Zabbix の LLD JSON を作成します。
- Get - コレクション項目からメトリックを取得します。
- Sum - コレクション項目の合計メトリクス。
- カウント- コレクションアイテムをカウントします。
スタンドアロンでの使用方法
# Get Cluster name
powershell -NoProfile -ExecutionPolicy "RemoteSigned" -File "wsfc.ps1" -Action "Get" -ObjectType "Cluster" -Key "Name" -Id "f4479814-35d4-41c5-babd-c0697769ac31"
# Get PercentFree metric value from SharedVolumeInfo.Partition table for volume with ID=b8b67dbf-e66f-443e-926e-be1d1621ece5
..."wsfc.ps1" -Action "Get" -ObjectType "ClusterSharedVolume" -Key "SharedVolumeInfo.Partition.PercentFree" -Id "b8b67dbf-e66f-443e-926e-be1d1621ece5"
# Get total number of vCPUs assigned to all clustered VMs which hosted on Node with ID=00000000-0000-0000-0000-000000000001
... "wsfc.ps1" -Action "Sum" -ObjectType "ClusterNode" -Key "SummaryInformation.VirtualMachine.NumberOfProcessors" -Id "00000000-0000-0000-0000-000000000001"
# Get total number of Memory assigned (dynamically for WS2008 R2 SP1+) to all clustered VMs which placed in Cluster with ID=f4479814-35d4-41c5-babd-c0697769ac31
... "wsfc.ps1" -Action "Sum" -ObjectType "Cluster" -Key "SummaryInformation.VirtualMachine.NumberOfProcessors" -Id "00000000-0000-0000-0000-000000000001"
# Get formatted list of 'ClusterSharedVolume' object metrics accessed with property 'SharedVolumeInfo.Partition'. Verbose messages is enabled.
... "wsfc.ps1" -Action "Get" -ObjectType "ClusterSharedVolume" -Key "SharedVolumeInfo.Partition" -ID "8e8fb118-2601-4a06-ab9a-f0a1260bd247" -DefaultConsoleWidth -Verbose
Zabbixでの使い方
WSFC Miner を非クラスター化サービスとして使用し始め、Zabbix で調整してクラスター化することをお勧めします。
####非クラスター化サービスとして使用する
- 任意のクラスター ノード上の Zabbix エージェント設定に zbx_wsfc.conf を含めます。
- wsfc.ps1 をC:zabbixscriptsディレクトリに置きます。スクリプトを他のディレクトリに配置する場合は、 zbx_wsfc.confを編集してスクリプトのパスを適切に設定する必要があります。
- Zabbix エージェント/サーバーのタイムアウトを3 秒以上に設定します (10 または 30 の可能性があります)。
- .summaryInformation を使用する必要がある場合。メトリクス - Zabbix サービス アカウントを「ローカル システム」から、FailoverClusters コマンドレットを使用するローカル管理者権限と、ネットワーク経由ですべてのクラスター ノードに対して WMI クエリを実行する権限を持つ任意のアカウントに変更する必要があります。そうしないと、スクリプト エラーが発生します。
- テンプレートをZabbixサーバーにインポートします。
- テンプレートをホストにリンクする前によく考えて、それほど重要ではない検出ルール (「仮想マシン」、「汎用サービス」、「クラスター ネットワーク」など) を無効にしてください。そうしないと、PowerShell 呼び出しで CPU 負荷が 9000% を超える可能性があります。
- 祈りとリンクのテンプレート;
- 楽しむ。
フェイルオーバー汎用サービスとして使用
- ローカル (非クラスター化) とフェイルオーバー (クラスター化) Zabbix エージェントを同時に使用したい場合は、「クラスター化エージェント」設定内の Zabbix エージェントのディレクティブ ListenPort をデフォルトから別の未使用 (16092 程度) に変更する必要があります。そうしないと、クラスター化された Zabbix エージェントの移行時にエラー 1067 が発生する可能性があります。これは、最初に開始されたエージェントのインスタンスが使用可能なすべてのホストのアドレスにバインドされ、2 番目のインスタンスが開始時に終了するためです。
- 1 つのクラスター ノード上に Zabbix エージェント設定のコピー (たとえば、 zabbix_agentd_WSFC-A.confと呼びます) を作成します。
- これまでにこれを行っていない場合は、zbx_wsfc.conf を Zabbix エージェント設定に含めます。
- 汎用サービスで使用する新しい IP アドレスとドメイン名を選択します。クラスターの IP とホスト名であってはなりません。 zabbix_agentd_WSFC-A.confの ListenIP と Hostname ディレクティブを新しい値に変更します。
- wsfc.ps1とzabbix_agentd_WSFC-A.conf をクラスター内のすべてのノードに配置します (または Windows 共有を使用してみてください)。
- すべてのノードで、ローカル Zabbix エージェントのサービスをアンインストールし、 -mキーを使用して再インストールします (zabbix_agentd.exe -c ... -x、zabbix_agentd.exe -c ... -d、zabbix_agentd.exe -c ... -i -m、zabbix_agentd.exe -c ... -s -m);
- すべてのノードに、 zabbix_agentd_WSFC-A.confと-mキーを使用して 2 番目の Zabbix エージェントのサービスをインストールします (zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m)。そのサービスは手動で開始しないでください。サービスの所有者ノード上の WSFC によって自動的に開始されます。
- .summaryInformation を使用する必要がある場合。メトリクス - Zabbix サービス アカウントを「ローカル システム」から、FailoverClusters コマンドレットを使用するローカル管理者権限と、ネットワーク経由ですべてのクラスター ノードに対して WMI クエリを実行する権限を持つ任意のアカウントに変更する必要があります。そうしないと、スクリプト エラーが発生します。
- フェールオーバー クラスター MMC を使用してクラスターに新しい「汎用サービス」を作成し、ステップ 4 で定義した IP アドレスとホスト名をそれに割り当てます。
- テンプレートをZabbixサーバーにインポートします。
- テンプレートをホストにリンクする前によく考えて、それほど重要ではない検出ルール (「仮想マシン」、「汎用サービス」、「クラスター ネットワーク」など) を無効にしてください。そうしないと、PowerShell 呼び出しで CPU 負荷が 9000% を超える可能性があります。
- Zabbix サーバー上で、ステップ 4 の IP アドレスとホスト名を使用して新しいホストを作成します。
- 祈りとリンクのテンプレート;
- 手順 9 でフェールオーバー クラスター MMC を使用して作成した汎用サービスを開始します。
- 楽しむ。多分。
注Zabbix v2.4 テンプレートを v2.4より前のZabbix にインポートしないでください。 .xml ファイルを編集し、discovery_rule - フィルター タグ領域でいくつかの変更を加え、トリガー式の#を<>に変更する必要があります。古いZabbixにテンプレートを作成してみます。
注テンプレートでは、項目のタイプZabbix Agent (active)が使用されています。 Zabbix Agent のServerActiveディレクティブを設定するか、アイテムのタイプをZabbix Agentに変更する必要があります。この場合、PowerShell スクリプトを実行するとポーラー スレッドが 2 秒にフリーズするため (私のハードウェアでは)、Zabbix Server のポーラーの数を増やす必要があります。
ヒント
- キーを表示するには、 -Keyオプションを指定せずにスクリプトを実行します: ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{summaryInformation.VirtualMachine | ClusterParameter}"]。すべてのオブジェクトが ClusterParameter テーブルと SummaryInformation テーブルに関連するメトリックを持っているわけではないことに注意してください (テスト用にこのキーを 'ClusterResourceVirtualMachine' オブジェクトで使用してみてください)。詳細については MSDN を参照してください;)
- 役立つ情報を見つけるには、検出ルールと項目の説明をお読みください (メトリクスを説明する MSDN ページへのリンク)。
- VM の名前に英語以外の記号 (ロシア語のキリル文字など) を使用しており、Zabbix サーバー側で正しい UTF-8 を取得したい場合は、コマンド ラインに-consoleCP your_native_codepageパラメーターを追加する必要があります。たとえば、ロシア語のキリル文字コードページ (CP866) から変換するには、 ... "wsfc.ps1" ... -consoleCP CP866を使用します。
- スタンドアロン モードでのデバッグの場合は、スクリプトの実行中にコンソールのデフォルト幅を残すには-defaultConsoleWidthオプションを使用し、追加の処理情報を取得するには-Verbose を使用します。
- Zabbix の「JSON である必要があります」というメッセージが表示された場合は、 wsfc.ps1内の CONSOLE_WIDTH 定数変数の数値を増やしてみてください。 Powershell はコンソール幅を使用して出力 JSON 行をフォーマットするため、その行が壊れる可能性があります。
- ClusterNetworkInterface 検出を使用すると、{#NETWORKADDRESS} を使用してルーティング不可能なネットワークをフィルタリングして、ping 不可能な IP アドレスを除外し、関連項目がサポートされていない状態に切り替わることを回避できます。
PowerShell スクリプトへの頻繁なリクエストは CPU を消費し、負荷が増加することに注意してください。これを回避するには、Zabbix のデータ項目で短い更新間隔を使用せず、未使用を無効にします。