mirror of
https://github.com/ClusterCockpit/cc-metric-collector.git
synced 2024-12-25 23:19:06 +01:00
Add simpler collectors for load, mem_used and network
This commit is contained in:
parent
a6ac0c5373
commit
73fd59537e
36
collectors/loadavgMetric.go
Normal file
36
collectors/loadavgMetric.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package collectors
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const LOADAVGFILE = `/proc/loadavg`
|
||||||
|
|
||||||
|
type LoadavgCollector struct {
|
||||||
|
MetricCollector
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (m *LoadavgCollector) Init() {
|
||||||
|
m.name = "LoadavgCollector"
|
||||||
|
m.setup()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *LoadavgCollector) Read(interval time.Duration){
|
||||||
|
buffer, err := ioutil.ReadFile(string(LOADAVGFILE))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ls := strings.Split(string(buffer), ` `)
|
||||||
|
loadOne, _ := strconv.ParseFloat(ls[0], 64)
|
||||||
|
m.node["load_one"] = float64(loadOne)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *LoadavgCollector) Close() {
|
||||||
|
return
|
||||||
|
}
|
57
collectors/memstatMetric.go
Normal file
57
collectors/memstatMetric.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package collectors
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
//protocol "github.com/influxdata/line-protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
const MEMSTATFILE = `/proc/meminfo`
|
||||||
|
|
||||||
|
type MemstatCollector struct {
|
||||||
|
MetricCollector
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (m *MemstatCollector) Init() {
|
||||||
|
m.name = "MemstatCollector"
|
||||||
|
m.setup()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MemstatCollector) Read(interval time.Duration){
|
||||||
|
buffer, err := ioutil.ReadFile(string(MEMSTATFILE))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ll := strings.Split(string(buffer), "\n")
|
||||||
|
memstats := make(map[string]int64)
|
||||||
|
|
||||||
|
for _, line := range ll {
|
||||||
|
ls := strings.Split(line, `:`)
|
||||||
|
if len(ls) > 1 {
|
||||||
|
lv := strings.Fields(ls[1])
|
||||||
|
memstats[ls[0]], err = strconv.ParseInt(lv[0], 0, 64)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, exists := memstats[`MemTotal`]; !exists {
|
||||||
|
err = errors.New("Parse error")
|
||||||
|
log.Print(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
memUsed := memstats[`MemTotal`] - (memstats[`MemFree`] + memstats[`Buffers`] + memstats[`Cached`])
|
||||||
|
m.node["mem_used"] = float64(memUsed) * 1.0e-3
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MemstatCollector) Close() {
|
||||||
|
return
|
||||||
|
}
|
59
collectors/netstatMetric.go
Normal file
59
collectors/netstatMetric.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package collectors
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
const NETSTATFILE = `/proc/net/dev`
|
||||||
|
|
||||||
|
type NetstatCollector struct {
|
||||||
|
MetricCollector
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (m *NetstatCollector) Init() {
|
||||||
|
m.name = "NetstatCollector"
|
||||||
|
m.setup()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *NetstatCollector) Read(interval time.Duration){
|
||||||
|
data, err := ioutil.ReadFile(string(NETSTATFILE))
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var matches = map[int]string{
|
||||||
|
1: "bytes_in",
|
||||||
|
9: "bytes_out",
|
||||||
|
2: "pkts_in",
|
||||||
|
10: "pkts_out",
|
||||||
|
}
|
||||||
|
|
||||||
|
lines := strings.Split(string(data), "\n")
|
||||||
|
for _, l := range lines {
|
||||||
|
if !strings.Contains(l, ":") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
f := strings.Fields(l)
|
||||||
|
dev := f[0][0 : len(f[0])-1]
|
||||||
|
if dev == "lo" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for i, name := range matches {
|
||||||
|
v, err := strconv.ParseInt(f[i], 10, 0)
|
||||||
|
if err == nil {
|
||||||
|
|
||||||
|
m.node[name] = float64(v) * 1.0e-3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *NetstatCollector) Close() {
|
||||||
|
return
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user