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 }