そーだいなるらくがき帳

そーだいが自由気侭に更新します。

ネットワークの監視 ~ mackerel-plugin-snmpを読み解く

この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の23日目です。

qiita.com

soudai.hatenablog.com

それでは23日目は mackerel-plugin-snmp です。

mackerel-plugin-snmpSNMP (Simple Network Management Protocol)をつかってデータを取得し、それを可視化するSNMP専用のプラグインです。

github.com

インストールと設定手順

mackerel-plugin-snmpプラグインは先程も説明したとおりSNMPを利用します。 そのため、対象にはSNMPが利用できる設定がされていることが条件になります。 ですがSNMPを使いたい=ある程度ご理解がある前提なので割愛します。 そもそもSNMPについては良い資料が沢山あります。 例えば下記のサイトがとてもわかりやすいのでオススメです。

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

TCP/IP - SNMPとは

SNMPはルータ、スイッチ、サーバなどTCP/IPネットワークに接続された通信機器に対し、ネットワーク経由で監視、制御するためのアプリケーション層プロトコルです。

設定が出来た場合は snmpwalk -v 2c -c <コミュニティ名> <ホスト名> で値が取れればOKです。

プラグインプラグイン集として提供しているパッケージの mackerel-agent-plugins に含まれています。 インストール先は mackerel-plugin-snmp です。

次にMackerelのプラグインはコマンドですので実行する事ができます。

SNMPが設定済みの前提です。

-- /usr/bin はPATHが通っているので省略出来ます
# mackerel-plugin-snmp  -community='public' -host='localhost' '.1.3.6.1.2.1.31.1.1.1.7.2:eth01in:1:0' '.1.3.6.1.2.1.31.1.1.1.11.2:eth01out:1:0'
snmp.eth01in    2100.000000     1514028737
snmp.eth01out   1680.000000     1514028737

これはREADME.mdにもある通り以下のコマンドの意味です。

mackerel-plugin-snmp -community='snmp v2cで指定するコミュニティ名' -host='ホスト名' 'OID:ラベル名:カウンター値で計算するかどうか:積上げグラフで表示するかどうか'

指定したOIDの数だけメトリックの数は増えます。 最初の例は2個ほどOIDを指定しているので2つのメトリックを返しています。 逆に全くOIDを指定していない場合はメトリックは返されません。 またデフォルトのグラフ名はsnmpですが -name でグラフ名を指定することもできます。 詳しくはオプションをご覧下さい。

# mackerel-plugin-snmp -h
Usage of mackerel-plugin-snmp:
  -community string
        SNMP V2c Community (default "public")
  -host string
        Hostname (default "localhost")
  -name string
        Graph name (default "snmp")
  -tempfile string
        Temp file name
  -unit string
        Graph unit (default "float")

設定ファイルであるmackerel-agent.confは標準では /etc/mackerel-agent/mackerel-agent.conf にインストールされます。 以上を行った上でmackerel-agentを再起動してください。

見れるメトリック

SNMPは指定したOIDのメトリックを返すため、自分でOIDを指定する=任意の値をグラフにしてくれます。 ただしOIDとグラフで表示する時のラベル名は必須なのでカウンター値の設定や積上げグラフ表示の有無を省略した OID:ラベル名 の形で指定する必要があります。 これは他のツールと少し違うところなので注意しましょう。 ちなみにOIDは該当のホストで snmptranslate を使って対象を探しましょう。 やり方としては snmptranslate -Tp | less などで対象を探し、 snmptranslate -IR -On <OID名>で数値形式に変換します。

# snmptranslate -IR -On snmpTrapAddress
.1.3.6.1.6.3.18.1.3

SNMPトラップが使いたいんだけど?

結論から言いますが公式のプラグインでは使えません。 ただしSNMPマネージャー(snmptrapdデーモン)で受け取ってMackerelのAPIを叩くことは出来るのでそちらで代替することはできます。 例えばアラートを出す場合はcheck監視のAPIを叩くコマンドを用意するのが良いでしょう。

mackerel.io

そもそもネットワーク機器にmackerel-agent入れればトラップ不要じゃない?

そうなんですよ!! 公式サポートしてないけど。

qiita.com

qiita.com

papix.hatenablog.com

そのほかにもagentを使わずにAPIを直接叩く方法もあります。

qiita.com

自分でAPIを叩く場合は前回紹介したホストを追加する方法も併せてお試しください。

soudai.hatenablog.com

このようにGoのメリットは多くのプラットフォームで軽快に動くことです。 その点はルータも一緒でmackerel-agentのバイナリさえ置いて動かす事ができれば簡単に監視することができます。 agentが置ければプラグインも活用できるので拡張は自由自在!!SNMPトラップなんか気にしなくてもいいのです。 ってなわけでYA◯AHAさんとかCI◯COさんとかのルータも監視できます。

23日目は切っても切れないSNMPを使ったネットワーク機器の監視についてでした。 明日はWebサービスやPaaSの監視をするための切り札、エンドポイントの監視です。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!

24日目 mackerel-plugin-json