github.com/devdivbcp/moby@v17.12.0-ce-rc1.0.20200726071732-2d4bfdc789ad+incompatible/cmd/dockerd/metrics.go (about)

     1  package main
     2  
     3  import (
     4  	"net"
     5  	"net/http"
     6  
     7  	"github.com/docker/go-metrics"
     8  	"github.com/pkg/errors"
     9  	"github.com/sirupsen/logrus"
    10  )
    11  
    12  func (cli *DaemonCli) startMetricsServer(addr string) error {
    13  	if addr == "" {
    14  		return nil
    15  	}
    16  
    17  	if !cli.d.HasExperimental() {
    18  		return errors.New("metrics-addr is only supported when experimental is enabled")
    19  	}
    20  
    21  	if err := allocateDaemonPort(addr); err != nil {
    22  		return err
    23  	}
    24  	l, err := net.Listen("tcp", addr)
    25  	if err != nil {
    26  		return err
    27  	}
    28  	mux := http.NewServeMux()
    29  	mux.Handle("/metrics", metrics.Handler())
    30  	go func() {
    31  		if err := http.Serve(l, mux); err != nil {
    32  			logrus.Errorf("serve metrics api: %s", err)
    33  		}
    34  	}()
    35  	return nil
    36  }