Ensure container metrics are registered with prometheus even without

cadvisor http server

Fixes #13200
This commit is contained in:
Jimmi Dyson 2015-08-26 13:22:25 +01:00
parent b87077c270
commit 3a6701c85f

View File

@ -64,12 +64,9 @@ func New(port uint) (Interface, error) {
Manager: m, Manager: m,
} }
// Export the HTTP endpoint if a port was specified. err = cadvisorClient.exportHTTP(port)
if port > 0 { if err != nil {
err = cadvisorClient.exportHTTP(port) return nil, err
if err != nil {
return nil, err
}
} }
return cadvisorClient, nil return cadvisorClient, nil
} }
@ -79,30 +76,35 @@ func (cc *cadvisorClient) Start() error {
} }
func (cc *cadvisorClient) exportHTTP(port uint) error { func (cc *cadvisorClient) exportHTTP(port uint) error {
// Register the handlers regardless as this registers the prometheus
// collector properly.
mux := http.NewServeMux() mux := http.NewServeMux()
err := cadvisorHttp.RegisterHandlers(mux, cc, "", "", "", "", "/metrics") err := cadvisorHttp.RegisterHandlers(mux, cc, "", "", "", "", "/metrics")
if err != nil { if err != nil {
return err return err
} }
serv := &http.Server{ // Only start the http server if port > 0
Addr: fmt.Sprintf(":%d", port), if port > 0 {
Handler: mux, serv := &http.Server{
} Addr: fmt.Sprintf(":%d", port),
Handler: mux,
// TODO(vmarmol): Remove this when the cAdvisor port is once again free.
// If export failed, retry in the background until we are able to bind.
// This allows an existing cAdvisor to be killed before this one registers.
go func() {
defer util.HandleCrash()
err := serv.ListenAndServe()
for err != nil {
glog.Infof("Failed to register cAdvisor on port %d, retrying. Error: %v", port, err)
time.Sleep(time.Minute)
err = serv.ListenAndServe()
} }
}()
// TODO(vmarmol): Remove this when the cAdvisor port is once again free.
// If export failed, retry in the background until we are able to bind.
// This allows an existing cAdvisor to be killed before this one registers.
go func() {
defer util.HandleCrash()
err := serv.ListenAndServe()
for err != nil {
glog.Infof("Failed to register cAdvisor on port %d, retrying. Error: %v", port, err)
time.Sleep(time.Minute)
err = serv.ListenAndServe()
}
}()
}
return nil return nil
} }