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

用 go-commons 打造一个轻量级内置监控系统,让服务开箱即用

很多时候,我们写一个 Go Web 服务,部署上线之后,发现缺少基本的可观测性:

  • 请求量多少?
  • 内存和磁盘还够用吗?
  • 服务器 CPU 是否出现瓶颈?

如果为了这些问题单独部署 node_exporter 或引入 gopsutil,往往会增加复杂度和依赖。
而 go-commons 就提供了一个优雅的解决方案 —— 它是一个纯 Go 的轻量工具库,开箱即用,无需三方依赖。


场景:让每个服务都自带体检功能

想象一下,你写了一个电商后台服务,或者是一个 IM 服务。除了业务接口,你希望它能自带一个 /health/metrics 接口,实时返回:

  • 当前请求数(QPS)
  • 内存使用情况
  • CPU 负载
  • 磁盘剩余空间

这样即使没有外部监控系统,你也能通过浏览器或 curl 直接看到服务器的健康状态。


代码示例:内置健康检查接口

下面这段代码演示了如何用 go-commons 实现一个 /health 接口:

package mainimport ("encoding/json""net/http""github.com/Rodert/go-commons/systemutils/cpuutils""github.com/Rodert/go-commons/systemutils/memutils""github.com/Rodert/go-commons/systemutils/diskutils"
)type HealthStatus struct {CPUUsage   float64 `json:"cpu_usage"`LoadAvg    []float64 `json:"load_avg"`MemUsedMB  uint64 `json:"mem_used_mb"`MemTotalMB uint64 `json:"mem_total_mb"`DiskUsedGB uint64 `json:"disk_used_gb"`DiskTotalGB uint64 `json:"disk_total_gb"`
}func healthHandler(w http.ResponseWriter, r *http.Request) {status := HealthStatus{}// CPUif cpuInfo, err := cpuutils.GetCPUInfo(); err == nil {status.CPUUsage = cpuInfo.UsagePercentstatus.LoadAvg = cpuInfo.LoadAvg}// 内存if memInfo, err := memutils.GetMemInfo(); err == nil {status.MemUsedMB = memInfo.Used / 1024 / 1024status.MemTotalMB = memInfo.Total / 1024 / 1024}// 磁盘if diskInfo, err := diskutils.GetDiskInfo("/"); err == nil {status.DiskUsedGB = diskInfo.Used / 1024 / 1024 / 1024status.DiskTotalGB = diskInfo.Total / 1024 / 1024 / 1024}w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(status)
}func main() {http.HandleFunc("/health", healthHandler)http.ListenAndServe(":8080", nil)
}

运行后访问:

curl http://localhost:8080/health

输出示例:

{"cpu_usage": 12.5,"load_avg": [0.23, 0.45, 0.50],"mem_used_mb": 512,"mem_total_mb": 4096,"disk_used_gb": 20,"disk_total_gb": 100
}

这样,你的服务就天然带了“健康报告”。


为什么选择 go-commons?

  • 零依赖:无需 gopsutil、无需 node_exporter,直接用标准库 + go-commons。
  • 跨平台支持:Linux、macOS、Windows 都能运行。
  • 更轻量:适合嵌入到任何 Go 应用,不需要单独部署额外组件。
  • 文档完整:有在线 API 文档(点击查看),上手成本低。

一起完善 go-commons 🚀

目前 go-commons 已经支持 CPU、内存、磁盘的指标采集,接下来计划:

  • 增加网络流量、带宽监控
  • 增加进程数、线程数采集
  • 和 Prometheus 生态更紧密的集成

欢迎大家一起来参与贡献:
👉 项目地址:https://github.com/Rodert/go-commons

如果你也希望 每个 Go 服务都能“自带体检报告”,快来试试 go-commons,并加入一起打磨它吧!

http://www.dtcms.com/a/390120.html

相关文章:

  • PyQt6之QSpinBox计数器应用
  • 大模型应用开发4-MCP实战
  • Ruoyi-vue-plus-5.x第八篇文件管理与存储: 8.3 文件处理功能
  • 【51单片机】【protues仿真】基于51单片机PM2.5温湿度测量蓝牙系统
  • 病毒学原理
  • 怎样快速搭建一个高效的数据存储系统:Python实战指南
  • 音频驱动视频生成新突破:Wan2.2-S2V 模型全面体验与教程
  • 关于pc端分页+h5端加载更多的vue3简单钩子函数
  • MySQL 练习题
  • 推客小程序二级分销机制设计与实现:从0到1搭建裂变增长引擎
  • 【C++】多态(上)
  • uos中创建自定义Ip (192.168.137.1)的热点的方法
  • 【每日算法】搜索插入位置 LeetCode
  • vue+springboot+ngnix前后端分离项目部署
  • sward入门到实战(1) - 安装教程
  • 独立站的优势有哪些
  • Java学习历程18——哈希表的使用
  • 机械传动里的名词——传动比
  • qiankun 主子应用部署教程(Nginx 小白版)
  • 开启视觉奇旅:走进《计算机图形学》的世界
  • 光伏组件IV曲线测试仪的功能
  • MySQL MHA
  • 【试题】信息安全管理员考试题库
  • 硬件(十四)SPI通信协议
  • 大模型学习:使用FastText工具进行文本分类
  • pip 指令大全
  • 计算机基础·MySQL
  • 22-29、深度学习知识手册:从全连接到生成模型的融会贯通指南
  • 【FastCAEFlow案例分享】软件在汽车场景中的应用
  • Python二进制数据读取与可变缓冲区操作详解:从基础到高阶应用