Documentation
¶
Overview ¶
Package metrics 提供 Genesis 的 OpenTelemetry 指标封装与 Prometheus 暴露能力。
这个组件当前采用“全局模式”工作:New 在创建 Meter 的同时,也会安装 OpenTelemetry 全局 MeterProvider。这样做的好处是仓库内依赖全局 provider 的埋点库可以立即生效;代价是重复调用 New 会覆盖之前安装的全局 provider。
因此推荐的使用方式是:应用启动时初始化一次 metrics,并在应用退出时调用 Shutdown 释放其持有的 HTTP 服务和 MeterProvider 资源。
Index ¶
- Constants
- func GRPCOutcome(code codes.Code) string
- func GRPCStatusClass(code codes.Code) string
- func GinHTTPMiddleware(httpMetrics *HTTPServerMetrics) gin.HandlerFunc
- func HTTPOutcome(status int) string
- func HTTPStatusClass(status int) string
- type Config
- type Counter
- type GRPCServerMetrics
- type GRPCServerMetricsConfig
- type Gauge
- type HTTPServerMetrics
- type HTTPServerMetricsConfig
- type Histogram
- type Label
- type Meter
- type MetricOption
Constants ¶
const ( // 常见的标签 LabelService = "service" LabelOperation = "operation" LabelMethod = "method" LabelRoute = "route" LabelStatusClass = "status_class" LabelOutcome = "outcome" LabelGRPCCode = "grpc_code" )
const ( // 常见的操作 OperationHTTPServer = "http.server" OperationGRPCServer = "grpc.server" )
const ( // 常见的结果 OutcomeSuccess = "success" OutcomeError = "error" )
const ( MetricGRPCServerRequestTotal = "grpc_server_requests_total" MetricGRPCServerDurationSeconds = "grpc_server_request_duration_seconds" )
const ( MetricHTTPServerRequestTotal = "http_server_requests_total" MetricHTTPServerDurationSeconds = "http_server_request_duration_seconds" )
const (
// 未知路由
UnknownRoute = "unknown"
)
Variables ¶
This section is empty.
Functions ¶
func GRPCStatusClass ¶
GRPCStatusClass 将 gRPC 状态代码转换为稳定的小写类标签
func GinHTTPMiddleware ¶
func GinHTTPMiddleware(httpMetrics *HTTPServerMetrics) gin.HandlerFunc
GinHTTPMiddleware 返回一个可重用的 Gin 中间件,用于记录 HTTP RED 指标
func HTTPStatusClass ¶
HTTPStatusClass 返回 HTTP 状态类标签值:1xx/2xx/3xx/4xx/5xx/unknown
Types ¶
type Config ¶
type Config struct {
ServiceName string `mapstructure:"service_name"`
Version string `mapstructure:"version"`
Port int `mapstructure:"port"`
Path string `mapstructure:"path"`
EnableRuntime bool `mapstructure:"enable_runtime"`
}
Config 定义全局 metrics 初始化参数。
当前实现采用 Prometheus exporter,并可选在同一进程内暴露 /metrics HTTP 端点。
func NewDevDefaultConfig ¶
NewDevDefaultConfig 开发环境默认配置
func NewProdDefaultConfig ¶
NewProdDefaultConfig 生产环境默认配置
type Counter ¶
type Counter interface {
Inc(ctx context.Context, labels ...Label)
Add(ctx context.Context, val float64, labels ...Label)
}
Counter 计数器接口,用于记录只能增加的累计值
type GRPCServerMetrics ¶
type GRPCServerMetrics struct {
// contains filtered or unexported fields
}
GRPCServerMetrics 封装可重用的 gRPC 服务器 RED 指标集
func NewGRPCServerMetrics ¶
func NewGRPCServerMetrics(m Meter, cfg *GRPCServerMetricsConfig) (*GRPCServerMetrics, error)
NewGRPCServerMetrics 创建可重用的 gRPC 服务器指标
func (*GRPCServerMetrics) Observe ¶
func (m *GRPCServerMetrics) Observe(ctx context.Context, fullMethod string, code codes.Code, duration time.Duration)
Observe 记录 gRPC RED 指标
func (*GRPCServerMetrics) StreamServerInterceptor ¶
func (m *GRPCServerMetrics) StreamServerInterceptor() grpc.StreamServerInterceptor
StreamServerInterceptor 返回一个可重用的 grpc.StreamServerInterceptor
func (*GRPCServerMetrics) UnaryServerInterceptor ¶
func (m *GRPCServerMetrics) UnaryServerInterceptor() grpc.UnaryServerInterceptor
UnaryServerInterceptor 返回一个可重用的 grpc.UnaryServerInterceptor
type GRPCServerMetricsConfig ¶
type GRPCServerMetricsConfig struct {
Service string
RequestTotalName string
RequestDurationName string
DurationBuckets []float64
StaticLabels []Label
}
GRPCServerMetricsConfig 配置可重用的 gRPC 服务器指标
func DefaultGRPCServerMetricsConfig ¶
func DefaultGRPCServerMetricsConfig(service string) *GRPCServerMetricsConfig
DefaultGRPCServerMetricsConfig 返回默认的 gRPC 服务器指标配置
type Gauge ¶
type Gauge interface {
Set(ctx context.Context, val float64, labels ...Label)
Inc(ctx context.Context, labels ...Label)
Dec(ctx context.Context, labels ...Label)
}
Gauge 仪表盘接口,用于记录可以任意增减的瞬时值
type HTTPServerMetrics ¶
type HTTPServerMetrics struct {
// contains filtered or unexported fields
}
HTTPServerMetrics 封装可重用的 HTTP 服务器 RED 指标集
func NewHTTPServerMetrics ¶
func NewHTTPServerMetrics(m Meter, cfg *HTTPServerMetricsConfig) (*HTTPServerMetrics, error)
NewHTTPServerMetrics 创建可重用的 HTTP 服务器指标
type HTTPServerMetricsConfig ¶
type HTTPServerMetricsConfig struct {
Service string
RequestTotalName string
RequestDurationName string
DurationBuckets []float64
StaticLabels []Label
}
HTTPServerMetricsConfig 配置可重用的 HTTP 服务器指标
func DefaultHTTPServerMetricsConfig ¶
func DefaultHTTPServerMetricsConfig(service string) *HTTPServerMetricsConfig
DefaultHTTPServerMetricsConfig 返回默认的 HTTP 服务器指标配置
type Meter ¶
type Meter interface {
Counter(name string, desc string, opts ...MetricOption) (Counter, error)
Gauge(name string, desc string, opts ...MetricOption) (Gauge, error)
Histogram(name string, desc string, opts ...MetricOption) (Histogram, error)
// Shutdown 释放 Meter 持有的资源。
//
// 当前实现会关闭内部 HTTP 服务并关闭底层 MeterProvider。
// 若当前全局 MeterProvider 仍指向该实例,Shutdown 还会将其重置为 no-op provider。
// 它不是幂等承诺接口,调用方应按“谁创建,谁关闭”原则调用一次。
Shutdown(ctx context.Context) error
}
Meter 指标创建工厂接口