概述
引言
我们知道针对go服务,线上内存泄漏问题,大多数都是goroutines
泄漏导致,一方面可以利用goleak
在开发阶段单测预防,线上可以用pprof
定位,那么中间一个环节线上监控就得靠prometheus
golang
package main
import (
"github.com/gin-gonic/gin"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
)
func main() {
r := gin.Default()
r.GET("metrics", PromHandler(promhttp.Handler()))//prometheus采集路由
r.GET("my_counter", MyCounter) //自定义统计
r.GET("goroutines", MyGoroutines) //协程泄漏
r.Run(":8001") //8001端口
}
func PromHandler(handler http.Handler) gin.HandlerFunc {
return func(c *gin.Context) {
handler.ServeHTTP(c.Writer, c.Request)
}
}
var (
MetricHttpRequestTotal = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: "promdemo",
Subsystem: "demo",
Name: "http_request_total",
Help: "http request total",
},
[]string{"from"},
)
counter = prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: "golang",
Name: "my_counter",
Help: "This is my counter",
})
)
var Cnt int
func MyCounter(ginCtx *gin.Context) {
Cnt += 5
counter.Add(float64(Cnt))
ginCtx.JSON(http.StatusOK, map[string]interface{}{
"counter": Cnt,
})
}
func MyGoroutines(ginCtx *gin.Context) {
ch1 := make(chan int)
go func() {
ch1 <- 1
}()
ginCtx.JSON(http.StatusOK, struct {
}{})
}
func init() {
prometheus.MustRegister(MetricHttpRequestTotal)
prometheus.MustRegister(counter) //自定义指标
}
使用的是gin框架,go服务暴露web端口8001(后续prometheus会用到这个)
访问http://127.0.0.1:8001/metrics
prometheus
二进制的安装包:https://github.com/prometheus/prometheus/releases
mac:brew install prometheus
docker:https://hub.docker.com/r/bitnami/prometheus
我这边是通过二进制的安装包安装2.37.0版本
开始使用
- 进入安装目录
- 编辑prometheus.yml文件,在targets这一行修改(8001就是web服务)
这里的实现原理就是prometheus-server
按照采集频率,访问go服务的http://127.0.0.1:8001/metrics 采集数据指标
- targets: ["127.0.0.1:8001"]
此外可以采集多个系统,如node_exporter
具体配置可见:
prometheus.yml详解
- 启动:
./prometheus --config.file="prometheus.yml"
可以在输出里看见prometheus的端口是address=0.0.0.0:9090
Grafana
二进制的安装包:https://github.com/grafana/grafana/releases
mac:brew install grafana
docker:https://hub.docker.com/r/grafana/grafana
我这边是通过brew安装
开始使用
启动:brew services start grafana web端口为http://localhost:3000/
初始密码为admin/admin
- 设置data sources
configuration
->Data sources
->add data source
->选择prometheus>url填写http://127.0.0.1:9090/
- 添加panel(图表)
Create
->Dashboard
->Add an empty panel
->Data source选刚刚建的->点击metrics browser->选择自己想要监控的指标
最后
以上就是爱听歌酒窝为你收集整理的go+ prometheus+ Grafana引言golangprometheusGrafana的全部内容,希望文章能够帮你解决go+ prometheus+ Grafana引言golangprometheusGrafana所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复