//OutputMetricsIfRequired will send metrics to Graphite if a non-empty graphiteTCPAddress is passed in, or to the standard log if logMetrics is true. // Make sure a sensible graphitePrefix that will uniquely identify your service is passed in, e.g. "content.test.people.rw.neo4j.ftaps58938-law1a-eu-t func OutputMetricsIfRequired(graphiteTCPAddress string, graphitePrefix string, logMetrics bool) { if graphiteTCPAddress != "" { addr, _ := net.ResolveTCPAddr("tcp", graphiteTCPAddress) go graphite.Graphite(metrics.DefaultRegistry, 5*time.Second, graphitePrefix, addr) } if logMetrics { //useful locally //messy use of the 'standard' log package here as this method takes the log struct, not an interface, so can't use logrus.Logger go metrics.Log(metrics.DefaultRegistry, 60*time.Second, standardLog.New(os.Stdout, "metrics", standardLog.Lmicroseconds)) } }
// gmGraphiteRegistry returns a go-metrics registry that reports to a Graphite server. func gmGraphiteRegistry(prefix, addr string, interval time.Duration) (Registry, error) { if addr == "" { return nil, errors.New(" graphite addr missing") } a, err := net.ResolveTCPAddr("tcp", addr) if err != nil { return nil, fmt.Errorf(" cannot connect to Graphite: %s", err) } r := gm.NewRegistry() go graphite.Graphite(r, interval, prefix, a) return &gmRegistry{r}, nil }