ぶていのログでぶログ

思い出したが吉日

mackerelでSNMPな機器をホストとして管理する

この記事は Mackerel Advent Calendar 2015の22日目の記事です。 昨日は id:papix さんのMackerelを使ったデプロイの仕組み 〜Reactio編〜でした。


先日、Mackerelでネットワーク機器のようにSNMPな機器を管理するにはどうしたらいいか?っと社内Slackで聞かれました。 その時は、MackerelのSNMPプラグインを使って登録するのがベターなのでは?っと回答したのですが、よくよく考えてみると実際の機器とは全然関係のないホストの1メトリックとして登録されてしまい、ちょっと分かりづらいなぁっと思っていました。 Muninでも同じような表示の仕方をしている*1し仕方ないかっとその場は諦めました。

しかし!! この記事を書き始める1時間くらい前に、mkrコマンドを駆使すれば別のホストとして定義できるのでは?! っと思いついたのでガッと実装してみました! シェルスクリプトで(ぇ

スクリプト

ガッと作ったのでエラー処理は雑です。。

Ciscoスイッチ向けmackerel agentスクリプト

使い方

$ mackerel-snmp-agent.sh 192.168.1.1

解説

上記スクリプトCiscoスイッチの情報を取得することを前提にして作っています(Catalyst2960でメトリックが取得できることも確認しています)。

引数より対象の機器情報を取得します。 対象の機器のホストIDがまだ無い場合、 mkr create コマンドを使ってホストの登録とホストIDの取得を行います。 ホストIDの保存先はmackerel-agentにならって /var/lib/mackerel 配下に対象機器毎にディレクトリを掘って保存しています。 ホストIDを取得したら後はひたすらSNMPを叩いています。

メトリックの登録は mkr throw を使います。 --host を指定する*2とホストメトリックの登録になり メトリック名 値 エポック時間 を標準入力から流し込みmackerelに登録しています

このスクリプトを毎分実行するといい感じにグラフが完成します。

っと思ったら途切れ途切れに

f:id:buty4649:20151223002941p:plain

SNMPの取得が遅いのか1分で取得しきっていないようです。。 そして、SNMPのカウンター値がオーバーフローしているらしくグラフの乱高下がひどいこに… もう少し調整が必要なようです。

まとめ

今回はSNMPな機器をMackerelに単独のホストとして登録するスクリプトを実装してみました。 同様な方法でエージェントをインストール出来ない機器でも、リモートからメトリックが取得できれば今回の様な方法でMackerelで管理することができると思います。

シェルスクリプトで作りましたが需要がありそうなら他の言語でちゃんと実装しなおしたいと思います。。

*1:use_nodename noとhostsを駆使すれば別のホストとして表示させられないこともない

*2:-hオプションにするとなぜかusageが表示されてしまった。。