Mackerelで自宅のインターネット状況を監視する(Ciscoルータ編)
※Ciscoルータ編しかありません.YamahaルータとかJuniperルータとかくれ.
目標
- 自宅のWANのパケロスとかをMackerelで確認できるようにする
- 自宅〜Google Public DNS(8.8.8.8)へのRTTをMackerelで確認できるようにする
背景
突然なんですけど、家のインターネットの統計がとりたくて、いい感じにパケロスとか遅延測るソリューションってないですか?raspberry piぐらいなら用意できそう
— mot (@pg_mot) 2020年6月30日
上記に対してあんまりいい回答ができなかったので悔しくなったから.
環境
お金がないのでありものを使う.
- Raspberry Pi 1 B+(Debian的なやつを入れている)
- Cisco C841M(1万で買えた.皆はFortiGateとか買ったほうが良いと思う)
作業
パケロス確認
Mackerelはプラグインを使うとSNMPとかの情報が取れる.
なので,取り合えすプラグインを入れる.
使ったのはmackerel-plugin-snmp
気をつけるポイントとして,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
これもクロスコンパイルして送ってあげる.
$ 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
コマンドをインストールする.
これもクロスコンパイルして送る.クロスコンパイル最高.こういう事ができる後輩がほしい.
$ 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とかをよく見る.
あと,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分くらいしてメトリクスが入っているのを確認する.
うまくいくとこんな感じになる.
終わり.
感想
- Mackerelは導入コストが低いので良い
- snmpとかはPrometheusのexporterの方が出来が良い
- 山に行きたい