metrics.go 679 B

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