当前位置: 首页 > article >正文

【Prometheus】如何通过golang生成prometheus格式数据

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Prometheus监控系统零基础到进阶
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • golang生成prometheus数据
    • 1. 何为exporter
    • 2. exporter简介
    • 3. exporter编写指导
    • 4. 安装依赖
    • 5. 编写代码
    • 6. 运行程序
    • 7. 访问指标
    • 8. 配置Prometheus
    • 9. 总结

golang生成prometheus数据

Prometheus是一个开源的监控系统,拥有许多Advanced Feature,他会定期用HTTP协议来pull所监控系统状态进行数据收集,在加上timestamp等数据组织成time series data,用metric name和label来标识不同的time series,用户可以将数据用可视化工具显示出来,并设置报警阈值进行报警。
本文将介绍Primetheus client的使用,基于golang语言,golang client 是当pro收集所监控的系统的数据时,用于响应pro的请求,按照一定的格式给pro返回数据,说白了就是一个http server。

1. 何为exporter

Prometheus 监控基于一个很简单的模型: 主动抓取目标的指标接口(HTTP 协议)获取监控指标, 再存储到本地或远端的时序数据库. Prometheus 对于指标接口有一套固定的格式要求, 格式大致如下:

# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="post",code="200"} 1027
http_requests_total{method="post",code="400"} 3

对于自己写的代码, 我们当然可以使用 Prometheus 的 SDK 暴露出上述格式的指标. 但对于大量现有服务, 系统甚至硬件, 它们并不会暴露 Prometheus 格式的指标.
比如说:
Linux 的很多指标信息以文件形式记录在 proc 下的各个目录中, 如 /proc/meminfo 里记录内存信息, /proc/stat 里记录 CPU 信息;
Redis 的监控信息需要通过 INFO 命令获取;
路由器等硬件的监控信息需要通过 `SNMP 协议获取;

要监控这些目标, 我们有两个办法, 一是改动目标系统的代码, 让它主动暴露 Prometheus 格式的指标, 当然, 对于上述几个场景这种办法完全是不现实的.
这时候就只能采用第二种办法:
编写一个代理服务, 将其它监控信息转化为 Prometheus 格式的指标
——这个代理服务就是exporter

2. exporter简介

广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target。
从Exporter的来源上来讲,主要分为两类:
社区提供的
Prometheus社区提供了丰富的Exporter实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。
https://exporterhub.io/
用户自定义的
除了直接使用社区提供的Exporter程序以外,用户还可以基于Prometheus提供的Client Library创建自己的Exporter程序,目前Promthues社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。

prometheus四种类型的指标Counter 计数,Gauge 观测类,Histogram 直方,Summary 摘要 用golang语言如何构造这4种类型对应的指标,二是搞清楚修改指标值的场景和方式。
在prometheus中如果要监控服务器和应用的各种指标,需要用各种各样的exporter服务,例如node_exportes、mysql_exportes、pgsql_exportes等。这些都是官方或者第三方已经提供好的。
但是如果自己想要监控一些其它exportes没有的指标,则就需要自己去构建一个属于自己的exportes,好在官方提供相关的库,目前支持以下语言:
官方支持语言:
Go
Java or Scala
Python
Ruby
Rust

3. exporter编写指导

Prometheus 官方文档中 Writing Exporter 这篇写得非常全面, 假如你要写 exporter 推荐先通读一遍, 限于篇幅, 这里只概括一下:

做到开箱即用(默认配置就可以直接开始用)

推荐使用 YAML 作为配置格式

指标使用下划线命名

为指标提供 HELP String (指标上的 # HELP 注释, 事实上这点大部分 exporter 都没做好)

为 Exporter 本身的运行状态提供指标

可以提供一个落地页

metric的类型
在开始之前需要了解下metric的类型划分
在这里插入图片描述

要在Golang中生成Prometheus数据,你可以使用Prometheus的官方客户端库 prometheus/client_golang。这个库允许你定义和暴露自定义的指标,并通过HTTP端点将这些指标暴露给Prometheus服务器。

以下是一个简单的示例,展示如何使用Golang生成Prometheus数据:

4. 安装依赖

首先,你需要安装Prometheus的Golang客户端库:

go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

5. 编写代码

接下来,编写一个简单的Golang程序来生成和暴露Prometheus指标。

package main

import (
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

func main() {
	// 创建一个自定义的Gauge指标
	customMetric := prometheus.NewGauge(prometheus.GaugeOpts{
		Name: "my_custom_metric",
		Help: "This is a custom metric",
	})

	// 注册指标
	prometheus.MustRegister(customMetric)

	// 启动一个goroutine来更新指标值
	go func() {
		for {
			// 模拟一些业务逻辑,更新指标值
			customMetric.Set(float64(time.Now().Unix()))
			time.Sleep(10 * time.Second)
		}
	}()

	// 暴露指标端点
	http.Handle("/metrics", promhttp.Handler())
	http.ListenAndServe(":8080", nil)
}

6. 运行程序

运行这个Golang程序:

go run main.go

程序将在本地的8080端口上启动一个HTTP服务器,并暴露 /metrics 端点。

7. 访问指标

你可以通过浏览器或 curl 命令访问 http://localhost:8080/metrics,查看生成的Prometheus指标。

curl http://localhost:8080/metrics

你应该会看到类似以下的输出:

# HELP my_custom_metric This is a custom metric
# TYPE my_custom_metric gauge
my_custom_metric 1.623456789e+09

8. 配置Prometheus

最后,你需要在Prometheus的配置文件中添加这个目标,以便Prometheus服务器可以定期抓取这些指标。

prometheus.yml 中添加以下内容:

scrape_configs:
  - job_name: 'my_golang_app'
    static_configs:
      - targets: ['localhost:8080']

然后重启Prometheus服务器,它将会开始抓取你的Golang应用程序暴露的指标。

9. 总结

通过使用 prometheus/client_golang 库,你可以轻松地在Golang中生成和暴露Prometheus指标。这个示例展示了如何创建一个简单的Gauge指标,并通过HTTP端点暴露它。你可以根据需要扩展这个示例,添加更多的指标类型(如Counter、Histogram等)和更复杂的业务逻辑。


http://www.kler.cn/a/535217.html

相关文章:

  • 20240824 美团 笔试
  • React 第二十二节 useSyncExternalStore Hook 常见问题及用法详解
  • 数据结构:队列篇
  • 从零开始实现一个双向循环链表:C语言实战
  • Java牙科诊所管理系统web医院病例挂号预约平台springboot/ssm代码编写
  • Shell基础:中括号的使用
  • 使用 MMCM 的 I/O 时序 ZHOLD/BUF_IN 补偿
  • Spring Boot 入门 与 无法解析符号 springframework 的解决
  • 71.StackPanel黑白棋盘 WPF例子 C#例子
  • 基于Redis分布式锁
  • 达梦数据库从单主模式转换为主备模式
  • (苍穹外卖)项目结构
  • 深度学习|表示学习|卷积神经网络|DeconvNet是什么?|18
  • Android studio 编译速度增加
  • 微服务中服务治理都包含什么
  • 【回溯+剪枝】单词搜索,你能用递归解决吗?
  • [原创](Modern C++)现代C++的关键性概念: 文件编码细节之一:BOM(Byte Order Mark, 字节顺序标记)
  • 分库分表详解
  • 02.06 网络编程_概述
  • 补小识JVM中的分代收集理论
  • 离线安装Appium Server
  • 结合R语言、ArcGIS Pro、ChatGPT+生态学模型(PLUS模型、InVEST模型)的生态系统服务的多情景模拟预测及其应用
  • K8S组件架构
  • Eureka 高频考点
  • 网络工程师 (22)网络协议
  • C# foreach循环:性能提升