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
- 添加数据源
