-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
91 lines (78 loc) · 1.86 KB
/
main.go
File metadata and controls
91 lines (78 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package main
import (
"go-sysmon/gatherer"
"log"
"os"
"strconv"
)
// /proc/meminfo
// /proc/interrupts
// /proc/vmstat
// /proc/uptime
// /proc/loadavg
func run(influx Influx, gatherers []gatherer.Gatherer, interval int64, tag string) {
for currentTime := range IntervalIterator(interval * 1000 * 1000) {
total := 0
// log.Println(currentTime)
for _, g := range gatherers {
points, err := g.Read()
if err != nil {
log.Println(err)
return
}
for _, point := range points {
influx.Add(g.GetName(), tag, point.Name, point.Value, currentTime)
}
total += len(points)
// log.Println(points)
}
err := influx.Post()
influx.Clear()
if err != nil {
log.Println(err)
return
}
log.Printf("posted %v points", total)
}
}
func main() {
memInfo := gatherer.MemInfo{}
uptime := gatherer.Uptime{}
vmstat := gatherer.VmStat{}
loadavg := gatherer.LoadAvg{}
gatherers := []gatherer.Gatherer{&memInfo, &uptime, &vmstat, &loadavg}
tag := os.Getenv("SYSMON_INFLUX_TAG")
if tag == "" {
log.Println("please provide env SYSMON_INFLUX_TAG")
os.Exit(1)
return
}
influxHost := os.Getenv("SYSMON_INFLUX_HOST")
if influxHost == "" {
log.Println("please provide env SYSMON_INFLUX_HOST")
os.Exit(1)
return
}
intervalMs := int64(5000)
intervalStr := os.Getenv("SYSMON_INTERVAL_MS")
if intervalStr != "" {
value, err := strconv.ParseInt(intervalStr, 10, 64)
if err != nil {
log.Printf("failed to parse interval: %v", err)
os.Exit(1)
return
}
intervalMs = value
}
influx := Influx{
Host: influxHost,
Port: 8086,
Db: "go-sysmon",
}
influxDb := os.Getenv("SYSMON_INFLUX_DB")
if influxDb != "" {
influx.Db = influxDb
}
log.Printf("gathering system metrics all %vms and writing them to db \"%v\" on host \"%v\" with tag \"%v\"\n", intervalMs, influx.Db, influx.Host, tag)
run(influx, gatherers, intervalMs, tag)
}