【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等)和更复杂的业务逻辑。

相关推荐
阿珊和她的猫1 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234174 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~4 小时前
C#---StopWatch类
开发语言·c#
lifallen6 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
apocelipes7 小时前
下划线字段在golang结构体中的应用
golang
cui__OaO7 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试7 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑8 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
CHEN5_028 小时前
【Java基础面试题】Java基础概念
java·开发语言