使用 Go 和 go-commons 实现内存指标采集并对接 Prometheus

在这里插入图片描述

文章目录

    • 一、准备工作
    • 二、编写内存采集代码
    • 三、运行 Exporter
    • 四、接入 Prometheus
    • 五、可扩展思路
    • 总结

在运维和监控领域,资源指标采集 是必不可少的一环。CPU、内存、磁盘、网络这些系统资源,需要实时采集并上报到监控系统中。
本文以 内存指标采集 为例,结合 go-commons 库和 Prometheus Exporter,手把手实现一个完整的采集服务。


一、准备工作

  1. 安装 Go
    确保本地已经安装 Go(推荐 Go 1.20+)。

    go version
    
  2. 拉取 go-commons 依赖
    在你的项目目录下执行:

    go mod init mem-exporter
    go get github.com/Rodert/go-commons@latest
    

    go-commons 提供了常用的系统资源采集工具,避免了自己造轮子。


二、编写内存采集代码

新建一个 main.go 文件,内容如下:

package mainimport ("fmt""net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"commons "github.com/Rodert/go-commons/system"
)// 定义一个 Prometheus Gauge,用于记录内存使用情况
var memoryUsage = prometheus.NewGauge(prometheus.GaugeOpts{Name: "server_memory_usage_bytes",Help: "Current memory usage in bytes",
})func init() {// 注册自定义指标prometheus.MustRegister(memoryUsage)
}func recordMetrics() {go func() {for {mem, err := commons.GetMemoryInfo()if err == nil {// 记录已用内存memoryUsage.Set(float64(mem.Used))}}}()
}func main() {// 启动指标采集recordMetrics()// 启动 HTTP 服务,暴露指标http.Handle("/metrics", promhttp.Handler())fmt.Println("🚀 Memory exporter started at :2112/metrics")http.ListenAndServe(":2112", nil)
}

三、运行 Exporter

在项目根目录下执行:

go run main.go

控制台输出:

🚀 Memory exporter started at :2112/metrics

然后在浏览器或终端访问:

curl http://localhost:2112/metrics

可以看到类似输出:

# HELP server_memory_usage_bytes Current memory usage in bytes
# TYPE server_memory_usage_bytes gauge
server_memory_usage_bytes 823910912

四、接入 Prometheus

在 Prometheus 的 prometheus.yml 配置文件中添加:

scrape_configs:- job_name: "memory_exporter"static_configs:- targets: ["localhost:2112"]

重启 Prometheus 后,就能在监控面板中查看到 server_memory_usage_bytes 指标了。


五、可扩展思路

  • 除了内存,还可以采集:

    • CPU 使用率
    • 磁盘 IO
    • 网络流量
  • 配合 Grafana,可以快速做出可视化大屏。


总结

通过本文示例,你学会了:

  1. 使用 go-commons 快速采集内存指标
  2. 将指标通过 Prometheus Exporter 暴露
  3. 在 Prometheus 中配置采集目标

这就是一个从 系统指标采集监控可视化 的完整链路。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/98021.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/98021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webrtc弱网-IntervalBudget类源码分析与算法原理

一、核心功能 IntervalBudget 类用于基于时间窗口的带宽预算管理。它根据设定的目标比特率(kbps)和一个固定时间窗口(500ms),计算在该时间窗口内可用的字节数(即“预算”),并支持预…

深度学习基本模块:RNN 循环神经网络

循环神经网络(RNN)是一种专门用于处理序列数据的神经网络架构。与处理空间数据的卷积神经网络(Conv2D)不同,RNN通过引入循环连接使网络具有"记忆"能力,能够利用之前的信息来影响当前的输出&#…

React18学习笔记(二) React的状态管理工具--Redux,案例--移动端外卖平台

文章目录一.Redux的基础用法1.示例:普通网页中的Redux计步器2.Redux管理数据的流程3.配套工具和环境准备3.1.配套工具3.2.环境准备4.示例:React项目中的Redux计步器思路步骤step1:创建子模块step2:导入子模块step3:注入store实例step4:React组件内使用store中的数据step5:在组件…

34.Socket编程(UDP)(上)

点分十进制字符串IP 转 32位网络序列IP 分析:1)IP转成4字节 2)4字节转成网络序列 思路: "192.168.1.1" 进行字符串划分,以 "." 为分割符,分割出"192",&qu…

Redis的持久化工具包—RDB AOF

文章目录 前言 一、RDB 持久化(快照持久化) 1. 定义 2. RDB 触发机制 (1)手动触发 (2)自动触发 3. RDB 持久化流程 4. RDB 核心配置 5. RDB 优缺点 二、AOF 持久化(日志持久化) 1. 定…

【Web安全】XXL-JOB框架SRC高频漏洞分析总结

文章目录前言一、核心漏洞分类与技术细节二、漏洞关联利用与攻击路径三、版本演进与修复策略四、安全运维建议五、典型漏洞复现环境搭建六、总结前言 XXL-JOB是国内主流的开源分布式任务调度框架,由徐雪里开发维护,以轻量易用、高可用、适配分布式场景等…

Capacitor 打包后接口访问不到的排查经历

我最近在用 Quasar Capacitor 6 做一个 Android App,前端用的是 Vue3 Quasar,打包交给 Capacitor 去跑在手机的 WebView 里,后端是 FastAPI 提供接口。开发模式下一切顺利,浏览器里访问接口没有任何问题,我甚至觉得打…

【正点原子】Linux应用编程入门~概念及环境介绍

应用编程概念 应用编程(也可称为系统编程)与驱动编程、裸机编程有何不同?系统调用;何为库函数;应用程序的 main()函数;应用程序开发环境的介绍;系统调用 定义系统调用(system call&a…

一、HTML 完全指南:从零开始构建网页

文章目录前言一、 HTML 结构认识 HTML 标签HTML 文件基本结构标签层次结构快速生成代码框架二、 HTML 常见标签详解2.1 注释标签2.2 标题标签 (h1 - h6)2.3 段落标签 (p)2.4 换行标签 (br)2.5 格式化标签2.6 图片标签 (img)2.7 超链接标签 (a)2.8 表格标签基本使用合并单元格2.…

基于POI-TL实现动态Word模板的数据填充:【散点图】特殊处理方案

基于POI-TL实现动态Word模板的数据填充:散点图特殊处理方案 在使用POI-TL进行Word模板动态数据填充时,图表生成是一个常见需求。最近在项目中使用POI-TL处理散点图时遇到了一个特殊问题,经过研究后找到了解决方案,特此记录分享。 问题背景 POI-TL作为一款优秀的Java Wor…

使用node-Express框架写一个学校宿舍管理系统练习项目-前后端分离

今天继续分享一个新的练习项目,是使用node做为后端语言,来写的一个前后端分离项目:学校宿舍管理系统。我们如果想掌握一门编程语言,就是需要大量的练习。所以当我们学习到了一些知识,自己想一下 可以拿学到的知识&…

Kafka 运维实战基本操作含命令与最佳实践

1. 基础概览与工具入口 Kafka 发行包的所有 CLI 工具均在 bin/ 目录下。任何工具不带参数运行都会显示所有可用选项。本文命令默认:--bootstrap-server localhost:9092;生产请替换为你的控制面或内网 VIP。 2. 主题管理(创建 / 修改 / 删除 /…

贪心算法应用:航班起降问题详解

Java中的贪心算法应用:航班起降问题详解 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法策略。在航班起降问题中,贪心算法可以有效地解决机场跑道调度问题,即如何安排航班的起降顺序以最大…

uniapp scroll-view 设置scrollTop无效

当我们使用 scroll-view的scroll-top的时候 默认想让它回到顶部,当我们设置值为0的时候会不生效,在实际运用过程中,发现设置了scroll-top无效,滚动条位置并没有发生变化,是因为微信小程序的官方框架处于性能考虑&#…

网络与通信

1.TCP协议与UDP协议TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是 TCP/IP 协议族中两种核心的传输层协议,它们在数据传输方式、可靠性、适…

Node.js中package.json详解

1. name(名称) 如果你计划发布你的包,package.json 中最重要的字段是 name 和 version,因为它们是必需的。name 和 version 共同组成一个假定完全唯一的标识符。包的更改应伴随版本号的更新。如果你不打算发布包,那么…

代码随想录第14天| 翻转、对称与深度

226.翻转二叉树 (优先掌握递归) 题目链接/文章讲解/视频讲解:翻转二叉树 交换的是指针,而不是数值,如果用数值做交换,需要交换的节点下面无法很好的操作。 使用递归来实现,但要提前清除是什么顺…

DNS-Windows上使用DNS

DNS-Windows上使用DNS一、查看与修改DNS配置1.1、查看当前DNS服务器设置1.2、临时修改 DNS 服务器(命令行)二、DNS缓存相关操作2.1、查看DNS缓存内容2.2、 刷新 DNS 缓存(清除过期记录)三、测试域名解析(nslookup 工具…

3dsMax 2026 .NET Core 8 转型下的Maxscript脚本开发:动态编译模块的重构策略与兼容性升级路径

3ds Max 长期以来一直提供出色的 .NET 集成,使 Maxscript 能够无缝利用任何 .NET 库的强大功能。部分开发者在工具中广泛使用了 .NET 功能。 之前,3ds Max 依赖于 .NET Framework 4.8 并且最近更新到了 4.8.1,用于 2025 版本的发布。然而,随着 3ds Max 2026 的推出,Autod…

golang 做webrtc开发核心

在Golang中进行WebRTC开发,核心在于理解WebRTC协议的工作原理以及如何利用Go生态中的库来实现关键功能。以下是Golang WebRTC开发的核心要点: WebRTC基础概念 了解ICE(Interactive Connectivity Establishment)协议用于NAT穿越掌握…