Gin 集成 prometheus 客户端实现注册和暴露指标

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: Gin 集成 prometheus 客户端实现注册和暴露指标

前言

当我们构建一个 Web 应用程序时,了解应用程序的性能和行为是非常重要的。Prometheus 是一个流行的开源监控系统,它提供了强大的指标收集和查询功能,可以帮助我们监控应用程序的各个方面。

在 Gin 中集成 Prometheus 可以让我们更方便地监控和收集应用程序的性能指标,从而帮助我们更好地理解应用程序的运行状态。

Prometheus 是什么?

Prometheus 是一套开源的监控和警报系统。它旨在帮助开发人员和系统管理员对大规模分布式系统进行监控,并能够及时发现和解决问题。

以下是 Prometheus 的一些主要特点和功能:

  1. 多维度数据模型:Prometheus 使用多维度数据模型来存储时间序列数据,每个时间序列都由一个唯一的标识符(称为指标名称)和一组键值对(称为标签)来表示。这种灵活的数据模型使得Prometheus能够高效地处理和查询大量的度量数据。
  2. 灵活的查询语言:Prometheus 提供了一种强大的查询语言,称为PromQL(Prometheus Query Language),用于对指标数据进行查询、聚合和分析。PromQL 支持各种常见的操作,如过滤、排序、计算等,使用户能够轻松地提取有用的信息并生成自定义的监控指标。
  3. 规则引擎和警报机制:Prometheus 内置了一个规则引擎,可以根据用户定义的规则对指标数据进行处理和计算,并生成警报。用户可以配置警报规则,当指标数据达到或超过某个阈值时,Prometheus 将触发相应的警报动作,如发送通知、执行脚本等。
  4. 可视化和报表:Prometheus 提供了一个简单易用的 Web 界面,可以用于实时监控和可视化指标数据。该界面支持图表展示、仪表盘配置和数据导出等功能,使用户能够直观地了解系统的运行情况。
  5. 服务发现和自动化:Prometheus 支持多种服务发现机制,如静态配置、目录服务、Kubernetes 集成等。它可以自动发现和监控新加入的目标,并根据配置自动调整监控策略,从而实现对动态环境的自动化监控。
  6. 可扩展性和集成性:Prometheus 具有高度可扩展的架构,可以处理数千个节点和百万级别的时间序列数据。它还提供了丰富的API和插件机制,可与其他工具和服务(如 Grafana、Alertmanager 等)进行集成,实现更全面的监控和警报功能。

总结:Prometheus 是一套功能强大、灵活可扩展的监控和警报系统,适用于各种规模和类型的分布式系统。它通过多维度数据模型、灵活的查询语言和强大的警报机制,帮助用户实时监控系统的性能和状态,并及时采取行动来解决潜在问题。

为什么集成 Prometheus?

  1. 实时监控:集成 Prometheus 可以实时监控你的 Gin 应用程序的性能指标。通过收集和记录请求次数、持续时间、错误率等指标,你可以快速了解应用程序的运行情况,并及时发现潜在的性能问题。
  2. 警报和自动化:Prometheus 还提供了警报功能,可以根据预设的阈值条件,自动触发警报通知。通过集成 Prometheus,你可以在应用程序出现异常或达到预定的性能指标时,及时获得通知,以便快速采取行动。
  3. 数据可视化:Prometheus 提供了 Grafana 等工具,可以将收集到的指标数据进行可视化展示。你可以创建仪表盘,实时地监控应用程序的性能指标,并轻松地进行趋势分析和故障排除。

集成 Prometheus 的好处

  1. 性能优化:通过 Prometheus 记录的指标数据,你可以深入了解应用程序的性能瓶颈和热点,进而进行有针对性的性能优化。你可以分析请求次数、持续时间、错误率等指标,并找出影响性能的关键路径,从而改进应用程序的效率。
  2. 容量规划:借助 Prometheus 收集的指标数据,你可以更好地了解应用程序的负载情况和资源利用率。通过对请求次数、并发连接数、内存使用量等指标的观察,你可以准确评估应用程序的容量需求,规划服务器资源,以支持应用程序的高可用性和扩展性。
  3. 故障排除:当应用程序出现异常或性能下降时,Prometheus 可以帮助你快速定位问题的根源。通过查看相关的指标数据和日志信息,你可以迅速发现故障原因,并进行及时修复,以减少长时间的服务中断和用户投诉。

