Initial commit
This commit is contained in:
69
metric/push.go
Normal file
69
metric/push.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package metric
|
||||
|
||||
import (
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/push"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
var defaultPusher *push.Pusher
|
||||
|
||||
const (
|
||||
defaultPushIntervalSecond = 5
|
||||
)
|
||||
|
||||
func InitDefaultPusher(gateway string, job string, labels prometheus.Labels, pushIntervalSecond ...int) {
|
||||
defaultPusher = InitPusher(gateway, job, labels)
|
||||
|
||||
// for default pusher , we should add process collector and go collector
|
||||
// then we can monitor all base monitor on our job
|
||||
defaultPusher.
|
||||
Collector(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{})).
|
||||
Collector(prometheus.NewGoCollector()).
|
||||
Add()
|
||||
|
||||
// TODO implement init
|
||||
// and push
|
||||
//defaultPusher = InitPusher("")
|
||||
go func() {
|
||||
var pushInterval = defaultPushIntervalSecond * time.Second
|
||||
if len(pushIntervalSecond) > 0 {
|
||||
pushInterval = time.Second * time.Duration(pushIntervalSecond[0])
|
||||
}
|
||||
for {
|
||||
defaultPusher.Push()
|
||||
time.Sleep(pushInterval)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// ExitTriggerLastPush
|
||||
// TODO
|
||||
func ExitTriggerLastPush() {
|
||||
|
||||
defaultPusher.Push()
|
||||
|
||||
}
|
||||
|
||||
//var MustLabel prometheus.Labels
|
||||
//
|
||||
//type RequireLabelConf struct {
|
||||
// Service string `json:"service";yaml:`
|
||||
// App string ``
|
||||
// Country string
|
||||
//}
|
||||
|
||||
// Init Pusher
|
||||
// return prometheus pusher
|
||||
// TODO add labels
|
||||
// need lan ,app,country, service labels to implement
|
||||
func InitPusher(gateway string, job string, labels prometheus.Labels) *push.Pusher {
|
||||
host, _ := os.Hostname()
|
||||
|
||||
p := push.New(gateway, job).Grouping("instance", host).Grouping("lang","go")
|
||||
for name, value := range labels {
|
||||
p.Grouping(name, value)
|
||||
}
|
||||
return p
|
||||
}
|
||||
Reference in New Issue
Block a user