node_exporterでルーティングテーブルを監視する

先日リリースされたnode_exporter 1.1.0network_routeコレクタが追加され、Linux 上のルーティングテーブルを監視することが出来るようになりました。

この PR は私が昨年出したもので、指摘を頂きながらマージしてもらったものです。

動作の概要

PR 説明文からの引用ですが、 network_route コレクタを有効にすると以下のようなメトリクスを出力します。 こちらの内容を Prometheus が収集・Grafana 等で可視化するという形です。

# HELP node_network_route network routing table
# TYPE node_network_route gauge
node_network_route{dest="10.0.0.0/24",gw="100.0.0.1",if="eth1",priority="20",proto="zebra",src="",weight="1"} 1
node_network_route{dest="10.0.0.0/24",gw="100.0.0.2",if="eth1",priority="20",proto="zebra",src="",weight="1"} 1
node_network_route{dest="100.0.0.0/24",gw="",if="eth1",priority="0",proto="kernel",src="100.0.0.3",weight=""} 1
node_network_route{dest="192.168.10.0/24",gw="",if="eth0",priority="0",proto="kernel",src="192.168.10.2",weight=""} 1
node_network_route{dest="default",gw="192.168.10.1",if="eth0",priority="0",proto="static",src="",weight=""} 1
# HELP node_network_routes_total network routing table
# TYPE node_network_routes_total gauge
node_network_routes_total{if="eth0"} 2
node_network_routes_total{if="eth1"} 3

背景

Linux マシンに zebra,ospfd,bgpd 等の経路交換を行うソフトウェアを利用しており、これらが実際に設定した経路を監視したいと言ったことが実装のモチベーションです。 最初は社内の GitHub Enterprise にのみ route_exporter という名前の別ソフトウェアとして公開していましたが、他の人にも需要が有るだろうということで node_exporter へ PR を提出しました。

kubernetes 環境を自分で構築する場合、Calico で BGP ネットワークの構築などを行うケースも多いと思われます。また、ノードの台数を動的に変更するケースも少なくないと思いますので、このコレクタの適用範囲はある程度広いと考えています。

導入方法

network_route コレクタはデフォルトで有効になっていないので、起動引数に --collector.network_route を与えることで有効化されます。