mirror of
				https://github.com/prometheus/node_exporter.git
				synced 2025-08-20 18:33:52 -07:00 
			
		
		
		
	The new `lnstat` collector produces a high number of metrics, per-cpu, and results in approximately double the number of metrics previously scraped. For example, a typical server with 64 cores produces 3832 lnstat metrics compared to 4147 metrics for the remaining collectors. Therefore disable the `lnstat` collector by default. Signed-off-by: Benjamin Drung <benjamin.drung@ionos.com>
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2015 The Prometheus Authors
 | |
| // Licensed under the Apache License, Version 2.0 (the "License");
 | |
| // you may not use this file except in compliance with the License.
 | |
| // You may obtain a copy of the License at
 | |
| //
 | |
| // http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing, software
 | |
| // distributed under the License is distributed on an "AS IS" BASIS,
 | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| // See the License for the specific language governing permissions and
 | |
| // limitations under the License.
 | |
| 
 | |
| //go:build !nolnstat
 | |
| // +build !nolnstat
 | |
| 
 | |
| package collector
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strconv"
 | |
| 
 | |
| 	"github.com/go-kit/log"
 | |
| 	"github.com/prometheus/client_golang/prometheus"
 | |
| 	"github.com/prometheus/procfs"
 | |
| )
 | |
| 
 | |
| type lnstatCollector struct {
 | |
| 	logger log.Logger
 | |
| }
 | |
| 
 | |
| func init() {
 | |
| 	registerCollector("lnstat", defaultDisabled, NewLnstatCollector)
 | |
| }
 | |
| 
 | |
| func NewLnstatCollector(logger log.Logger) (Collector, error) {
 | |
| 	return &lnstatCollector{logger}, nil
 | |
| }
 | |
| 
 | |
| func (c *lnstatCollector) Update(ch chan<- prometheus.Metric) error {
 | |
| 	const (
 | |
| 		subsystem = "lnstat"
 | |
| 	)
 | |
| 
 | |
| 	fs, err := procfs.NewFS(*procPath)
 | |
| 	if err != nil {
 | |
| 		return fmt.Errorf("failed to open procfs: %w", err)
 | |
| 	}
 | |
| 
 | |
| 	netStats, err := fs.NetStat()
 | |
| 	if err != nil {
 | |
| 		return fmt.Errorf("Lnstat error: %s", err)
 | |
| 	}
 | |
| 
 | |
| 	for _, netStatFile := range netStats {
 | |
| 		labelNames := []string{"subsystem", "cpu"}
 | |
| 		for header, stats := range netStatFile.Stats {
 | |
| 			for cpu, value := range stats {
 | |
| 				labelValues := []string{netStatFile.Filename, strconv.Itoa(cpu)}
 | |
| 				ch <- prometheus.MustNewConstMetric(
 | |
| 					prometheus.NewDesc(
 | |
| 						prometheus.BuildFQName(namespace, subsystem, header+"_total"),
 | |
| 						"linux network cache stats",
 | |
| 						labelNames, nil,
 | |
| 					),
 | |
| 					prometheus.CounterValue, float64(value), labelValues...,
 | |
| 				)
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |