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

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

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

🏆 作者简介:景天科技苑

🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。

🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。

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

文章目录

  • golang生成prometheus数据
    • [1. 何为exporter](#1. 何为exporter)
    • [2. exporter简介](#2. exporter简介)
    • [3. exporter编写指导](#3. exporter编写指导)
    • [4. 安装依赖](#4. 安装依赖)
    • [5. 编写代码](#5. 编写代码)
    • [6. 运行程序](#6. 运行程序)
    • [7. 访问指标](#7. 访问指标)
    • [8. 配置Prometheus](#8. 配置Prometheus)
    • [9. 总结](#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 对于指标接口有一套固定的格式要求, 格式大致如下:

bash 复制代码
# 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客户端库:

bash 复制代码
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

5. 编写代码

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

go 复制代码
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程序:

bash 复制代码
go run main.go

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

7. 访问指标

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

bash 复制代码
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 中添加以下内容:

yaml 复制代码
scrape_configs:
  - job_name: 'my_golang_app'
    static_configs:
      - targets: ['localhost:8080']

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

9. 总结

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

相关推荐
大大。5 分钟前
清除el-table选中状态 clearSelection
开发语言·javascript·vue.js
蹦蹦跳跳真可爱58915 分钟前
Python----Python高级(并发编程:进程Process,多进程,进程间通信,进程同步,进程池)
开发语言·python
AI大模型训练家42 分钟前
SpringBoot+Dubbo+zookeeper 急速入门案例
java·开发语言·spring boot·学习·dubbo·java-zookeeper
风口猪炒股指标1 小时前
DeepSeek回答禅宗三重境界重构交易认知
开发语言·重构·kotlin·deepseek
xxxmine1 小时前
Java 异常处理:深入理解与实践
java·开发语言
孞㐑¥1 小时前
C++基础知识
开发语言·c++·经验分享·笔记
优雅的落幕2 小时前
Java----线程池
java·开发语言
rzl022 小时前
java基础2(黑马)
java·开发语言
Heait12242 小时前
树状数组和线段树C++模板
开发语言·c++
m0_748238923 小时前
nas-群晖docker查询注册表失败解决办法(平替:使用SSH命令拉取ddns-go)
docker·golang·ssh