前言
无论是在微服务还是在单体架构中,服务监控告警都是重要的组成部分,而对于不同的服务,有不同的监测数据的获取与处理方式,但本质上都是去主动收集汇总服务内部的指标数据并加以处理与展示。
项目介绍
在 Go 的单体服务中,在服务监测这一部分常常会采用 Prometheus 加 Grafana 的方案。
- Prometheus 用于记录由分布式系统产生的实时指标数据
- Grafana 数据可视化和监控平台,常用于与 Prometheus 等数据源集成
Grafana Public Dashboard
服务监控
在这篇实做中,核心主要关注于在服务内部,通过代码进行监控数据导出的配置,并与 Prometheus 进行对接。
Prometheus 的数据拉取
Prometheus 采用 Pull 的方式去获取数据,通过在配置文件中配置需要拉取的端点和间隔(静态配置),就可以使得 Prometheus 主动去拉取对应的数据。
除了静态配置外,Prometheus 也支持多种服务发现机制,可以自动发现动态变化的目标。这些机制包括 Kubernetes、Consul、Amazon EC2、Azure、Docker Swarm 等。
OpenTelemetry 框架
在 Goframe 框架中,采用 OpenTelemetry 开源可观测性框架去实现监测数据的导出。
Goframe OpenTelemetry 内部架构
由于 Prometheus 是采用 Pull 的方式去拉取数据,因此我们需要在项目中配置一个
/metrics
的路由,专门用于暴露监测数据。在代码的实现中,Goframe 框架内部已经对 Meter 部分做了封装处理,因此我们只需要配置 Metric Exporter 与绑定 Provider 即可将内部的指标数据导出。
监控告警-基本使用 - GoFrame (ZH)-Latest - GoFrame官网 - 类似PHP-Laravel, Java-SpringBoot的Go企业级开发框架
Prometheus 数据端点配置
在endpoint 的配置上,只需绑定 Provider 与暴露
/metrics
路由即可。gmetric.Provider 绑定
将 Provider 作为全局的中间件的形式进行处理,主要分为两步:
- 创建 Prometheus Exporter 作为 Exporter
- 将 Exporter 绑定到
otelmetric
的 Provider
在这一步中便创建了用于数据导出的 Provider。
创建监控 /metrics 路由
在上一步创建好 Provider 后,我们需要实例化 Provider 并将其设置为全局,以便使得后续创建的
/metrics
路由得以使用。而后我们将
/metrics
路由绑定在promhttp.Handler()
中,实现 Prometheus 格式数据的导出。绑定好路由后,便可以通过
/metrics
路由去获取监控指标数据。Prometheus 配置
只需在配置文件的 scrape_configs 中添加静态配置即可:
配置好后启动 Prometheus ,在控制台中看到端点正常则配置成功。
后言
配置好 Prometheus 后,即可将其中收集处理的数据使用各种仪表盘工具显示出来,在 Grafana 中即可方便的将数据导入并展示,希望这篇博客对你在 Goframe 中配置服务监控有所帮助。