Zabbixでテンプレートを利用して各ホストのWindowsサービス監視をする場合、サービス名を直接指定すると、そのテンプレートを複数のホスト間で使い回すことができませんが、かと言って、共通のサービスを監視する場合、ホスト毎に1つずつ設定するのは不便です。
そこで今回は、ZabbixのLLD(ローレベルディスカバリ)を利用した、Windowsサービス監視の設定方法をご紹介します。
LLDでWindowsサービス監視
Windowsサービス監視で設定するLLD(ローレベルディスカバリ)は、各ホストのWindowsサービスを自動で検出するディスカバリルールと、検出されたそれぞれのサービスを監視するためのアイテムとトリガーのプロトタイプの設定を行います。
- ディスカバリルール
- アイテムのプロトタイプ
- トリガーのプロトタイプ
Windowsサービス監視をするためには、特定のLLDルールを使用して、サービス名や状態を取得するアイテムを作成する必要があります。
ディスカバリルールの作成
始めに、自動でWindowsサービスを検出するためのディスカバリルールを作成します。
ここで設定した内容に従って、Zabbixが自動的にサービスを検出します。
- [設定] → [テンプレート(またはホスト)]に移動します
- テンプレートの行のディスカバリをクリックします
- 画面の右上隅にある[ディスカバリールールの作成]をクリックします
- フォームにディスカバリルールのパラメーターを入力します
設定内容は以下の通りです。
記載のない設定に関しては自身の環境に置き換えて設定してください。(デフォルトで問題ないです)
設定項目 | 設定値 | 説明・注意点 |
---|---|---|
名前 | <Windowsサービスの検出> | (任意の名前) |
タイプ | Zabbixエージェント | Zabbixエージェント(アクティブ)も可 |
キー | service.discovery | (任意のキー) |
監視間隔 | <1h> | 滅多に変更しないので長くてOK |
設定項目の「タイプ」以外は任意になりますね。。
こちらはLinuxもWindowsも共通設計になりますが、次項の「フィルタ」はご注意ください。
フィルター
ディスカバリルールでは、フィルターがとても重要になってきます。
例えば、何もフィルタをかけずにWindowsサービスを検出すると、監視不要なものまで全て検出してしまい、視認性が悪くなってしまうと共に、それを複数のホストで監視しようものなら、Zabbixの負荷も高くなってしまいます。
幸い、既に標準のテンプレートでも用意されていますので、そちらを拝借しましょう!
マクロ | 条件 | 正規表現 | 正規表現マクロの内容 |
---|---|---|---|
{#SERVICE.NAME} | 一致する | {$SERVICE.NAME.MATCHES} | ^.*$ |
{#SERVICE.NAME} | 一致しない | {$SERVICE.NAME.NOT_MATCHES} | ^RemoteRegistry|MMCSS|gupdate|SysmonLog|clr_optimization_v.+|clr_optimization_v.+|sppsvc|gpsvc|Pml Driver HPZ12|Net Driver HPZ12|MapsBroker|IntelAudioService|Intel(R) TPM Provisioning Service|dbupdate|DoSvc$ |
{#SERVICE.STARTUPNAME} | 一致する | {$SERVICE.STARTUPNAME.MATCHES} | ^automatic|automatic delayed$ |
{#SERVICE.STARTUPNAME} | 一致しない | {$SERVICE.STARTUPNAME.NOT_MATCHES} | ^manual|disabled$^manual|disabled$ |
上記はWindowsサービスを検出するためのフィルターになります。
ただし、マクロの正規表現を見てもらうと分かる通り、これだとWindows上にあるすべてのサービスを監視してしまいますので、実際には必要なサービスのみ監視するようにフィルターを追加してください。
以上でディスカバリルールの設定は完了です!
次に、検出したディスクを監視をするために「アイテムのプロトタイプ」と「トリガーのプロトタイプ」を作成していきましょう。
アイテムのプロトタイプの作成
アイテムのプロトタイプでは、Zabbixで自動的に検出した全てのWindowsサービスの監視設定を共通的に行うことができます。
- [設定] → [テンプレート(またはホスト)]に移動します
- テンプレートの行のディスカバリをクリックします
- 該当のディスカバリルールにある[アイテムのプロトタイプ]をクリックします
- 画面の右上隅にある[アイテムのプロトタイプの作成]をクリックします
- フォームにアイテムのパラメーターを入力します
冒頭でも少し触れましたが、例えば、サービスが複数ある場合、LLDを利用しなければサービスの数だけアイテムを設定しなければなりませんが、アイテムのプロトタイプを使えば、それぞれのLLDで検出したサービスのアイテムもZabbixが自動で作成します!
設定項目 | 設定値 | 説明・注意点 |
---|---|---|
名前 | <”{#SERVICE.NAME}” ({#SERVICE.DISPLAYNAME}):Windowsサービス監視> | (任意の名前)※LLDマクロを使うと尚良し |
タイプ | Zabbixエージェント | Zabbixエージェント(アクティブ)も可 |
キー | service.info[“{#SERVICE.NAME}”,state] | LLDマクロ{#SERVICE.NAME}とstateオプションを使用する |
データ型 | 整数 | サービス状態の数値: 0 – 実行中 1 – 一時停止 2 – 保留中の開始 3 – 保留中の一時停止 4 – 保留中の続行 5 – 保留中の停止 6 – 停止 7 – 不明 255 – 該当サービスなし |
単位 | <なし> | (後ほど記載) |
監視間隔 | <1m> | (任意の間隔。トリガーも考慮する) |
トリガーのプロトタイプの作成
トリガーのプロトタイプもアイテムのプロトタイプと同じように、1つ設定していたら、Zabbixが検出したサービス全てに自動で設定されます。
- [設定] → [テンプレート(またはホスト)]に移動します
- テンプレートの行のディスカバリをクリックします
- 該当のディスカバリルールにある[トリガーのプロトタイプ]をクリックします
- 画面の右上隅にある[トリガーのプロトタイプの作成]をクリックします
- フォームにトリガーのパラメーターを入力します
トリガーのプロトタイプの閾値についてはご自身の環境に合わせてください。
設定する際は、アイテムで取得した値が「0」が実行中(正常)であることに注意しましょう。
設定項目 | 設定値 | 説明・注意点 |
---|---|---|
名前 | <”{#SERVICE.NAME}” ({#SERVICE.DISPLAYNAME}) が実行されていません (スタートアップの種類 {#SERVICE.STARTUPNAME})> | スタートアップの種類: 0 – 自動 1 – 自動遅延 2 – 手動 3 – 無効 4 – 不明 |
深刻度 | <軽度の障害> | (任意の深刻度) |
条件式 | min(/Template Module Windows services by Zabbix agent/service.info[“{#SERVICE.NAME}”,state],#3)<>0 | 過去3回の最小値が0(実行中)以外なら障害イベントを発生 |
もし、サービス毎に別々の閾値を設定したいと考えているなら、コンテキストユーザーマクロが便利ですよ!
【フィルタの注意点】サービス名と表示名は違う!
最後に、ディスカバリルールのフィルターで少し触れましたが、フィルターの設定がデフォルトのままだと、大量のWindowsサービスを検出してしまい、意図したサービスを監視することが難しくなります。
そこで、予めフィルターで監視するサービス名を絞りたいのですが、上の画像を見ると分かる通り、Windowsサービスには「サービス名」と「表示名」というものがあり、しばしばこの2つを間違えて設定してしまうことがありますので注意しましょう。
画像左の例では、時刻のズレを修正するためにインターネット時刻と同期をしてくれる「Windowsタイムサービス」ですが、表示名は「Windows Time」ととてもわかりやすいですが、実際にZabbixに監視設定するサービス名は「Win32Time」となります。
また、画像右の「リモートデスクトップサービス」の表示名は「Windows Desktop Services」ですが、肝心のサービス名は「TermService」ですね。
このように、ZabbixでWindowsサービス監視をする際は、きちんとサービス名を確認してから設定しましょう!
コメント