Kratos 监控

2022-04-25 09:45 更新

监控

Metrics 中间件用于实现服务的性能指标监控,统计了请求耗时和请求计数。

配置

Metrics 中间件中提供了两个配置方法 ​WithSeconds()​ 和 ​WithRequests()​。

  • WithSeconds()

func WithSeconds(c metrics.Observer) Option {
    return func(o *options) {
        o.seconds = c
    }
}

用于设置 metrics 中间件统计请求耗时的 ​Observer ​直方图。

  • WithRequests()

func WithRequests(c metrics.Counter) Option {
    return func(o *options) {
        o.requests = c
    }
}

用于设置 metrics 中间件统计请求计数的 ​Counter ​计数器。

使用方式

使用 prometheus

// https://github.com/go-kratos/examples/tree/main/metrics
_metricSeconds = prometheus.NewHistogramVec(prometheus.HistogramOpts{
    Namespace: "server",
    Subsystem: "requests",
    Name:      "duration_ms",
    Help:      "server requests duration(ms).",
    Buckets:   []float64{5, 10, 25, 50, 100, 250, 500, 1000},
}, []string{"kind", "operation"})

_metricRequests = prometheus.NewCounterVec(prometheus.CounterOpts{
    Namespace: "client",
    Subsystem: "requests",
    Name:      "code_total",
    Help:      "The total number of processed requests",
}, []string{"kind", "operation", "code", "reason"})
    
prometheus.MustRegister(_metricSeconds, _metricRequests)

httpSrv.Handle("/metrics", promhttp.Handler())

Server 中使用 metrics

// grpc sever
grpcSrv := grpc.NewServer(
    grpc.Address(":9000"),
    grpc.Middleware(
        metrics.Server(
            metrics.WithSeconds(prom.NewHistogram(_metricSeconds)),
            metrics.WithRequests(prom.NewCounter(_metricRequests)),
        ),
    ),
)

// http server
httpSrv := http.NewServer(
    http.Address(":8000"),
    http.Middleware(
        metrics.Server(
            metrics.WithSeconds(prom.NewHistogram(_metricSeconds)),
            metrics.WithRequests(prom.NewCounter(_metricRequests)),
        ),
    ),
)

Client 中使用 metrics

// grpc client
conn, err := grpc.DialInsecure(
    context.Background(),
    grpc.WithEndpoint("127.0.0.1:9000"),
    grpc.WithMiddleware(
        metrics.Client(
            metrics.WithSeconds(prom.NewHistogram(_metricSeconds)),
            metrics.WithRequests(prom.NewCounter(_metricRequests)),
        ),
    ),
)

// http client
conn, err := http.NewClient(
    context.Background(),
    http.WithEndpoint("127.0.0.1:8000"),
    http.WithMiddleware(
        metrics.Client(
            metrics.WithSeconds(prom.NewHistogram(_metricSeconds)),
            metrics.WithRequests(prom.NewCounter(_metricRequests)),
        ),
    ),
)


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号