【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
- PowerShellのスクリプトの配置
監視対象のWindowsServerの任意のディレクトリ
(例:C:\Program Files\Zabbix Agent\scripts)
に配置してください。 - 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" - Zabbix Agentの再起動
サービス画面からZabbix Agentのサービスを再起動 - Zabbix Server上で、zabbix_getのコマンドを実行し値が取得できることを確認
例)zabbix_get -s 対象ホストのIP -k winupdate.count
- Zabbix Serverにテンプレートをインポートし、対象のホストにテンプレートを設定
以上です。
注記
- zabbix_getのコマンドでは値が取得出来ていても、Web画面上で値が確認できない場合、Zabbix Server側のタイムアウトの設定の影響が出ている可能性があります。その場合はServer側のタイムアウトの設定も見直してください。
- 検知対象のWindows UpdateはCriticalなもの(MsrcSeverityの値がCritical)なものに限定しています。理由は、そうしないとMicrosoft Defender Antuvirusの定義の更新についても拾ってしまい、頻繁に検知してしまったためですが、目的に応じて見直していただければよいかと思います。