在线上运行微服务得时候,我们需要为每一个微服务配置对应得监控,这样以便让我们可以很直观得在dashboard上看到服务得整体运行情况。本文我们介绍下在kratos中开启metrics埋点。下面演示下:
一、安装依赖
这里需要先安装相关得依赖,在kratos微服务中编写监控埋点需要得依赖有:
go get github.com/go-kratos/kratos/v2/middleware/metrics go get go.opentelemetry.io/otel/exporters/prometheus go get go.opentelemetry.io/otel/metric go get go.opentelemetry.io/otel/sdk/metric go get github.com/prometheus/client_golang/prometheus/promhttp
二、编写监控埋点
这里我们在internal/conf文件夹下创建一个metrix文件夹,然后添加一个metrix.go文件,这里主要是初始化监控相关得信息。它需要在项目启动得时候运行,所以我们把他归为config,写在conf目录下。这里的metrix.go文件的内容如下:
package metrix
import (
"github.com/go-kratos/kratos/v2/middleware/metrics"
"go.opentelemetry.io/otel/exporters/prometheus"
"go.opentelemetry.io/otel/metric"
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
)
/*
*
声明变量,在后续注册中间件的时候需要这些变量
*/
var (
MetricRequests metric.Int64Counter
MetricSeconds metric.Float64Histogram
)
/*
*
初始化方法
*/
func Init() {
exporter, err := prometheus.New()
if err != nil {
panic(err)
}
provider := sdkmetric.NewMeterProvider(sdkmetric.WithReader(exporter))
meter := provider.Meter("metrics")
//统计请求耗时
MetricRequests, err = metrics.DefaultRequestsCounter(meter, metrics.DefaultServerRequestsCounterName)
if err != nil {
panic(err)
}
//统计请求计数
MetricSeconds, err = metrics.DefaultSecondsHistogram(meter, metrics.DefaultServerSecondsHistogramName)
if err != nil {
panic(err)
}
}编写完成之后,我们需要注册metric中间件,需要修改的文件是internal/server/http.go和internal/server/grpc.go文件。
http.go文件示例如下:
http.Middleware( metrics.Server( metrics.WithSeconds(metrix.MetricSeconds), metrics.WithRequests(metrix.MetricRequests)), ),
grpc.go文件示例如下:
metrics.Server( metrics.WithSeconds(metrix.MetricSeconds), metrics.WithRequests(metrix.MetricRequests)),
最后还需要在internal/server/http.go文件的NewHTTPServer方法里面注册下metrics的endpoint:
srv.Handle("/metrics", promhttp.Handler())以上我们就完成了在kratos微服务中集成监控埋点metrics。
三、运行测试
把项目启动起来,我们可以直接访问/metrics端点,如下图:
这里就可以看到各种监控指标了。
以上就是在kratos微服务中进行监控埋点的案例,最后附上本案例的源码,登陆后即可下载。













还没有评论,来说两句吧...