![](https://i-blog.csdnimg.cn/direct/91622b16ae294859afbfd13d32c30c00.jpeg)
✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。
所属的专栏: Prometheus监控系统零基础到进阶
景天的主页: 景天科技苑
![](https://i-blog.csdnimg.cn/direct/4cb52ce648e34871b0d1c700e7d3efea.gif)
文章目录
- 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可以实现大部分通用的监控需求。
用户自定义的
除了直接使用社区提供的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等)和更复杂的业务逻辑。