この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の23日目です。
それでは23日目は mackerel-plugin-snmp
です。
mackerel-plugin-snmpはSNMP (Simple Network Management Protocol)をつかってデータを取得し、それを可視化するSNMP専用のプラグインです。
インストールと設定手順
mackerel-plugin-snmpのプラグインは先程も説明したとおりSNMPを利用します。 そのため、対象にはSNMPが利用できる設定がされていることが条件になります。 ですがSNMPを使いたい=ある程度ご理解がある前提なので割愛します。 そもそもSNMPについては良い資料が沢山あります。 例えば下記のサイトがとてもわかりやすいのでオススメです。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
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-agent入れればトラップ不要じゃない?
そうなんですよ!! 公式サポートしてないけど。
そのほかにもagentを使わずにAPIを直接叩く方法もあります。
自分でAPIを叩く場合は前回紹介したホストを追加する方法も併せてお試しください。
このようにGoのメリットは多くのプラットフォームで軽快に動くことです。 その点はルータも一緒でmackerel-agentのバイナリさえ置いて動かす事ができれば簡単に監視することができます。 agentが置ければプラグインも活用できるので拡張は自由自在!!SNMPトラップなんか気にしなくてもいいのです。 ってなわけでYA◯AHAさんとかCI◯COさんとかのルータも監視できます。
23日目は切っても切れないSNMPを使ったネットワーク機器の監視についてでした。 明日はWebサービスやPaaSの監視をするための切り札、エンドポイントの監視です。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!