Windowsサーバー上のサービス稼働状況をSNMPで取得する

お仕事の都合上Polycom機器へのSNMPアクセスををいろいろと調べていたのですが、ひょんなことからWindowsで稼働中のサービスをSNMPで状況監視するというタスクが発生しました。

ネットを検索すると、Windows ServerのSNMPエージェントを有効にする手順は数多く見受けられるのですが「実際にSNMPマネージャからどのOIDにアクセスすればサービスの稼働状況が確認できるのか?」という具体的な情報をなかなか見つけることができず、実際にやってみることにしました。

MIBを使用したsnmpアクセスを行うとLanMgr-Mib-II-MIB::svSvcOperatingState.を参照すれば各サービスの状況が取得できるようなのですが、サービス名=インデックスの扱いになっているようで、この「サービス名という文字列」を含むOIDアクセスに苦戦しました。

備忘録としてのメモ書き程度になりますが、どこかの誰かの役に立つやもしれませので記しておきます。

———————————–

Windowsの場合、「SNMPエージェント」自体は標準サービスとしてインストール可能なようです。

なので、SNMPエージェント機能自体はMSが公式に提供しているサービスと認識しています。(—>MSのフォーラムに問い合わせたところ「SNMP運用は非推奨」との回答がありました・・・・)

Windows ServerでSNMPサービス(エージェント)を動作させている状態で、別のサーバー(監視システム想定(ZABBIXでテストしています))にインストールしてあるsnmpwalkからOIDアクセスが可能かテストしてみます。

コマンド

結果

監視システム想定のサーバーにはWindowsサーバー用のプライベートMIBと思われる「lmmib2.mib」を取り込んでいます。

※lmmib2.mibがWindowsサーバー用のプライベートMIBに該当するのだろうというのはネットの検索で調べました。
—> https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa379157(v=vs.85).aspx

アクセスができたので、

とし、取得可能なすべてのオブジェクトをいったん取りました。

LanMgr-Mib-II-MIB::svSvcName. にサービスの名前を返すオブジェクトがあるようです。

LanMgr-Mib-II-MIB::svSvcOperatingState. にサービスの稼働状況を返すオブジェクトがあるようです。

ネットを検索した情報になるのですが、LanMgr-Mib-II-MIB::svSvcOperatingState. に続けてサービス名を入れるとそのOIDにアクセスができるようです。

—> svSvcOperatingState.”Skype for Business Server XMPP Translating Gateway” で Skype for Business Server XMPP Translating Gatewayのサービスステータスが取得できる。

ただし 文字列の部分はアスキーコードへの変換が必要な様です。

こちらのサイトを利用させていただきました)

 

文字列を変換すると
svSvcOperatingState.○.83.107.121.112.101.32.102.111.114.32.66.117.115.105.110.101.115.115.32.83.101.114.118.101.114.32.88.77.80.80.32.84.114.97.110.115.108.97.116.105.110.103.32.71.97.116.101.119.97.121
になるのですが、

○の部分は、この文字列の長さを入力する必要があるようです。

ですので最終的には下記になります。
svSvcOperatingState.50.83.107.121.112.101.32.102.111.114.32.66.117.115.105.110.101.115.115.32.83.101.114.118.101.114.32.88.77.80.80.32.84.114.97.110.115.108.97.116.105.110.103.32.71.97.116.101.119.97.121

↑ = OID

オブジェクト参照し

稼働中のステータスも取得できました。

ただしサービス名に日本語が含まれている場合、アスキーコードに変換しても参照ができませんでした。

以下、日本語サービスのSNMP OIDの確定手順。

Snmpwalkで返してくる値は16進数なので、

Skype for Business Server Web 会議(16進)
Hex-STRING: 53 6B 79 70 65 20 66 6F 72 20 42 75 73 69 6E 65 73 73 20 53 65 72 76 65 72 20 57 65 62 20 E4 BC 9A E8 AD B0

↑サービス名の問い合わせに関しての戻り値。

文字列の内「会議」部分だけを調べる。
http://www.ahref.org/app/mozicode/mozicode_henkan.cgi

「会議」部分 →文字コード判明 →UTF-8(16進)
E4 BC 9A E8 AD B0

2進に変換する

サイト変換標準 32文字(全角1文字を1文字としてカウント)
.1.3.6.1.4.1.77.1.2.3.1.3.32.83.107.121.112.101.32.102.111.114.32.66.117.115.105.110.101.115.115.32.83.101.114.118.101.114.32.87.101.98.32.228.188.154.232.173.176
→NG

サイト変換標準 34文字(全角1文字を2文字としてカウント)
.1.3.6.1.4.1.77.1.2.3.1.3.34.83.107.121.112.101.32.102.111.114.32.66.117.115.105.110.101.115.115.32.83.101.114.118.101.114.32.87.101.98.32.228.188.154.232.173.176
→NG

サイト変換標準 36文字(文字数ではなく要素数でカウント)
.1.3.6.1.4.1.77.1.2.3.1.3.36.83.107.121.112.101.32.102.111.114.32.66.117.115.105.110.101.115.115.32.83.101.114.118.101.114.32.87.101.98.32.228.188.154.232.173.176
→成功

戻り値: LanMgr-Mib-II-MIB::svSvcOperatingState.”Skype for Business Server Web ……” = INTEGER: active(1)

 

これでWindowsのサービスの稼働状況をSNMPで取得できるようになりましたが、サービスが落ちたとき戻り値としてstopなどのコードを返してきません。

どうやらサービスが稼動していないときにはそのOID自体にアクセスができなくなり「そんなOIDはないよ」とSNMPマネージャー側がエラーを吐きます。(No Such Instance currently exists at this OID)

またサービスが停止(開始)してからそのステータスがSNMPで検知できるまで2分ほど時間がかかるようです。

結論:
Windowsのサービス稼働状況をSNMPマネージャから直接監視するのはやってやれないことは無いが、工夫が必要そう。

という感じです。