metrics.go 877 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package main
  2. import (
  3. "net"
  4. "net/http"
  5. "strings"
  6. "time"
  7. metrics "github.com/docker/go-metrics"
  8. "github.com/sirupsen/logrus"
  9. )
  10. func startMetricsServer(addr string) error {
  11. if addr == "" {
  12. return nil
  13. }
  14. if err := allocateDaemonPort(addr); err != nil {
  15. return err
  16. }
  17. l, err := net.Listen("tcp", addr)
  18. if err != nil {
  19. return err
  20. }
  21. mux := http.NewServeMux()
  22. mux.Handle("/metrics", metrics.Handler())
  23. go func() {
  24. logrus.Infof("metrics API listening on %s", l.Addr())
  25. srv := &http.Server{
  26. Handler: mux,
  27. ReadHeaderTimeout: 5 * time.Minute, // "G112: Potential Slowloris Attack (gosec)"; not a real concern for our use, so setting a long timeout.
  28. }
  29. if err := srv.Serve(l); err != nil && !strings.Contains(err.Error(), "use of closed network connection") {
  30. logrus.WithError(err).Error("error serving metrics API")
  31. }
  32. }()
  33. return nil
  34. }