1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Datadogに物理機器のMIBファイルを取り込んでSNMP監視する

Last updated at Posted at 2022-07-04

前提

  • Datadog経由で物理機器、例えばNW機器をSNMPを使ってメトリクス収集させたい
  • datadog agentにはSNMP Intergrationがデフォで備わっているので簡単に実現可能
  • しかし大体の機器は独自なOID実装をしていて、当然そういったメトリクスも取得したい
    • 各社が公式に提供しているMIBファイルを取り込んで、独自OIDを使ったSNMP GETを実現させたい!
  • datadog agentはテキストなMIBファイルのインポートはサポートしておらずpythonで書かれたpysnmpの形式でないとインポートできない

注意

  • datadog agentそのものインストールやセットアップについて言及しない
  • 公式的なはっきりとした手順がないので、以下が唯一無二の方法!っていうわけではない。まぁやり方はいくつか考えられると思う。

手順

  • 自分の端末でpysnmpをインストール
$ pip3 install pysnmp pysnmp-mibs
  • MIBファイルをダウンロード
    • 今回は以下を対象にして成功
対象 URL
YAMAHA http://www.rtpro.yamaha.co.jp/RT/docs/mib/index.php
HPE iLO https://support.hpe.com/connect/s/softwaredetails?language=ja&softwareId=MTX_49b4f94b79d64f259eaa527f18
NEX IXシリーズ https://jpn.nec.com/univerge/ix/Manual/index.html?#crm
  • 展開してpysnmp形式に変換
$ unzip yamaha-private-mib.zip
$ mibdump.py ./*
  • これで ~/.pysnmpにpythonとして変換されたMIBファイルが生成される

  • 変換したMIBファイルを各OSの所定パスに配置

    • Windows: C:¥programdata¥datadog¥conf.d¥snmp.d¥mibs/
    • Linux: /etc/datadog-agent/conf.d/snmp.d/mibs/
  • 以下のようにコンフィグファイルを設定

    • python形式であることを明示指定
    • 配置したMIBを読み込むようにパスを明示指定
    • instancesセクション配下で対象とする機器の接続先とコミュニティ名、必要に応じてMIB情報を指定する
      • この時バージョン問題かどうかわからないが、 metricsを指定した場合、標準MIBでサポートされる範囲のSNMP GETができないケースに見舞われた
      • あえて標準MIBだけでmetrics指定を持たない指定と、拡張MIBを前提としたmetrics指定のみの2つを書くことでどちらも取得できた
      • 環境起因かバージョンなのか、はっきりとしたことがわからないが、一応そういった事象が発生した旨とその対象について述べておく、誰かの役に立てば良いが。
    • ref.https://docs.datadoghq.com/ja/agent/guide/agent-configuration-files/?tabs=agentv6v7
/etc/datadog-agent/conf.d/snmp.d/conf.yaml
init_config:
    loader: python
    mibs_folder: /etc/datadog-agent/conf.d/snmp.d/mibs

instances:
  - ip_address: 192.168.0.254
    community_string: private
  - ip_address: 192.168.0.254
    community_string: private
    metrics:
      - MIB: YAMAHA-SW-HARDWARE
        symbol: yshMemoryUtil
      - MIB: YAMAHA-SW-HARDWARE
        symbol: yshCpuUtil5min
      - MIB: YAMAHA-SW-HARDWARE
        symbol: yshInboxTemperature
  • あとはDatadog側で確認すれば、これらの値が取得できていることが確認できるはず

トラブル

mibdump.pyにはぶっちゃけ問題がある。
ref. https://github.com/etingof/pysmi/blob/master/scripts/mibdump.py

mibBorrowerというある種のキャッシュ機構のような機能があり、既に世に知れたMIBファイルであればわざわざ生成処理をしなくても対象MIBと同じものが既にアップストリームで保持されているならそれを信用して使う、というものっぽい。ちなみによく調べていないのでもしかしたら全然違うかもしれない。

この機能が悪さしている。
実装コードを見てもらえればわかるが、↑の処理では http://mibs.snmplabs.com/pysnmpにアクセスする。
このFQDNは既に使われていない。正確にはどこかに買われて、不適当な状態で残置されている。

そのせいか、mibBorrowerの処理の最中にわけわからんhtmlを変換後のMIBだと勘違いしてダウンロードしてくる。
当然、MIBなんかじゃない。見ればわかるが、クソみたいなhtmlだ。MIBとして読み込めない。

これを回避する方法はいくつか考えられるが、サクッとこの機能を無効化するのが良いと思う。
バージョンなどによって行位置は異なると思うので、皆さんそれぞれでよく確認して欲しいが、私のv0.3.4環境だとこんな感じ。

/opt/homebrew/bin/mibdump.py
234    # borrowers = [PyFileBorrower(x[1], genTexts=mibBorrowers[x[0]][1])
235    #             for x in enumerate(getReadersFromUrls(*[m[0] for m in mibBorrowers], **dict(lowcaseMatching=False)))]
...
355    #    mibCompiler.addBorrowers(*borrowers)

ptyhonなのでコメントアウトして保存して再実行すればmibBorrowerの機能を使わず毎回生成して正しくpythonなMIBへと変換してくれるはず。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?