Go Prometheus Client 介绍

组件:https://github.com/prometheus/client_golang

client_golang 是 Prometheus 社区提供的一个 Go 语言客户端库,用于在 Go 应用程序中集成和使用 Prometheus 监控系统。它提供了一系列功能丰富的 API,使开发人员能够方便地暴露指标数据、收集指标数据并与 Prometheus 进行交互。

以下是 client_golang 的一些主要特性和功能:

  1. 指标类型:client_golang 提供了多种常用的指标类型,包括 Counter、Gauge、Histogram、Summary 等。开发人员可以根据需求选择合适的指标类型,并使用简单的方法来收集和更新指标数据。
  2. 标签支持:client_golang 支持为指标数据添加标签,以便更灵活地对指标数据进行分类和分析。标签可以用于细分指标数据,例如按照不同的维度、服务或实例进行区分,从而更准确地了解系统的运行情况。
  3. 注册和暴露指标:client_golang 提供了 Register() 函数用于注册指标对象,并使用promhttp.Handler() 函数创建一个 HTTP 处理程序,用于暴露指标数据给Prometheus 服务器。这样,Prometheus 就可以通过 HTTP 协议获取指标数据并进行监控和分析。
  4. 指标收集和更新:client_golang 提供了一系列方法来收集和更新指标数据,例如使用 Inc() 和 Dec() 方法增加或减少计数器的值,使用 Set() 方法更新 Gauge 的值等。开发人员可以根据自己的需求选择合适的方法来操作指标数据。
  5. 兼容性和扩展性:client_golang 与 Prometheus 的数据模型和查询语言完全兼容,能够无缝地集成到 Prometheus 生态系统中。它还提供了丰富的扩展机制,例如Pushgateway、Exporter、Collector 等,使开发人员能够更灵活地管理和处理指标数据。
  6. 文档和示例:client_golang 提供了详细的文档和丰富的示例代码,帮助开发人员快速上手并理解如何使用该库。文档中包含了 API 参考、最佳实践、常见问题解答等内容,使开发人员能够更好地利用 client_golang 进行监控和警报。

总结:client_golang 是 Prometheus 社区提供的一个功能强大、易于使用的 Go 语言客户端库,用于在 Go 应用程序中集成和使用 Prometheus 监控系统。它提供了多种指标类型、标签支持、注册和暴露指标、指标收集和更新等功能,帮助开发人员方便地暴露和收集指标数据,并与 Prometheus 进行交互,实现全面的监控和警报功能。

项目中如何使用?

1. 开启指标记录

文件地址:./internal/router/router.go

mux, err := core.New(logger,
 core.WithEnableCors(),
 core.WithEnableSwagger(),
 core.WithEnablePProf(),
 core.WithEnablePrometheus(metrics.RecordHandler()),
)

启用时,增加参数:core.WithEnablePrometheus(metrics.RecordHandler()) 即可。

2. 定义指标所需信息

文件地址:./internal/proposal/metrics.go

// MetricsMessage 指标信息
type MetricsMessage struct {
 HOST         string  `json:"host"`          // 请求 HOST
 Path         string  `json:"path"`          // 请求 Path
 Method       string  `json:"method"`        // 请求 Method
 HTTPCode     int     `json:"http_code"`     // HTTP 状态码
 BusinessCode int     `json:"business_code"` // 业务码
 CostSeconds  float64 `json:"cost_seconds"`  // 耗时,单位:秒
 IsSuccess    bool    `json:"is_success"`    // 状态,是否成功
}

3. 指标注册

文件地址:./internal/metrics/prometheus.go

