Gin 框架:添加 Prometheus 监控-阿里云开发者社区

开发者社区> 尹东勋> 正文

Gin 框架:添加 Prometheus 监控

简介: 通过一个完整例子,往 Gin 框架微服务中添加 Prometheus 监控。 Gin 框架监控中间件,会在后续的文章中介绍。
+关注继续查看

介绍

通过一个完整例子,往 Gin 框架微服务中添加 Prometheus 监控。

Gin 框架监控中间件,会在后续的文章中介绍。

我们将会使用 rk-boot 来启动 Gin 框架微服务。

请访问如下地址获取完整教程:

安装

go get github.com/rookie-ninja/rk-boot

快速开始

1.创建 boot.yaml

boot.yaml 文件描述了 Gin 框架启动的原信息,rk-boot 通过读取 boot.yaml 来启动 Gin。

---
gin:
  - name: greeter
    port: 8080
    enabled: true
    prom:
      enabled: true      # Enable prometheus client
#      path: "metrics"   # Default value is "metrics", set path as needed.

2.创建 main.go

package main

import (
    "context"
    "github.com/rookie-ninja/rk-boot"
)

// Application entrance.
func main() {
    // Create a new boot instance.
    boot := rkboot.NewBoot()

    // Bootstrap
    boot.Bootstrap(context.Background())

    // Wait for shutdown sig
    boot.WaitForShutdownSig(context.Background())
}

3.启动 main.go

$ go run main.go

4.验证

访问: http://localhost:8080/metrics

Prometheus 客户端中添加监控

我们需要先了解 Prometheus 中的如下概念。

名字详情
MetricsSetRK 自定义的结构,通过 MetricsSet 注册 Prometheus 的 Counter,Gauge,Histogram 和 Summary
Prometheus RegistererPrometheus 会通过 Registrerer 来管理 Counter,Gauge,Histogram 和 Summary
Prometheus CounterCounter 是一个累积度量,表示单个单调增加的计数器,其值只能增加或重置为零
Prometheus GaugeGauge 值可以随意加减
Prometheus HistogramHistogram 进行采样(通常是请求持续时间或响应大小之类的内容)并将它们计算在可配置的桶中,同时还提供所有观测值的总和
Prometheus Summary与 Histogram 类似,摘要样本观察(通常是请求持续时间和响应大小之类的东西)
Prometheus NamespacePrometheus 监控名格式: namespace_subSystem_metricsName
Prometheus SubSystemPrometheus 监控名格式: namespace_subSystem_metricsName

1.在 main.go 中添加监控项

package main

import (
    "context"
    "github.com/rookie-ninja/rk-boot"
    "github.com/rookie-ninja/rk-prom"
)

// Application entrance.
func main() {
    // Create a new boot instance.
    boot := rkboot.NewBoot()

    // Bootstrap
    boot.Bootstrap(context.Background())

    // Create a metrics set into prometheus.Registerer
    set := rkprom.NewMetricsSet("rk", "demo", boot.GetGinEntry("greeter").PromEntry.Registerer)

    // Register counter, gauge, histogram, summary
    set.RegisterCounter("my_counter", "label")
    set.RegisterGauge("my_gauge", "label")
    set.RegisterHistogram("my_histogram", []float64{}, "label")
    set.RegisterSummary("my_summary", rkprom.SummaryObjectives, "label")

    // Increase counter, gauge, histogram, summary with label value
    set.GetCounterWithValues("my_counter", "value").Inc()
    set.GetGaugeWithValues("my_gauge", "value").Add(1.0)
    set.GetHistogramWithValues("my_histogram", "value").Observe(0.1)
    set.GetSummaryWithValues("my_summary", "value").Observe(0.1)

    // Wait for shutdown sig
    boot.WaitForShutdownSig(context.Background())
}

2.启动 main.go

$ go run main.go

3.验证

访问: http://localhost:8080/metrics

推送到 pushgateway

接下来,我们看一下,如何自动把监控数据推送到远程 pushgateway 中。

1.boot.yaml 中启动 pusher

---
gin:
  - name: greeter
    port: 8080
    enabled: true
    prom:
      enabled: true                         # Enable prometheus client
      pusher:
        enabled : true                      # Enable backend job push metrics to remote pushgateway
        jobName: "demo"                     # Name of current push job
        remoteAddress: "localhost:9091"     # Remote address of pushgateway
        intervalMs: 2000                    # Push interval in milliseconds
#        basicAuth: "user:pass"             # Basic auth of pushgateway
#        cert:
#          ref: "ref"                       # Cert reference defined in CertEntry. Please see advanced user guide for details.

2.在本地启动 pushgateway

我们使用 docker 启动 pushgateway

$ docker run prom/pushgateway -p 9091:9091

3.启动 main.go

$ go run main.go

4.验证

访问: http://localhost:9091/metrics

完整选项

名字描述类型默认值
gin.prom.enabled启动 prometheusbooleanfalse
gin.prom.pathPrometheus Web 路径string/metrics
gin.prom.pusher.enabled启动 prometheus pusherboolfalse
gin.prom.pusher.jobNameJobName 将会以标签的形式添加到监控指标,并推送到远程 pushgatewaystring""
gin.prom.pusher.remoteAddressPushgateway 远程地址, http://x.x.x.x 或者 x.x.x.xstring""
gin.prom.pusher.intervalMs推送间隔(毫秒)string1000
gin.prom.pusher.basicAuth远程 Pushgateway 的 Basic auth。 格式:[user:pass]string""
gin.prom.pusher.cert.refrkentry.CertEntry 的引用,请参考官网高级指南string""

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
prometheus监控ElasticSearch核心指标
ES监控方案 本文主要讲述使用 Prometheus监控ES,梳理核心监控指标并构建 Dashboard ,当集群有异常或者节点发生故障时,可以根据性能图表以高效率的方式进行问题诊断,再对核心指标筛选添加告警。
15147 0
Python Web 框架 Flask 快速入门 | 图谱精选课程
Flask,一个基于Python实现的、基于MVC设计模式的、轻量级的Web开发框架
81 0
【JavaScript框架封装】使用Prototype给Array,String,Function对象的方法扩充
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81055991 ...
893 0
Mesos框架对比:Marathon 和 Aurora
本文讲的是Mesos框架对比:Marathon 和 Aurora,【编者的话】 Marathon 和 Aurora 都能在 Mesos 集群上调度和运行常驻服务。本文比较了两个框架的不同和优劣。
1923 0
+关注
尹东勋
点目科技创始人
65
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载