Golang应用性能监控(APM)指南
Golang应用性能监控(APM)指南 有哪些可用于Go应用性能监控(APM)的开源工具?
3 回复
如果您指的是我所理解的意思,我推荐使用 Prometheus 和 Grafana,并配合 Go 的 Prometheus 导出器包。
更多关于Golang应用性能监控(APM)指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
本着Gopher精神追求极简复杂度,我建议主要工具是 log.Printf() 和 time.Since(:-))
func main() {
start := time.Now()
// ...需要进行计时操作的代码...
elapsed := time.Since(start)
log.Printf("执行耗时: %s", elapsed)
}
在Go语言生态中,有几个优秀的开源APM工具可用于性能监控。以下是主要工具及其简要说明和示例代码:
-
Prometheus + Grafana
Prometheus用于指标收集,Grafana用于可视化。
示例代码(使用Prometheus客户端库):import ( "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) var ( requestsTotal = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests.", }, []string{"method", "status"}, ) ) func init() { prometheus.MustRegister(requestsTotal) } func main() { http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil) } -
OpenTelemetry
提供分布式追踪和指标收集。
示例代码(设置追踪导出器):import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/jaeger" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.4.0" ) func initTracer() *sdktrace.TracerProvider { exporter, _ := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://localhost:14268/api/traces"))) tp := sdktrace.NewTracerProvider( sdktrace.WithBatcher(exporter), sdktrace.WithResource(resource.NewWithAttributes( semconv.SchemaURL, semconv.ServiceNameKey.String("my-service"), )), ) otel.SetTracerProvider(tp) return tp } -
pprof
Go内置的性能分析工具,用于CPU和内存分析。
示例代码(启用pprof HTTP端点):import ( "net/http" _ "net/http/pprof" ) func main() { go func() { http.ListenAndServe(":6060", nil) }() // 应用主逻辑 } -
Jaeger
专注于分布式追踪,常与OpenTelemetry集成。
示例代码(使用Jaeger客户端):import ( "github.com/opentracing/opentracing-go" "github.com/uber/jaeger-client-go/config" ) func main() { cfg := &config.Configuration{ ServiceName: "my-service", Sampler: &config.SamplerConfig{ Type: "const", Param: 1, }, Reporter: &config.ReporterConfig{ LogSpans: true, }, } tracer, closer, _ := cfg.NewTracer() opentracing.SetGlobalTracer(tracer) defer closer.Close() // 应用逻辑 }
这些工具可以单独或组合使用,以监控Go应用的性能指标、追踪请求和处理错误。

