时间:2021-05-23
prometheus是基于metric采样的监控,可以自定义监控指标,如:服务每秒请求数、请求失败数、请求执行时间等,每经过一个时间间隔,数据都会从运行的服务中流出,存储到一个时间序列数据库中,之后可通过PromQL语法查询。
主要特点:
多维数据模型,时间序列数据通过metric名以key、value的形式标识;
使用PromQL语法灵活地查询数据;
不需要依赖分布式存储,各服务器节点是独立自治的;
时间序列的收集,通过 HTTP 调用,基于pull 模型进行拉取;
通过push gateway推送时间序列;
通过服务发现或者静态配置,来发现目标服务对象;
多种绘图和仪表盘的可视化支持;
查看是否有镜像
sudo docker search prometheus新建prometheus.yaml
global:scrape_interval: 10sevaluation_interval: 60sscrape_configs:- job_name: prometheusstatic_configs:- targets: ['localhost:9090']- job_name: integralstatic_configs:- targets: ['10.20.xx.xx:8001']执行:
docker run --name prometheus -p 9090:9090 -v ~/prometheus.yaml:/etc/prometheus/prometheus.yml prom/prometheus进入容器中可以看到配置文件已映射到容器指定目录:
踩坑: prometheus官方镜像指定的配置文件是prometheus.yml 所以映射到容器内的文件名一定要保持一致 否则会出现指定的配置文件不生效
Prometheus Server :主程序,负责抓取和存储时序数据;
Client Libraries:客户端库,负责检测应用程序代码;
Push Gateway:Push 网关,接收短生命周期的 Job 主动推送的时序数据;
Exporters:为不同服务定制的Exporter(如:HAProxy、StatsD、Graphite等) ,从而抓取它们的Metris指标数据;
Alert Manage:告警管理器,处理不同的告警;
自定义prometheus的gin中间件
package ginprometheus import ( "strconv" "sync" "time" "github.com/gin-gonic/gin" "github.com/prometheus/client_golang/prometheus") const ( metricsPath = "/metrics" faviconPath = "/favicon.ico") var ( // httpHistogram prometheus 模型 httpHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{ Namespace: "http_server", Subsystem: "", Name: "requests_seconds", Help: "Histogram of response latency (seconds) of http handlers.", ConstLabels: nil, Buckets: nil, }, []string{"method", "code", "uri"})) // init 初始化prometheus模型func init() { prometheus.MustRegister(httpHistogram)} // handlerPath 定义采样路由structtype handlerPath struct { sync.Map} // get 获取pathfunc (hp *handlerPath) get(handler string) string { v, ok := hp.Load(handler) if !ok { return "" } return v.(string)} // set 保存path到sync.Mapfunc (hp *handlerPath) set(ri gin.RouteInfo) { hp.Store(ri.Handler, ri.Path)} // GinPrometheus gin调用Prometheus的structtype GinPrometheus struct { engine *gin.Engine ignored map[string]bool pathMap *handlerPath updated bool} type Option func(*GinPrometheus) // Ignore 添加忽略的路径func Ignore(path ...string) Option { return func(gp *GinPrometheus) { for _, p := range path { gp.ignored[p] = true } }} // New new gin prometheusfunc New(e *gin.Engine, options ...Option) *GinPrometheus { if e == nil { return nil } gp := &GinPrometheus{ engine: e, ignored: map[string]bool{ metricsPath: true, faviconPath: true, }, pathMap: &handlerPath{}, } for _, o := range options { o(gp) } return gp} // updatePath 更新pathfunc (gp *GinPrometheus) updatePath() { gp.updated = true for _, ri := range gp.engine.Routes() { gp.pathMap.set(ri) }} // Middleware set gin middlewarefunc (gp *GinPrometheus) Middleware() gin.HandlerFunc { return func(c *gin.Context) { if !gp.updated { gp.updatePath() } // 过滤请求 if gp.ignored[c.Request.URL.String()] { c.Next() return } start := time.Now() c.Next() httpHistogram.WithLabelValues( c.Request.Method, strconv.Itoa(c.Writer.Status()), gp.pathMap.get(c.HandlerName()), ).Observe(time.Since(start).Seconds()) }}gin路由初始化prometheus,使用中间件采样
gp := ginprometheus.New(r)r.Use(gp.Middleware())// metrics采样r.GET("/metrics", gin.WrapH(promhttp.Handler()))查看target
选取指标对应的graph,这里以gc采样的时间为例:
如果需要展示更为丰富的可视化看板,可以将prometheus与grafana结合,将prometheus数据接入到grafana中,此处不再过多阐述
到此这篇关于详解prometheus监控golang服务实践记录的文章就介绍到这了,更多相关prometheus监控golang服务内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.Prometheus介绍Prometheus是一套开源的系统监控报警框,相比Nagios或者Zabbix拥有如下优点1.1易管理性Prometheus:Pr
1.Prometheus是什么Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案。Prometheus主
要使用python编写Prometheus监控,需要你先开启Prometheus集群。可以参考//www.jb51.net/article/148895.htm
本文介绍SpringBoot如何使用Prometheus配合Grafana监控。1.关于PrometheusPrometheus是一个根据应用的metrics来
Prometheus是一套开源的系统监控报警框架。它由工作在SoundCloud的员工创建,并在2015年正式发布的开源项目。2016年,Prometheus正