====== SNMP監視 ====== ===== 概要 ===== 別端末からネットワーク経由で拠点の製品保証サーバーや見えるサーバーの情報を取得することが出来る。 ==== SNMPとは ==== SNMP(Simple Network Management Protocol)とは、ネットワーク内に存在する装置の状態を監視することを目的につくられたプロトコルで業界標準の規格です。各ベンダ共通の規格なので、サーバーやルータの種類を問わず利用可能です。 SNMPはマネージャ側(監視サーバなど、管理側)とエージェント側(監視対象のサーバ、ネットワーク機器など)に分かれて構成されます。 ==== MIBとは ==== MIB(Management Information Base)とは、管理情報を蓄積したデータベースで、SNMPエージェントは監視対象機器の情報をMIBから参照します。\\ MIBには「標準MIB」とメーカーや機器固有のものなどが存在します。メーカーや機器固有のものはメーカーに確認する必要があります。 ==== OIDとは ==== MIBに格納されている情報の1つ1つは「オブジェクト(Object)」と呼ばれます。\\ オブジェクトは情報の要素によってツリー構造で管理され、それぞれに「オブジェクトID(OID)」という識別子が割り振られています。 OIDはピリオドで区切られた数字で表現されます。 標準MIBのうち「MIB-2」はOID「1.3.6.1.2.1」になります。 iso(1)   L org(3)    L dod(6)      L internet(1)        L private(4)        L mgmt(2)          L mib2(1)            L system(1) MIBに含まれているオブジェクトのOIDとその意味は「MIBファイル」というテキストファイルに記述されています。\\ 監視対象機器からSNMPを使ってどのような情報を収集できるかは、その監視対象機器がサポートしているMIBファイルを確認する必要があります。 ===== 設定 ===== SNMPを使用できるようにする設定は下記サイトを参照 * [[https://tech.pjin.jp/blog/2018/01/31/windows-server-2016-snmp/|Windows Server 2016 で SNMPサービスを有効にする]] * [[https://thwack.solarwinds.com/t5/%E6%8A%80%E8%A1%93%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC/Windows-Server-SNMP-%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95/gpm-p/520293?%3F%3F|WINDOWS SERVER : SNMP 設定方法|]] SNMPサービスのプロパティにあるセキュリティタブにて、コミュニティ名"public"を追加して、「すべてのホストからSNMPパケットを受け取る」にチェックを付ける。 ===== 取得方法 ===== ==== VBScript ==== VBScriptで取得するには、COMにある OlePrn.OleSNMP モジュールを使用することが取得することが出来る。\\ ただし、OID 番号で指定する必要があるのと snmpwalk のような列挙ができない。 agentIP = "192.168.64.123" ' エージェントIPアドレス community = "public" ' エージェントSNMPコミュニティ名 retry = 1 ' リトライ回数 timeout = 200 ' 応答タイムアウト値(ミリ秒) oid = ".1.3.6.1.2.1.1.5.0" ' OID(OIDを変えると取得情報を変えることができる) set snmp = CreateObject("OlePrn.OleSNMP") call snmp.Open(agentIP, community, retry, timeout) value = snmp.Get(oid) 'メッセージを表示 WScript.Echo(value) call snmp.Close() set snmp = nothing ==== CSharp ==== nugetからLextm.SharpSnmpLibをダウンロードして使用する。MITライセンスとなっている。 [[https://docs.sharpsnmp.com/tutorials/introduction.html|Lextm.SharpSnmpLib の使用例]] Walk を使用することで一覧が一括で取得できる。 var result = new List(); Messenger.Walk(VersionCode.V1, new IPEndPoint(IPAddress.Parse("192.168.64.123"), 161), new OctetString("public"), new ObjectIdentifier("1.3.6.1.2.1.25.4.2.1.2"), result, 60000, WalkMode.WithinSubtree); ===== よく使うOID情報 ===== ^名前^OID^説明^ |MACHINE_NAME|.1.3.6.1.2.1.1.5.0|ホスト名(コンピューター名)| |SNMP_MACHINE_UPTIME|.1.3.6.1.2.1.1.3.0|SNMPエージェントが起動してからの時間 1/100秒| |MACHINE_SYS_UPTIME|.1.3.6.1.2.1.25.1.1.0|前回ホストが起動してからの時間 1/1000秒| |MACHINE_SYS_DATE|.1.3.6.1.2.1.25.1.2.0|ホストから見たローカルの日付と時間| |MACHINE_RAMMEMORY|.1.3.6.1.2.1.25.2.2.0|ホストが持っているRAMの容量| |IP_ADDRESS|.1.3.6.1.2.1.4.20.1|ホストのIPアドレス| |PROCESS_LIST|.1.3.6.1.2.1.1.1.0|プロセス一覧(snmpwalk使用)| * [[http://park1.wakwak.com/~ima/freebsd_netsnmpoidlist.html|[SNMP]MIB-2ツリー配下のOIDの一覧]] * [[https://www.itmedia.co.jp/help/howto/linux/0007master/06/11.html|mib-2サブツリー]] http://oidref.com/ の次に OID 番号を入力すると何かを教えてくれます。 http://oidref.com/1.3.6.1.4.1.2021