60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
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)
|
||
}
|