NFX150、NFX250 NextGen、NFX350デバイスでのSNMPの設定
SNMP は、ネットワーク デバイスを中央から監視します。NFXシリーズ(NFX150、NFX250 NextGen、NFX350)デバイスは、SNMPv2cおよびSNMPv3を使用したMIBデータのクエリーをサポートしています。 個別のSNMPエージェント(SNMPプロセスまたはsnmpdと呼ばれる)は、vjunos0とホストOSに存在します。vjunos0は、ホストOSのプロキシとして機能します。システムおよびシャーシ関連の MIB データは vjunos0 で利用できます。
Junos OS リリース 21.4R1 以降、NFXシリーズデバイスは LM-SENSORS-MIB、ENTITY-SENSORS-MIB、および libvirt MIB をサポートしています。LM-SENSORS-MIB および ENTITY-SENSORS-MIB データは vjunos0 で利用でき、libvirt MIB データはホスト OS で利用可能です。libvirt MIB を使用して仮想マシンを監視することができます。このトピックでは、libvirt MIB の SNMP 実装について説明します。
Libvirt MIB データにアクセスするために SNMPv2c を設定する方法
SNMPv2c は、SNMP クライアントと、クライアントが SNMP エージェント内のデータにアクセスする方法を決定する際にパスワードとして機能するコミュニティ文字列を使用します。コミュニティ文字列は、NFXシリーズデバイスでは事前設定されていません。SNMPv2c を使用して MIB データにアクセスするには、ホスト OS のコミュニティ文字列と SNMP プロキシを構成する必要があります。コミュニティ文字列がホストOSに追加されます。
図 1 は、NFXシリーズ デバイス上の SNMPv2c の通信フローを示しています。
での SNMPv2c の通信フロー
ユーザーが snmpwalkなどのSNMPコマンドを発行する場合は、ネットワーク管理サーバーからコミュニティ文字列を使用して snmpget します。
- リクエストは vjunos0 の SNMP デーモンに送られます。SNMPDは、SNMPリクエスト内のコミュニティ文字列を読み取り、内部ルーティング インスタンスnfx-hostを使用してリクエストをホストOSにリダイレクトします。
- ホストOSのsnmpdがリクエストを処理し、応答をvjunos0に送信し、vjunos0がネットワーク管理サーバーに送信します。
SNMPv2c を設定するには:
Libvirt MIB データにアクセスするために SNMPv3 を設定する方法
SNMPv3は認証と暗号化をサポートしているため、MIBデータにアクセスする安全な方法を提供します。SNMPv3 では、メッセージのセキュリティにユーザーベースのセキュリティモデル (USM) と、アクセス制御に view-based access control model(VACM)を使用します。USM は認証と暗号化を指定し、VACM はアクセス制御ルールを指定します。 図 2 は、NFXシリーズ デバイス上の SNMPv3 の通信フローを示しています。SNMPv3 の場合は、以下を作成する必要があります。
- ホストOSのvmhost階層の下にある、認証タイプとプライバシーを持つSNMPv3ユーザー
- ユーザー名とコンテキストを持つSNMPv3プロキシ
での SNMPv3 の通信フロー
ユーザーが、ネットワーク管理サーバーからのユーザー名と認証資格情報を使用して、(snmpwalk, snmpget) などの SNMP コマンドを発行すると、次のようになります。
- リクエストは vjunos0 の SNMP デーモンに送られます。SNMPDは、SNMPリクエスト内のホストOSのコンテキストを読み取り、内部ルーティング インスタンスnfx-hostを使用してリクエストをホストOSにリダイレクトします。
- ホストOSのsnmpdがリクエストを処理し、応答をvjunos0に送信し、vjunos0がネットワーク管理サーバーに送信します。
SNMPv3を設定するには:
Libvirt MIB データをクエリーする方法
snmpget、snmpgetnext、および snmpwalk コマンドを使用して、MIB 情報を読み取ることができます。snmpset を使用して libvirt MIB を設定することはできません。
libvirt MIB は以下の情報を提供します。
- アクティブな仮想ゲストの名前(ドメイン名)
- アクティブゲストの現在の状態(ドメインの状態)
- 仮想ゲストが使用する仮想 CPU の数 (ドメインに定義された CPU 数)
- 仮想ゲストが使用している現在のメモリ量(MiB単位)(現在の割り当てメモリ)
- ドメインのメモリ制限 (仮想ゲストが使用できるメモリの最大量 (MiB) )
- 仮想ゲストが使用する CPU 時間、ナノ秒(CPU 時間)
- 仮想ゲストのステータス(行のステータス)
以下は、 snmpwalk コマンドを NMS で実行した場合の出力例です。
- SNMPv2c:
nms_server# snmpwalk -v2c -Obs -c community-name device_A LIBVIRT-MIB::libvirtMIB libvirtGuestName.51.145.57.25.141.222.70.137.181.75.129.190.178.93.132.174 = STRING: "centos1" libvirtGuestName.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = STRING: "vjunos0" libvirtGuestState.51.145.57.25.141.222.70.137.181.75.129.190.178.93.132.174 = INTEGER: running(1) libvirtGuestState.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = INTEGER: running(1) libvirtGuestCpuCount.51.145.57.25.141.222.70.137.181.75.129.190.178.93.132.174 = Gauge32: 1 libvirtGuestCpuCount.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Gauge32: 1 libvirtGuestMemoryCurrent.51.145.57.25.141.222.70.137.181.75.129.190.178.93.132.174 = Gauge32: 512 libvirtGuestMemoryCurrent.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Gauge32: 1954 libvirtGuestMemoryLimit.51.145.57.25.141.222.70.137.181.75.129.190.178.93.132.174 = Gauge32: 512 libvirtGuestMemoryLimit.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Gauge32: 1954 libvirtGuestCpuTime.51.145.57.25.141.222.70.137.181.75.129.190.178.93.132.174 = Counter64: 12430000000 libvirtGuestCpuTime.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Counter64: 808830000000 libvirtGuestRowStatus.51.145.57.25.141.222.70.137.181.75.129.190.178.93.132.174 = INTEGER: active(1) libvirtGuestRowStatus.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = INTEGER: active(1) libvirtGuestRowStatus.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = No more variables left in this MIB View (It is past the end of the MIB tree)
- SNMPv3:
nms-server# snmpwalk -Obs -v3 -a authentication-type -A Authentication_Password -x privacy-type -X Privacy-Password -l authPriv-level -u snmpv3-user-name -n snmpv3-context-name device_B LIBVIRT-MIB::libvirtMIB libvirtGuestName.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = STRING: "vjunos0" libvirtGuestName.185.178.34.217.212.63.76.189.191.225.54.201.166.88.167.118 = STRING: "vnf0" libvirtGuestState.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = INTEGER: running(1) libvirtGuestState.185.178.34.217.212.63.76.189.191.225.54.201.166.88.167.118 = INTEGER: running(1) libvirtGuestCpuCount.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Gauge32: 1 libvirtGuestCpuCount.185.178.34.217.212.63.76.189.191.225.54.201.166.88.167.118 = Gauge32: 1 libvirtGuestMemoryCurrent.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Gauge32: 1954 libvirtGuestMemoryCurrent.185.178.34.217.212.63.76.189.191.225.54.201.166.88.167.118 = Gauge32: 512 libvirtGuestMemoryLimit.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Gauge32: 1954 libvirtGuestMemoryLimit.185.178.34.217.212.63.76.189.191.225.54.201.166.88.167.118 = Gauge32: 512 libvirtGuestCpuTime.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = Counter64: 959760000000 libvirtGuestCpuTime.185.178.34.217.212.63.76.189.191.225.54.201.166.88.167.118 = Counter64: 19830000000 libvirtGuestRowStatus.170.187.204.221.238.255.66.227.0.0.86.74.85.78.79.83 = INTEGER: active(1) libvirtGuestRowStatus.185.178.34.217.212.63.76.189.191.225.54.201.166.88.167.118 = INTEGER: active(1)
以下に、NFXシリーズ デバイスで snmpwalk コマンドを実行した場合の出力例を示します。
root@host> show vmhost snmp mib walk LIBVIRT-MIB::libvirtMIB LIBVIRT-MIB::libvirtGuestName[STRING: 33913919-8dde-4689-b54b-81beb25d84ae] = STRING: "centos1" LIBVIRT-MIB::libvirtGuestName[STRING: aabbccdd-eeff-42e3-0-564a554e4f53] = STRING: "vjunos0" LIBVIRT-MIB::libvirtGuestState[STRING: 33913919-8dde-4689-b54b-81beb25d84ae] = INTEGER: running(1) LIBVIRT-MIB::libvirtGuestState[STRING: aabbccdd-eeff-42e3-0-564a554e4f53] = INTEGER: running(1) LIBVIRT-MIB::libvirtGuestCpuCount[STRING: 33913919-8dde-4689-b54b-81beb25d84ae] = Gauge32: 1 LIBVIRT-MIB::libvirtGuestCpuCount[STRING: aabbccdd-eeff-42e3-0-564a554e4f53] = Gauge32: 1 LIBVIRT-MIB::libvirtGuestMemoryCurrent[STRING: 33913919-8dde-4689-b54b-81beb25d84ae] = Gauge32: 512 LIBVIRT-MIB::libvirtGuestMemoryCurrent[STRING: aabbccdd-eeff-42e3-0-564a554e4f53] = Gauge32: 1954 LIBVIRT-MIB::libvirtGuestMemoryLimit[STRING: 33913919-8dde-4689-b54b-81beb25d84ae] = Gauge32: 512 LIBVIRT-MIB::libvirtGuestMemoryLimit[STRING: aabbccdd-eeff-42e3-0-564a554e4f53] = Gauge32: 1954 LIBVIRT-MIB::libvirtGuestCpuTime[STRING: 33913919-8dde-4689-b54b-81beb25d84ae] = Counter64: 12300000000 LIBVIRT-MIB::libvirtGuestCpuTime[STRING: aabbccdd-eeff-42e3-0-564a554e4f53] = Counter64: 734900000000 LIBVIRT-MIB::libvirtGuestRowStatus[STRING: 33913919-8dde-4689-b54b-81beb25d84ae] = INTEGER: active(1) LIBVIRT-MIB::libvirtGuestRowStatus[STRING: aabbccdd-eeff-42e3-0-564a554e4f53] = INTEGER: active(1)
サポートされているシャーシ MIB とトラップ
NFXシリーズ デバイスは、次のシャーシ MIB をサポートしています。
- jnxFruContentsIndex(英語)
- jnxFruL1インデックス
- jnxFruL2インデックス
- jnxFruL3インデックス
- jnxFruName
- jnxFruType
- jnxFruSlot
- jnxFruTemp
- jnxFruOfflineReason
- jnxFruLastPowerOff
- jnxFruLastPowerOn
- jnxFruパワーアップタイム
- jnxFruChassisId(jnxフルシャーシID)
- jnxFruChassisDescr
- jnxFruPsd割り当て
NFXシリーズデバイスは、以下のトラップをサポートしています。
- jnxFanFailure
- jnxFanOK
- jnxPowerSupplyの失敗
- jnxPowerSupplyOK
- jnxOverTemperature(jnx過熱)
- jnx温度OK
- jnxPowerSupplyRemoved(NFX350のみ)
サポートされる libvirt MIB トラップ
libvirt MIB は仮想マシンを監視し、ネットワーク管理サーバーに非同期トラップを送信します。たとえば、ドメイン(VNF)が予期せずクラッシュした場合、ネットワーク管理サーバーに通知が送信されます。トラップはホストOSで生成され、vjunos0のsnmptrapdデーモンに送信されます。snmptrapd デーモンは、トラップをネットワーク管理サーバーに転送します。
libvirt トラップの定義構造は次のとおりです。
libvirtGuestNotif NOTIFICATION-TYPE
OBJECTS { libvirtGuestName,
libvirtGuestUUID,
libvirtGuestState,
libvirtGuestRowStatus }
STATUS current
DESCRIPTION
"Guest lifecycle notification."
::= { libvirtNotifications 1 }
snmp libvirt トラップの出力例を次に示します。
SNMPv2-MIB::snmpTrapOID.0 = OID: LIBVIRT-MIB::libvirtGuestNotif, LIBVIRT-MIB::libvirtGuestName.0 = STRING: "test1", LIBVIRT-MIB::libvirtGuestUUID.1 = STRING: 7ad4bc2a-16db-d8c0-1f5a-6cb777e17cd8, LIBVIRT-MIB::libvirtGuestState.2 = INTEGER: running(1), LIBVIRT-MIB::libvirtGuestRowStatus.3 = INTEGER: active(1)
アクティブゲストの現在の状態は、次のいずれかになります。
- 実行中(1)
- ブロック(2)
- 一時停止(3)
- シャットダウン(4)
- シャットオフ(5)
- クラッシュ(6)
libvirt SNMPv2c トラップサポートを有効にする方法
SNMPv2c トラップ サポートを有効にするには:
-
トラップのコミュニティ名を設定します。
root@host# set vmhost snmp v2c-trap trap-community community-name
-
トラップの発信元アドレスであるクライアントアドレスを設定します。送信元アドレスを設定しない場合、ハイパーバイザーアドレス(192.168.1.1)がクライアントアドレスとして使用されます。
root@host# set vmhost snmp client-address client-ip
-
ポートフォワーディングを設定します。複数のIPアドレスを設定できます。
root@host# set forwarding-options helpers port 162 server IP-address-of-trap-target
libvirt SNMPv3 トラップサポートを有効にする方法
SNMPv3 トラップ サポートを有効にするには:
-
トラップのユーザー名を設定します。
root@host# set vmhost snmp v3-trap trap-user user-name
-
トラップの発信元アドレスであるクライアントアドレスを設定します。送信元アドレスを設定しない場合、ハイパーバイザーアドレス(192.168.1.1)がクライアントアドレスとして使用されます。
root@host# set vmhost snmp client-address client-ip
-
ユーザーの AES パスワードと SHA パスワードを設定します。
root@host# set vmhost snmp v3 user user-name authentication-sha authentication-password password root@host# set vmhost snmp v3 user user-name privacy-aes128 privacy-password password
-
libVirtMIBトラップサポートのポートフォワーディングを設定します。複数のIPアドレスを設定できます。
root@host# set forwarding-options helpers port 162 server IP-address-of-trap-target