github.com/go-graphite/carbonapi@v0.17.0/cmd/carbonapi/graphite_metrics.go (about) 1 package main 2 3 import ( 4 "os" 5 "strings" 6 "time" 7 8 "github.com/go-graphite/carbonapi/cmd/carbonapi/config" 9 "github.com/go-graphite/carbonapi/cmd/carbonapi/http" 10 11 "github.com/cactus/go-statsd-client/v5/statsd" 12 "github.com/msaf1980/go-metrics" 13 "github.com/msaf1980/go-metrics/graphite" 14 "go.uber.org/zap" 15 ) 16 17 var ( 18 g *graphite.Graphite 19 ) 20 21 func setupGraphiteMetrics(logger *zap.Logger) { 22 var host string 23 if envhost := os.Getenv("GRAPHITEHOST") + ":" + os.Getenv("GRAPHITEPORT"); envhost != ":" || config.Config.Graphite.Host != "" { 24 switch { 25 case envhost != ":" && config.Config.Graphite.Host != "": 26 host = config.Config.Graphite.Host 27 case envhost != ":": 28 host = envhost 29 case config.Config.Graphite.Host != "": 30 host = config.Config.Graphite.Host 31 } 32 } 33 34 logger.Info("starting carbonapi", 35 zap.String("build_version", BuildVersion), 36 zap.Any("config", config.Config), 37 ) 38 39 if host != "" { 40 hostname, _ := os.Hostname() 41 hostname = strings.ReplaceAll(hostname, ".", "_") 42 43 prefix := config.Config.Graphite.Prefix 44 45 pattern := config.Config.Graphite.Pattern 46 pattern = strings.ReplaceAll(pattern, "{prefix}", prefix) 47 pattern = strings.ReplaceAll(pattern, "{fqdn}", hostname) 48 49 // register our metrics with graphite 50 g = graphite.New(config.Config.Graphite.Interval, pattern, host, 10*time.Second) 51 52 // StatsD client 53 if config.Config.Graphite.Statsd != "" && config.Config.Upstreams.ExtendedStat { 54 var err error 55 config := &statsd.ClientConfig{ 56 Address: config.Config.Graphite.Statsd, 57 Prefix: pattern, 58 ResInterval: 5 * time.Minute, 59 UseBuffered: true, 60 FlushInterval: 300 * time.Millisecond, 61 } 62 http.Gstatsd, err = statsd.NewClientWithConfig(config) 63 if err != nil { 64 logger.Error("statsd init", zap.Error(err)) 65 } 66 } 67 68 if http.Gstatsd == nil { 69 http.Gstatsd = http.NullSender{} 70 } 71 72 metrics.Register("request_cache_hits", http.ApiMetrics.RequestCacheHits) 73 metrics.Register("request_cache_misses", http.ApiMetrics.RequestCacheMisses) 74 metrics.Register("request_cache_overhead_ns", http.ApiMetrics.RequestsCacheOverheadNS) 75 metrics.Register("backend_cache_hits", http.ApiMetrics.BackendCacheHits) 76 metrics.Register("backend_cache_misses", http.ApiMetrics.BackendCacheMisses) 77 78 if config.Config.Upstreams.ExtendedStat { 79 metrics.Register("requests_status_code.200", http.ApiMetrics.Requests200) 80 metrics.Register("requests_status_code.400", http.ApiMetrics.Requests400) 81 metrics.Register("requests_status_code.403", http.ApiMetrics.Requests403) 82 metrics.Register("requests_status_code.4xx", http.ApiMetrics.Requestsxxx) 83 metrics.Register("requests_status_code.500", http.ApiMetrics.Requests500) 84 metrics.Register("requests_status_code.503", http.ApiMetrics.Requests503) 85 metrics.Register("requests_status_code.5xx", http.ApiMetrics.Requests5xx) 86 } 87 88 // requests histogram 89 metrics.Register("requests", http.ApiMetrics.RequestsH) 90 91 metrics.Register("find_requests", http.ApiMetrics.FindRequests) 92 metrics.Register("render_requests", http.ApiMetrics.RenderRequests) 93 94 if http.ApiMetrics.MemcacheTimeouts != nil { 95 metrics.Register("memcache_timeouts", http.ApiMetrics.MemcacheTimeouts) 96 } 97 98 if http.ApiMetrics.CacheSize != nil { 99 metrics.Register("cache_size", http.ApiMetrics.CacheSize) 100 metrics.Register("cache_items", http.ApiMetrics.CacheItems) 101 } 102 103 metrics.Register("zipper.find_requests", http.ZipperMetrics.FindRequests) 104 metrics.Register("zipper.find_errors", http.ZipperMetrics.FindErrors) 105 106 metrics.Register("zipper.render_requests", http.ZipperMetrics.RenderRequests) 107 metrics.Register("zipper.render_errors", http.ZipperMetrics.RenderErrors) 108 109 metrics.Register("zipper.info_requests", http.ZipperMetrics.InfoRequests) 110 metrics.Register("zipper.info_errors", http.ZipperMetrics.InfoErrors) 111 112 metrics.Register("zipper.timeouts", http.ZipperMetrics.Timeouts) 113 114 metrics.Register("zipper.cache_hits", http.ZipperMetrics.CacheHits) 115 metrics.Register("zipper.cache_misses", http.ZipperMetrics.CacheMisses) 116 117 metrics.RegisterRuntimeMemStats(nil) 118 go metrics.CaptureRuntimeMemStats(config.Config.Graphite.Interval) 119 120 g.Start(nil) 121 } 122 }