// metricsRequestsTotal metrics for request total 计数器(Counter)
var metricsRequestsTotal = prometheus.NewCounterVec(
 prometheus.CounterOpts{
  Namespace: namespace,
  Subsystem: subsystem,
  Name:      "requests_total",
  Help:      "request(ms) total",
 },
 []string{"method", "path"},
)
// metricsRequestsCost metrics for requests cost 累积直方图(Histogram)
var metricsRequestsCost = prometheus.NewHistogramVec(
 prometheus.HistogramOpts{
  Namespace: namespace,
  Subsystem: subsystem,
  Name:      "requests_cost",
  Help:      "request(ms) cost milliseconds",
 },
 []string{"method", "path", "success", "http_code", "business_code", "cost_milliseconds"},
)
// 根据需要,可定制其他指标,操作如下:
// 1. 定义需要的指标
// 2. init() 中注册
// 3. RecordMetrics() 中传值

4. 指标收集

文件地址:./internal/metrics/metrics.go

// RecordHandler 指标处理
func RecordHandler() func(msg *proposal.MetricsMessage) {
 return func(msg *proposal.MetricsMessage) {
  RecordMetrics(
   msg.Method,
   msg.Path,
   msg.IsSuccess,
   msg.HTTPCode,
   msg.BusinessCode,
   msg.CostSeconds,
  )
 }
}

5. 指标暴露

路由地址:http://127.0.0.1:9999/metrics

if opt.enablePrometheus {
 mux.engine.GET("/metrics", gin.WrapH(promhttp.Handler())) // register prometheus
}

项目代码

目录
相关文章
|
2月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
1246 123
|
1月前
|
存储 Prometheus 监控
136_生产监控:Prometheus集成 - 设置警报与指标选择与LLM部署监控最佳实践
在大语言模型(LLM)部署的生产环境中,有效的监控系统是确保服务稳定性、可靠性和性能的关键。随着LLM模型规模的不断扩大和应用场景的日益复杂,传统的监控手段已难以满足需求。Prometheus作为当前最流行的开源监控系统之一,凭借其强大的时序数据收集、查询和告警能力,已成为LLM部署监控的首选工具。
|
9月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
504 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
9月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
3569 14
|
12月前
|
数据采集 前端开发 开发工具
Demo发布- ClkLog客户端集成-React Native
ClkLog是一款支持开源和商业付费的用户行为分析软件系统,通过采集客户端行为日志数据,在开源的OLAP数据库上进行模型分析。常见的客户端有Web JS、IOS、Andriod 、小程序等,以及react-native 、uni-app等。Clklog方案选用了\神策提供的开源SDK来进行数据采集。
214 48
|
12月前
|
移动开发 小程序 开发工具
Demo发布- ClkLog客户端集成 uni-app
在上一期推文中,我们与大家分享了 React Native 的集成 demo。本期,我们将继续介绍 ClkLog 集成 uni-app 的 demo。 uni-app 允许开发者编写一套代码,然后可以编译到 iOS、Android、H5 以及各种小程序等多个平台。因此,本次 demo 中将涵盖上述所有平台,并且我们会详细说明集成过程中遇到的难点及解决方案。
|
12月前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
291 3
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
887 1
|
存储 Prometheus 监控
Grafana 与 Prometheus 集成:打造高效监控系统
【8月更文第29天】在现代软件开发和运维领域,监控系统已成为不可或缺的一部分。Prometheus 和 Grafana 作为两个非常流行且互补的开源工具,可以协同工作来构建强大的实时监控解决方案。Prometheus 负责收集和存储时间序列数据,而 Grafana 则提供直观的数据可视化功能。本文将详细介绍如何集成这两个工具,构建一个高效、灵活的监控系统。
1514 1
|
存储 Prometheus 监控
Prometheus 的扩展与集成
【8月更文第29天】Prometheus 是一款非常强大的监控系统,它不仅能够采集和存储时间序列数据,还提供了丰富的生态系统来扩展其功能。本文将介绍如何通过自定义 Exporters 和集成中间件(如 Thanos)来扩展 Prometheus 的能力。
405 1