package metrics import ( "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cast" ) const ( namespace = "custom_namespace" subsystem = "gin_api_mono" ) // metricsRequestsTotal metrics for request total 计数器(Counter) var metricsRequestsTotal = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: namespace, Subsystem: subsystem, Name: "requests_total", Help: "request(ms) total", }, []string{"method", "path"}, ) // metricsRequestsCost metrics for requests cost 累积直方图(Histogram) var metricsRequestsCost = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Namespace: namespace, Subsystem: subsystem, Name: "requests_cost", Help: "request(ms) cost milliseconds", }, []string{"method", "path", "success", "http_code", "business_code", "cost_milliseconds"}, ) // 根据需要,可定制其他指标,操作如下: // 1. 定义需要的指标 // 2. init() 中注册 // 3. RecordMetrics() 中传值 func init() { prometheus.MustRegister(metricsRequestsTotal, metricsRequestsCost) } // RecordMetrics 记录指标 func RecordMetrics(method, path string, success bool, httpCode, businessCode int, costSeconds float64) { metricsRequestsTotal.With(prometheus.Labels{ "method": method, "path": path, }).Inc() metricsRequestsCost.With(prometheus.Labels{ "method": method, "path": path, "success": cast.ToString(success), "http_code": cast.ToString(httpCode), "business_code": cast.ToString(businessCode), "cost_milliseconds": cast.ToString(costSeconds * 1000), }).Observe(costSeconds) }