【Zabbix】Windows Updateの有無を監視

Zabbixで監視対象のWindows ServerにWindows Updateがあるかどうかがわかったら便利だな。。。と思って色々と調べてみたのですが、テンプレートなどで公開されている情報を見つけられなかったので、自作してみたものを載せておきます。

概要

  • PowerShellでWindows Updateの有無(対象件数)をチェックするスクリプトを準備
  • Zabbix AgentからUserParameterで上記のスクリプトを実行

実行すると、下記の様にWindows Updateの件数と、その番号(KBxxxxxx)が取得できます。

摘要方法

下記リンクからダウンロードできるTemplate Windows Update.zipファイルには、Zabbixのテンプレートファイル(.xml)と、概要に記載したPowerShellのスクリプト(.ps1)が2つ含まれています。
Template Windows Update.zip

  1. PowerShellのスクリプトの配置
    監視対象のWindowsServerの任意のディレクトリ
    (例:C:\Program Files\Zabbix Agent\scripts)
    に配置してください。
  2. Zabbix AgentのConfigファイルの編集
    Zabbix Agentのインストールディレクトリ(通常であれば C:\Program Files\Zabbix Agent)にある、zabbix_agentd.conf の以下の点を編集します。

    ##コマンドの実行を許可(デフォルト: 0(disabled))
    EnableRemoteCommands=1
    ##TimeOutの値を最大に(デフォルト:3秒、MAX30秒)
    Timeout=30
    ##実行するスクリプトの登録(スクリプトのパスは配置した場所に応じて適宜変更してください)
    UserParameter=winupdate.count,powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent\scripts\Check_WinUpdate_Count.ps1"
    UserParameter=winupdate.title,powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent\scripts\Check_WinUpdate_Title.ps1"

  3. Zabbix Agentの再起動
    サービス画面からZabbix Agentのサービスを再起動
  4. Zabbix Server上で、zabbix_getのコマンドを実行し値が取得できることを確認
    例)zabbix_get -s 対象ホストのIP -k winupdate.count
  5. Zabbix Serverにテンプレートをインポートし、対象のホストにテンプレートを設定

以上です。

注記

  • zabbix_getのコマンドでは値が取得出来ていても、Web画面上で値が確認できない場合、Zabbix Server側のタイムアウトの設定の影響が出ている可能性があります。その場合はServer側のタイムアウトの設定も見直してください。
  • 検知対象のWindows UpdateはCriticalなもの(MsrcSeverityの値がCritical)なものに限定しています。理由は、そうしないとMicrosoft Defender Antuvirusの定義の更新についても拾ってしまい、頻繁に検知してしまったためですが、目的に応じて見直していただければよいかと思います。