現時点ではリリースされていないのですが、masterに後方互換のない破壊的変更が入っていますので紹介します。
node_exporterでは、28個のコレクターが既定で有効になっています。
既定で有効になっているコレクターを無効にするには、「–no-collector.<name>」をflagに設定します。
例えば、arpとcpuを無効にするには、オプションに次のように指定します。
./node_exporter –no-collector.arp –no-collector.cpu
また、node_exporterは、既定では無効になっている16個のコレクターがあります。
それらを有効にするには、「–collector.<name>」をflagに設定します。
例えば、logindを有効にするには、オプションに次のように指定します。
./node_exporter –collector.logind
実装
コレクターの実装を見てみましょう。
コレクターをnode_exporterに登録するには、init時に「registerCollector」で登録します。
引数にコレクター名と、デフォルトで有効か無効かと、実装関数を渡します。
func init() {
registerCollector("bonding", defaultDisabled, NewBondingCollector)
}
collector.go では、配列に実装関数とコレクターフラグ名・有効無効とをそれぞれに格納します。
collectorState[collector] = flag
factories[collector] = factory
後は順次、ループで非同期でコレクターをexecuteしていきます。
// Collect implements the prometheus.Collector interface.
func (n nodeCollector) Collect(ch chan<- prometheus.Metric) {
wg := sync.WaitGroup{}
wg.Add(len(n.Collectors))
for name, c := range n.Collectors {
go func(name string, c Collector) {
execute(name, c, ch)
wg.Done()
}(name, c)
}
wg.Wait()
}