この記事では、PowerShell スクリプトから監視データを取得するための Zabbix エージェントの構成について説明します。 Zabbix にデータを取得する 2 つの PowerShell スクリプトを見てみましょう。 1 つ目は Windows RDS サーバー上のアクティブな RDP ユーザー セッションの数を返し、2 つ目は Windows 更新プログラムが最後にサーバーにインストールされてからの日数を返します。
Zabbix エージェントには、外部 PowerShell スクリプトからデータを取得するための 2 つの機能があります。
- の ユーザーパラメータ エージェントの構成ファイルのオプションを使用すると、PowerShell コードを実行できます。 このオプションを使用する場合は、UserParameter オプションを有効にして、PS1 スクリプト ファイルを各 Windows ホストにコピーする必要があります。
- 次を使用して PowerShell スクリプトを実行できます。 システム.ラン。 これにより、Zabbix Web インターフェイスで PowerShell スクリプトを直接指定し、任意のコマンドを実行できるようになります。
UserParameter を使用して PowerShell スクリプトを実行する例から始めましょう。 Windows コンピュータにすでに Zabbix エージェントがインストールされ、設定されているとします。
アクティブな RDP セッションの数を返す単純な PowerShell スクリプトを作成し、ファイルに保存します。 C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1
$RDSsessions= qwinsta |ForEach-Object {$_ -replace "s{2,18}",","} | ConvertFrom-Csv
$RDSActiveSessions=@($RDSsessions| where State -eq 'Active').count
Write-Host $RDSActiveSessions
次に、Zabbix エージェント構成ファイルを編集します (zabbix_agent2.conf) そしてオプションを追加します:
UserParameter=ActiveRDSSessions,powershell -NoProfile -ExecutionPolicy bypass -File "C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1"
Zabbix エージェント サービスを再起動します。
Get-Service 'Zabbix Agent 2'| Restart-Service -force
Zabbix エージェントが新しいパラメータからデータを受信できることを確認してください。 ビルトインを使用する ザビックス取得 エージェントをテストするためのコマンド ライン ツール:
zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions
この例では、Zabbix は PowerShell スクリプトを実行し、ホスト上で 2 つの RDP ユーザー セッションがアクティブであることを返しました。
ZBX_NOTSUPPORTED: Timeout while executing a shell script.
コマンドを実行すると、別のエラーが表示される場合があります。
zabbix_get [4292]: Get value error: ZBX_TCP_READ() failed: [0x00002746] An existing connection was forcibly closed by the remote host. zabbix_get [4292]: Check access restrictions in Zabbix agent configuration.
その場合は、エージェント構成ファイル (zabbix_agent2.conf) でローカル接続の受け入れを許可します。 127.0.0.1 アドレスを追加します。
Server=192.168.10.100,127.0.0.1
その後、テンプレートに新しいパラメータを追加できます。 に行きます アイテム タブと設定:
- 名前: アクティブな RDS セッションの数
- タイプ: Zabbix エージェント (アクティブ)
- 鍵: アクティブRDSSセッション
- 情報の種類: 数値 (符号なし)
- 更新間隔: 1m
- 履歴保存期間: 90日
- トレンド保存期間: 365日
に行く 監視 -> 最新データ Zabbix が PowerShell スクリプトから値を受信していることを確認します。
次に、PowerShell スクリプトを次を使用して実行できるようにします。 システム.ラン。 Zabbix 経由でリモート ホスト上で任意のコマンドを実行できるため、この方法は安全性が低くなります。 ただし、Zabbix Web インターフェイスから直接 PowerShell スクリプトを設定できるため便利です。
エージェントの構成ファイルで次のパラメータを有効にします。
AllowKey=system.run[*]
次に、新しい Zabbix を作成します アイテム:
- 名前: 前回の Windows Update インストールからの日数
- タイプ: Zabbixエージェント
- 鍵:
system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"] - 情報の種類: 数値 (符号なし)
- 更新間隔: 1d
- 歴史: 180日
- トレンド: 365d
このコマンドは、Windows にセキュリティ更新プログラムが最後にインストールされてからの日数を返します。
そこで、Windows 上で実行されている PowerShell スクリプトから Zabbix にデータを取得する方法を説明しました。

