現時点ではリリースされていないのですが、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() }