Edited at
DatadogDay 20

カスタムmibファイルのSMNP Integration用のpythonファイルへの変換し、yamlへ設定する

More than 1 year has passed since last update.

DatadogのSMNP integrationは、カスタムなmibを扱うことができます。しかしながら、ドキュメントサイトに十分な記述がされていないために、依存関係の多いカスタムmibを、SMNP integrationが必要としているpythonファイルに変換するには、SMNPの高度な理解と多くの経験値とが求められる状況になっているようです。

私自身もドキュメントのままでは、juniper用のmibを変換することができませんでした。試行錯誤の結果、なんとかエラーを出さないpythonファイルを手に入れるまでたどり着いたので、その行程をまとめておきたいと思います。

これ以外に、もっと適切な方法が有る場合は、下のコメント欄で教え頂けると助かります。(僕は、pysmnp-mib周りはそれほど得意ではないです。未だに試行錯誤中です。説明が不純分なところがあれば、そこも教えてください。)


作業環境


  • OS: ubuntu 16.04

  • Python: 2.7.12 (system python)

  • サンプル事例としてjuniperのmibを使うことにします


作業手順

snmp, snmp-mibs-downloader, python-pysnmp-common インストールします。

package
概要

snmp
SNMP (Simple Network Management Protocol) applications

snmp-mibs-downloader
Install and manage Management Information Base (MIB) files

python-pysnmp4
Python SNMP library for agents and managers (Python 2 module)

multiverseカテゴリーのリポジトリーをOSに取り込めるように追加します。その後、apt-getコマンドを実行し、パッケージをインストールします。。multiverseの説明は、次のascii.jpのドキュメントを参照してください。

$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse"

$ sudo apt-get install snmp snmp-mibs-downloader python-pysnmp4

snmp-mibs-downloaderをインストールすることで、基本となる IETF MIB filesは、/usr/share/mibs/へ保存され、変換時の依存関係を保管してくれるようになります。

尚、以降 /usr/share/mibs/を、更新する際には、次のコマンドを使うことができます。

$ sudo download-mibs

次に、変換に必要なJuniper関連のmibファイルを、juniper.netより取得します。

取得した圧縮ファイルをを展開し、そのディレクトリーでbuild-pysnmp-mibコマンドを使ってmibファイルを個別に変換していきます。

$ sudo build-pysnmp-mib -o henkango_no_file.py henkan_shitai_file.mib

Datadogのドキュメントでは、/opt/datadog-agent/bin/build-pysnmp-mibsというコマンドを使って変換するように記されています。しかし今回は、それを使わず、OSにインストールされたbuild-pysnmp-mibコマンドを使いますので、間違えないようにしてください。

/opt/datadog-agent/bin/build-pysnmp-mibsは、ディレクトリー内いのmibファイルを一括で変換するために、ドキュメントで意図している方法で変換を進めることができませんでした。色々検索した結果、python-pysnmp4でインストールしたbuild-pysnmp-mibを使って個別にmibファイルを変換し、pythonファイルを作ることができました。


変換後のpythonファイルの取扱

下記に示す一覧が、juniperを監視されているお客様の実績に基づいて選んだpythonファイルです。

サンプルなので、mibの依存関係に基づいて必要なファイルを追加していってください。

まず、でき上がったpythonファイルを/opt/datadog-agent/juniper-pymibs へ集めます。

sample です。

./JUNIPER-IF-MIB.py
./IF-MIB.py
./SNMPv2-SMI.py
./HCNUM-TC.py
./SNMPv2-TC.py
./JUNIPER-SMI.py
./JUNIPER-MIB.py
...

その後、snmp.yamlに、追加mib用のpythonファイルを保存する場所のmibs_folderオプションを指定した後、dd-agentを再起動します。

init_config:

mibs_folder: /opt/datadog-agent/juniper-pymibs

instances:
- ip_address: 100.100.100.100
port: xxx
community_string: xxxxxxxxxxxxxxxxxxxxxxxx
snmp_version: 2 # Only required for snmp v1, will default to 2
timeout: 1 # second, by default
retries: 5
enforce_mib_constraints: true # if set to false we will not check the values
tags:
- prod: datacenter-main

metrics:
- MIB: JUNIPER-IF-MIB

...必要な内容を記述していく。


まとめ

SMNP integrationは、色々なシーンで使えそうなintegrationです。しかし、高度な知識を要求さ、なかなかハードルが高いintegrationの一つでもあるのかなと感じています。そのようなintegrationでも、network上に設置された機器を監視するには必要不可欠なモノでもあります。

Datadogのドキュメントを読んで変換で躓いてた人は、上に示した方法にならって、個別にmibファイルをpythonファイルへの変換試してみてください。きっと、変換のハードルは越えられると思います。