GOlang整合Prometheus监控

go服务里整合

创建文件
package go_metrics

import (
    "github.com/gin-gonic/gin"
    "github.com/prometheus/client_golang/prometheus"
    "net/http"
    "time"
)

var (
    httpRequestDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
            Name:    "http_request_duration_seconds",
            Help:    "HTTP request duration in seconds",
            Buckets: prometheus.DefBuckets,
        },
        []string{"method", "path", "status"},
    )
)

func Register() {
    prometheus.MustRegister(httpRequestDuration)
}

func Handler(ctx *gin.Context) {
    start := time.Now()
    defer func() {
        duration := time.Since(start).Seconds()
        httpRequestDuration.WithLabelValues(ctx.Request.Method, ctx.Request.URL.Path, "200").Observe(duration)
    }()
    // 业务逻辑...
    ctx.JSON(http.StatusOK, gin.H{"msg": "ok"})
}
main函数增加
    go_metrics.Register()
    engine.GET("/metrics", gin.WrapH(promhttp.Handler()))
    engine.GET("/metrics/test", go_metrics.Handler)
    err := engine.Run("0.0.0.0:8080")
    if err != nil {
    return
    }

docker构建prometheus

创建配置文件
scrape_configs:
  - job_name: 'go-service'
    scrape_interval: 15s
    static_configs:
      - targets: ['mygin:8080']  # 替换为你的 Go 服务地址和端口
启动容器
docker run -d \
  --network my-network \
  -p 9090:9090 \
  -v /Users/zhaohongfeng/project/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  --name prometheus \
  prom/prometheus
启动golang服务
docker run -d -p 8080:8080 --network my-network --name mygin mygin
访问服务数据
http://localhost:8080/metrics

部署grafana
docker run -d --network my-network --name grafana -p 3000:3000 -v /Users/zhaohongfeng/project/grafana/data:/var/lib/grafana grafana/grafana
  • 访问grafana 用户名密码默认admin
  • 添加数据源

results matching ""

    No results matching ""