在线上运行微服务得时候,我们需要为每一个微服务配置对应得监控,这样以便让我们可以很直观得在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微服务中进行监控埋点的案例,最后附上本案例的源码,登陆后即可下载。
还没有评论,来说两句吧...