mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 10:19:50 +00:00
Ensure container metrics are registered with prometheus even without
cadvisor http server Fixes #13200
This commit is contained in:
parent
b87077c270
commit
3a6701c85f
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user