Help us understand the problem. What is going on with this article?

DatadogのSNMP Integrationを利用してネットワーク機器を監視する

More than 1 year has passed since last update.

スクリーンショット 2018-03-11 23.13.47.png

はじめに

ネットワーク機器の監視を行う場合 snmp を利用し監視を行うのが一般的です。
今回はDatadogのSNMP Integrationを利用し監視を行う事が出来るか検証をしました。監視対象の機器はCitrix NetScaler MPXを対象として、OIDやMIBを指定して取得する方法から、拡張MIBファイルをSNMP Integration用の ysnmp 形式に変換し監視を行うまでを実践してみたいと思います。

環境

・監視ホスト CentOS: 6.9 Python: 2.7.14
・監視対象 Citrix NetScaler MPX 11515 NS 11.0 71.22.nc

手順

監視ホストにインストールした Datadog Agent でSNMP Checkを利用するため /etc/dd-agent/conf.d ディレクトリ内にある snmp.yaml.example をリネームし snmp.yaml を作成します。

機器への接続情報を設定する

instances:
   - ip_address: 10.10.10.10
     port: 161
     community_string: citrix
     snmp_version: 2
     timeout: 1
     retries: 5
     enforce_mib_constraints: true

ここでは監視対象の IP port community名 snmpバージョン を指定します。

OIDでの取得

     metrics:
       - OID: 1.3.6.1.4.1.5951.4.1.1.41.6.1.2
         name: nsCPUusage

       - OID: 1.3.6.1.4.1.5951.4.1.1.41.2
         name: resMemUsage

機器のOIDをsnmpwalkやCitrixの公式リファレンスを参考に取得したいOIDとDatadog上でのメトリクス名を指定します。

MIBとSymbolを指定

     metrics:
     - MIB: IF-MIB
      symbol: ifInOctets

直接シンボルを指定し取得する事も可能です。

動作確認

snmp.conf を設定後 service datadog-agent restart エージェントのリスタートを行い service datadog-agent info コマンドで正しく値が取得できていることを確認します。

    snmp (1.3.1)
    ------------
      - instance #0 [OK]
      - Collected 274 metrics, 0 events & 1 service check

このようにCollected metrics と正しくメトリクス数が表示されて取得が開始されている事が確認できます。
もし取得が上手く出来ていない場合は /var/log/datadog/collector.log からエラー内容を確認してください。

スクリーンショット 2018-03-11 20.38.35.png

ダッシュボードから取得した値を表示し上手く取得が出来ている事を確認できました。

ベンダー固有の拡張MIBファイルの設定

ここまでは簡単に取得する事が可能でしたが、ベンダー固有の拡張MIBを取得したい場合、Zabbix等ではMIBファイルをサイトからDLしてきて配置するだけで利用可能ですが、Datadogの場合そのまま配置する事が出来ないので ysnmp 形式に変換したファイルを用意する必要があります。Datadogの公式リファレンスに情報が少なくいくつか試行錯誤が必要が必要でした。

変換の用意

変換するにあたり、pysnmpに包容されている build-pysnmp-mib コマンドを実行する環境の用意が必要になります。 SNMP library for Python または Package Index pysnmp 等から準備してください。

MIBファイルを入手

スクリーンショット 2018-03-11 21.13.09.png
NetScalerの場合は、機器にGUIからログインしDownload > SNMP Files に用意されています。
今回はSNMP v2 - MIB Object Definitionsを利用します。
各ベンダーによって取得方法が異なるので、 Junos OS Enterprise MIBsCisco MIB tools などから対象機器のファイルを取得してください。

MIBファイルを変換

用意したMIBファイルをbuild-pysnmp-mibコマンドを利用し ysnmp 形式に変換します。

build-pysnmp-mib
build-pysnmp-mib -o 変換後ファイル名.py 変換したいMIBファイル名.mib

変換が完了するとpython形式のファイルが作成されました。

変換後のPythonファイルの読み込み

変換したPythonファイルを /etc/dd-agent/mibsというディレクトリを作成し配置します。

init_config:
     mibs_folder: /etc/dd-agent/mibs

Datadogから作成したディレクトリを読み込むために snmp.yaml内の init_config に先程作成したディレクトリを追記します。

拡張MIBの指定

       - MIB: NS-ROOT-MIB
         table: vlanEntry
         symbols:
           - vlanTotRxBytes
           - vlanTotTxBytes
         metric_tags:
           - tag: vlan
             column: vlanAliasName

今回はCitrixの拡張MIBで取得できる、Vlan毎の受信と送信量を監視するため vlanTotRxBytes vlanTotTxBytesを指定しました。カラムには vlanAliasNameを指定して各Vlan毎のエイリアス名と紐付けるようにしています。

動作確認

追記後 service datadog-agent restart エージェントのリスタートを行ったところ以下のエラーが発生しました。

      - instance #0 [WARNING]
          Warning: Fail to collect some metrics: MIB module "/etc/dd-agent/mibs/NS-ROOT-MIB.py" load error: ['Traceback (most recent call last):\n', '  File "/opt/datadog-agent/embedded/lib/python2.7/site-packages/pysnmp/smi/builder.py", line 331, in loadModule\n    exec (modData, g)\n', '  File "<string>", line 1005, in <module>\n', "NameError: name 'Counter64' is not defined\n"]
          Warning: Fail to collect some metrics: MIB module "/etc/dd-agent/mibs/NS-ROOT-MIB.py" load error: ['Traceback (most recent call last):\n', '  File "/opt/datadog-agent/embedded/lib/python2.7/site-packages/pysnmp/smi/builder.py", line 331, in loadModule\n    exec (modData, g)\n', '  File "<string>", line 1005, in <module>\n', "NameError: name 'Counter64' is not defined\n"]
      - Collected 0 metrics, 0 events & 1 service check

変換後のPythonファイルでシンタックス Counter64 が何故か定義されていなかったようです。


( Bits, Counter32, Counter64, Gauge32, Integer32, Integer32, IpAddress, ModuleIdentity, MibIdentifier, NotificationType, ObjectIdentity, MibScalar, MibTable, MibTableRow, MibTableColumn, TimeTicks, TimeTicks, enterprises, ) = mibBuilder.importSymbols("SNMPv2-SMI", "Bits", "Counter32", "Counter64", "Gauge32", "Integer32", "Integer32", "IpAddress", "ModuleIdentity", "MibIdentifier", "NotificationType", "ObjectIdentity", "MibScalar", "MibTable", "MibTableRow", "MibTableColumn", "TimeTicks", "TimeTicks", "enterprises")

あらためてシンタックスを定義したところ正しく読み込む事ができました。

a.png

実際にダッシュボードから取得した値を表示しToplistとグラフを利用し、Vlan毎の送信・受信量の監視とVlan毎のグラフを表示する事が出来ました。値の中には指定したVlanと紐付いているエイリアス名が表示されているので、どのサービスが多く通信を行っているのか一見して確認することが出来ます。

まとめ

今回はDatadog SNMP Integrationを利用してオンプレミス環境にある Citrix NetScalerの監視を行いましたが、監視を行うまでのハードルは高いものの、Datadogはネットワーク機器の監視にもかなり使えそうです。また今後は Datadog logs を利用したsyslogの監視も検証してみたいと思います。

参考

https://docs.datadoghq.com/integrations/snmp

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away