datadog で snmpコレクタを利用して監視をしようとして諦めた話。

背景

datadogというSaaSのモニタリングサービスがあります。

エージェントを対象に入れてデータを送るpush型モデルなのですが、ホストの情報だけでなく、様々な方法でメトリクスを取得できるよう担っており、その中にsnmpも存在しています。

ホスト監視のためにエージェントを入れていたので、ついでにネットワーク機器もまとめて監視できると嬉しいなと思い立ちました。

試したこと

https://docs.datadoghq.com/integrations/snmp/ にあることを一通り。

単一メトリック

OIDと名称(任意に指定可能)を指定して取得できます。

テーブル

MIBを用意してMIBとテーブルを指定、さらにテーブルのどれを取得するか選べます。 また、メトリックにテーブル内の値を任意のタグとしてつけることができます。

できなかったこと

OIDを指定したテーブル取得

OIDを利用する場合は、単一メトリックとして、最初に得られた値が利用されます。

他のテーブルの値をテーブルのタグとして利用

わかりやすくいうとifXTableにあるifHCInOctetsにifTableにあるifDescrを利用したいというようなケースです。

この場合はifTableにあるIfInOctetsを利用するか、ifXTableにあるifNameを利用すれば良いのですが、そのほかにも似たようなケースがあり、いい感じのタグがつけられませんでした。

結局どうしたのか。

prometheusのコレクタがあるので、snmp_exporterを利用しました。

datadog側でデータの取得元をsnmp_exporterにして取得する形です。