Corona@はてな

人生,黒歴史

Mackerelで自宅のインターネット状況を監視する(Ciscoルータ編)

Ciscoルータ編しかありません.YamahaルータとかJuniperルータとかくれ.

目標

  • 自宅のWANのパケロスとかをMackerelで確認できるようにする
  • 自宅〜Google Public DNS(8.8.8.8)へのRTTをMackerelで確認できるようにする

背景

上記に対してあんまりいい回答ができなかったので悔しくなったから.

環境

お金がないのでありものを使う.

  • Raspberry Pi 1 B+(Debian的なやつを入れている)
  • Cisco C841M(1万で買えた.皆はFortiGateとか買ったほうが良いと思う)

作業

パケロス確認

Mackerelはプラグインを使うとSNMPとかの情報が取れる.

なので,取り合えすプラグインを入れる.

使ったのはmackerel-plugin-snmp

github.com

気をつけるポイントとして,Raspberry Piの場合,aptでシャッと導入ができないのでソースからうまいことしないとだめな一方, マシンパワーが低いのでコンパイルにめっちゃ時間がかかる.

なので,適当な環境でGoバイナリをクロスコンパイルして入れてあげるほうが良い.

  • 適当なPC(Mac)
$ git clone https://github.com/mackerelio/mackerel-agent-plugins.git
$ cd mackerel-agent-plugins/mackerel-plugin-snmp
$ env GOOS=linux GOARCH=arm GOARM=6 go build
$ scp ./mackerel-plugin-snmp pi@[raspberrypiのIP]:/home/pi/

RTT確認

これもプラグインを使う.

使ったのはmackerel-plugin-pinging

github.com

これもクロスコンパイルして送ってあげる.

$ git clone https://github.com/kazeburo/mackerel-plugin-pinging.git
$ cd mackerel-plugin-pinging
$ env GOOS=linux GOARCH=arm GOARM=6 go build
$ scp ./mackerel-plugin-pinging pi@[raspberrypiのIP]:/home/pi/

これでPlugin導入は完了.

mkrのインストール

次にMackerelへの設定をする.

調べるとagentが無いホストについてはmkrコマンドでホスト登録をするらしい.

なので,mkrコマンドをインストールする.

github.com

これもクロスコンパイルして送る.クロスコンパイル最高.こういう事ができる後輩がほしい.

$ git clone https://github.com/mackerelio/mkr.git
$ cd mkr
$ env GOOS=linux GOARCH=arm GOARM=6 go build
$ scp ./mkr pi@[raspberrypiのIP]:/home/pi/

バイナリが送れたら,Raspberry Pi側にSSHする.

今更だけどRaspberry PiからSNMPコマンドやPingコマンドを発行して,それをMackerelにメトリクスとして送る感じです.

あと,Raspberry Piにはmackerel-agentは導入済みです.あしからず.

バイナリファイルの移動

バイナリファイルを雑に送っていたので移動させる.

ここからRaspberry Pi側での操作です.

$ sudo mv ~/mackerel-plugin-snmp /usr/local/bin
$ sudo mv ~/mackerel-plugin-pinging /usr/local/bin
$ sudo mv ~/mkr /usr/local/bin

ホストの登録

今回のメトリクスを登録するようのホストを登録する.

これは,別に違うマシンからしてもいいと思う.

$ mkr create --customIdentifier home-router home-router

mackerel-agentの設定

続いてmakerel-agentの設定を変更する.

設定ファイルは/etc/mackerel-agentにある.

プラグインとかの設定を適当にする.

$ cd /etc/mackerel-agent
$ sudo nano mackerel-agent.conf
  • mackerel-agent.conf
apikey = "APIキー"

[plugin.metrics.internet-rtt]
command = "/usr/local/bin/mackerel-plugin-pinging --key-prefix='googledns' --host='8.8.8.8'"
custom_identifier = "home-router"

[plugin.metrics.snmp-router-interfaces]
command = "/usr/local/bin/mackerel-plugin-snmp -name='interfaces.wan' -host='<ルータのIPアドレス>' -community='<community名>' '1.3.6.1.2.1.31.1.1.1.6.1:ifHCInOctets:1:0' '1.3.6.1.2.1.31.1.1.1.10.1:ifHCOutOctets:1:0' '1.3.6.1.2.1.2.2.1.14.1:ifInErrors:1:0' '1.3.6.1.2.1.2.2.1.20.1:ifOutErrors:1:0' '1.3.6.1.2.1.2.2.1.13.1:ifInDiscards:1:0' '1.3.6.1.2.1.2.2.1.19.1:ifOutDiscards:1:0'"
custom_identifier = "home-router"

OIDは適当に調べる.面倒くさがりなので標準MIBとかは下記Qiitaとかをよく見る.

qiita.com

あと,mackerel-plugin-snmpではCounterの値は問題なく取れるけど,それ以外,例えばGaugeの値がうまく取れなかったりした.

SNMP get failed: Unable to decode packet: Unable to decode value: No such instance

面倒くさがりなので深くは追ってない.snmpwalkだとうまく取れているので,多分gosnmpでなんかなってるんだと思う.

mackerel-agent再起動

設定反映のためにmackerel-agentを再起動する.

reload的なコマンドもあるかもしれないが,自宅なのでこれで良い.

$ sudo systemctl restart mackerel-agent

確認

Mackerelのサイトにアクセスして,ホストが追加されていることと,5分くらいしてメトリクスが入っているのを確認する.

うまくいくとこんな感じになる.

f:id:Mekapiku:20200702203214p:plain
Mackerel画面

終わり.

感想

  • Mackerelは導入コストが低いので良い
  • snmpとかはPrometheusのexporterの方が出来が良い
  • 山に行きたい