EdgeRouter X を Prometheus の node_exporter でメトリクス収集をしてみる
世の中にzabbixとMackerelは実際の知見があったけど、Prometheusを利用してEdgeRouterのメトリクス収集の知見は多く無さそうだったし、今後Prometheusを活用できないのは困るので、練習として。
ただし、EdgeRouter(≒VyOS≒Vyatta) にサービスを追加するのをきちんと取り組もうとする (=vyosのインターフェースで色々と設定できるようにしてあげる) と死ぬほど大変そうなので、一旦はnode_exporterが問題無さそうに動くまで。
自分の記事で扱う範囲は、EdgeRouterにnode_exporterを設置するところまでなので、Prometheusサーバーの構築等は他の記事を参考にしてください。
方針
- EdgeRouterをMackerelで監視する方法が世の中に知見として転がっているので、それを真似する。
- Mackerel-agent も node_exporter も golang で書かれていて、知見の転用がし易いから
- EdgeRouter上で追加のサービスをきちんと動かすための知見が少ないのでそこもお手軽にやる。
- メトリクスに関しては後日整備する
やったこと
Prometheusの入門を眺める
node_exporterをコンパイルする。
自分はmacの上でコンパイルして、EdgeRouterに持っていった。
go get github.com/prometheus/node_exporter cd ${path}/${to}/node_exporter env GOOS=linux env GOARCH=mipsle go build node_exporter.go
EdgeRouterのCPUは普段使うPCとアーキテクチャが違うけど、こういうときにgolangのクロスコンパイルの便利さが効いてくるなぁと思った。
EdgeRouterにコンパイル後のバイナリを置く
後述するinitスクリプトの兼ね合いで /opt/promehteus/node_exporter
にした。
node_exporeter用のinit scriptを設置する
EdgeRouterはinit.d でサービスを取り扱っているので、以下のスクリプトをパクらせてもらって /etc/init.d/node_exporter
とした。
Init.d script for prometheus node exporter · GitHub
自分でいじったのは、USERを prometheus
から root
にしたくらい。
実際の起動
sudo /etc/init.d/node_exporter start
Rebootしても大丈夫にする
EdgeRouterのOSの元になっているDebianとかでは chkconfig
はなく、 update-rc.d
などを使うことになっているが、 EdgeRouter内には無い雰囲気。
ので、今回はお手軽に /etc/rc.local
に /etc/init.d/node_exporter start
を追記しておくことにする。
確実にもっといい方法があるのだけど、EdgeRouterのお作法がよくわからなかったので一旦はこれで。
実際の雰囲気
自分のルーターは 172.0.0.1
で動いているので以下のようになった。途切れているのはrebootした所で、監視のダウンタイムは大体3分くらい。