Skip to main content

监控

健康检查

go-zero 启动的服务(RPC Server 或 HTTP Server)默认集成健康检查,健康检查默认端口为6060,默认 Path 为/healthz,服务启动后访问健康检查地址会返回OK

curl -i http://127.0.0.1:6060/healthz
HTTP/1.1 200 OK
Date: Thu, 09 Mar 2023 02:34:17 GMT
Content-Length: 2
Content-Type: text/plain; charset=utf-8

OK

启用健康检查配置如下:

srv := rest.MustNewServer(rest.RestConf{
Port: 8002,
ServiceConf: service.ServiceConf{
DevServer: devserver.Config{
Enabled: true,
},
},
})

对应配置开启:

Name: user-api
Host: 0.0.0.0
Port: 8002
......

DevServer:
Enabled: true

可以通过配置修改健康检查端口和 Path,比如把健康检查端口和 Path 修改为8080ping

srv := rest.MustNewServer(rest.RestConf{
Port: 8002,
ServiceConf: service.ServiceConf{
DevServer: devserver.Config{
Enabled: true,
Port: 8080,
HealthPath: "/ping",
},
},
})

对应配置开启:

Name: user-api
Host: 0.0.0.0
Port: 8002
......

DevServer:
Enabled: true
Port: 8080
HealthPath: "/ping"

日志收集

链路追踪

go-zero 中基于OpenTelemetry集成了链路追踪,配置如下:

type Config struct {
Name string `json:",optional"`
Endpoint string `json:",optional"` // trace信息上报的url
Sampler float64 `json:",default=1.0"` // 采样率
Batcher string `json:",default=jaeger,options=jaeger|zipkin|otlpgrpc|otlphttp"`
}

go-zero链路追踪支持(jaeger\zipkin)只需要在配置中添加几行配置就可开启,无需修改任何代码,示例如下:

1)api配置

Name: user-api
Host: 0.0.0.0
Port: 8002
Mode: dev
......

#链路追踪
Telemetry:
Name: user-api
Endpoint: http://jaeger:14268/api/traces
Sampler: 1.0
Batcher: jaeger

2)rpc配置

Name: user-rpc
ListenOn: 0.0.0.0:9002
Mode: dev

.....

#链路追踪
Telemetry:
Name: user-rpc
Endpoint: http://jaeger:14268/api/traces
Sampler: 1.0
Batcher: jaeger

更多详细示例请参考 tracing 示例

指标监控

go-zero 中 prometheus 指标默认启动收集,默认端口为6470,默认 Path 为/metrics,启动服务后访问指标监控地址如下:

$ curl http://127.0.0.1:6470/metrics
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 7.3427e-05
go_gc_duration_seconds{quantile="0.25"} 7.3427e-05
go_gc_duration_seconds{quantile="0.5"} 7.3427e-05
go_gc_duration_seconds{quantile="0.75"} 7.3427e-05
go_gc_duration_seconds{quantile="1"} 7.3427e-05
go_gc_duration_seconds_sum 7.3427e-05
go_gc_duration_seconds_count 1
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 12

通过 EnableMetrics 禁用指标监控,通过 MetricsPath 修改指标监控 Path,如下:

srv := rest.MustNewServer(rest.RestConf{
Port: 8002,
ServiceConf: service.ServiceConf{
DevServer: devserver.Config{
Enabled: true,
Port: 6470,
MetricsPath: "/metrics",
EnableMetrics: false,
},
},
})

对应配置:

Name: user-api
Host: 0.0.0.0
Port: 8002
Mode: dev
......

DevServer:
Enabled: true
Port: 6470
MetricsPath: /metrics
EnableMetrics: false

go-zero 默认集成的 prometheus 指标如下:

RPC Server

指标名Label说明
rpc_server_requests_duration_msmethodHistogram,耗时统计单位为毫秒
rpc_server_requests_code_totalmethod、codeCounter,错误码统计

RPC Client

指标名Label说明
rpc_client_requests_duration_msmethodHistogram,耗时统计单位为毫秒
rpc_client_requests_code_totalmethod、codeCounter,错误码统计

HTTP Server

指标名Label说明
http_server_requests_duration_mspathHistogram,耗时统计单位为毫秒
http_server_requests_code_totalpath、codeCounter,错误码统计

Mysql

指标名Label说明
sql_client_requests_duration_mscommandHistogram,耗时统计单位为毫秒
sql_client_requests_error_totalcommand、errorCounter,错误统计

Redis

指标名Label说明
redis_client_requests_duration_mscommandHistogram,耗时统计单位为毫秒
redis_client_requests_error_totalcommand、errorCounter,错误统计

自定义监控指标

在包 go-zero/core/metric 下提供了 Histogram、Counter、Gauge 三种 prometheus 指标数据类型,用户可以使用该包下提供的方法自定义业务指标,如使用 Counter 来统计用户访问某一资源的总数,定义如下:

// 定义Counter
userVisitResourceTotal = metric.NewCounterVec(&metric.CounterVecOpts{
Namespace: "user",
Subsystem: "visit_resource",
Name: "total",
Help: "user visit resource count.",
Labels: []string{"user_id", "resource_id"},
})

// 用户每次访问资源通过如下方法增加计数
userVisitResourceTotal.Inc("userId", "resourceId")