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工具可用于性能监控。以下是主要工具及其简要说明和示例代码:

  1. 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)
    }
    
  2. 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
    }
    
  3. pprof
    Go内置的性能分析工具,用于CPU和内存分析。
    示例代码(启用pprof HTTP端点):

    import (
        "net/http"
        _ "net/http/pprof"
    )
    
    func main() {
        go func() {
            http.ListenAndServe(":6060", nil)
        }()
        // 应用主逻辑
    }
    
  4. 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应用的性能指标、追踪请求和处理错误。

回到顶部