bosun.org@v0.0.0-20250213104149-b8d3e981f37d/cmd/scollector/collectors/conntrack_linux.go (about)

     1  package collectors
     2  
     3  import (
     4  	"os"
     5  	"strconv"
     6  	"strings"
     7  
     8  	"bosun.org/metadata"
     9  	"bosun.org/opentsdb"
    10  )
    11  
    12  func init() {
    13  	collectors = append(collectors, &IntervalCollector{F: c_conntrack_linux, Enable: conntrackEnable})
    14  }
    15  
    16  const (
    17  	conntrackCount = "/proc/sys/net/netfilter/nf_conntrack_count"
    18  	conntrackMax   = "/proc/sys/net/netfilter/nf_conntrack_max"
    19  )
    20  
    21  func conntrackEnable() bool {
    22  	f, err := os.Open(conntrackCount)
    23  	defer f.Close()
    24  	return err == nil
    25  }
    26  
    27  func c_conntrack_linux() (opentsdb.MultiDataPoint, error) {
    28  	var md opentsdb.MultiDataPoint
    29  	var max, count float64
    30  	if err := readLine(conntrackCount, func(s string) error {
    31  		values := strings.Fields(s)
    32  		if len(values) > 0 {
    33  			var err error
    34  			count, err = strconv.ParseFloat(values[0], 64)
    35  			if err != nil {
    36  				return nil
    37  			}
    38  			Add(&md, "linux.net.conntrack.count", count, nil, metadata.Gauge, metadata.Count, "")
    39  		}
    40  		return nil
    41  	}); err != nil {
    42  		return nil, err
    43  	}
    44  	if err := readLine(conntrackMax, func(s string) error {
    45  		values := strings.Fields(s)
    46  		if len(values) > 0 {
    47  			var err error
    48  			max, err = strconv.ParseFloat(values[0], 64)
    49  			if err != nil {
    50  				return nil
    51  			}
    52  			Add(&md, "linux.net.conntrack.max", max, nil, metadata.Gauge, metadata.Count, "")
    53  		}
    54  		return nil
    55  	}); err != nil {
    56  		return nil, err
    57  	}
    58  	if max != 0 {
    59  		Add(&md, "linux.net.conntrack.percent_used", count/max*100, nil, metadata.Gauge, metadata.Pct, "")
    60  	}
    61  	return md, nil
    62  }