在業務應用中集成 go-commons,實現應用+系統雙指標監控

在日常 Go 服務開發中,我們通常需要同時監控 業務指標(比如 QPS、請求延遲、錯誤率),也需要關注 系統指標(CPU、內存、磁盤占用情況)。
過去這類場景通常要引入多個庫:一個負責業務指標采集(Prometheus client),另一個負責系統指標采集(比如 node_exporter 或 gopsutil)。

現在有一個新的開源項目 —— go-commons,它內置了 CPU / 內存 / 磁盤的采集工具,并且提供了豐富的字符串、并發、集合操作工具,可以讓我們更快地把 系統監控和業務監控結合起來

這篇文章就帶大家寫一個最小化的 Web 服務:
👉 使用 go-commons 獲取系統資源指標
👉 同時統計 Web 服務的 QPS
👉 最終暴露 /metrics 接口,交給 Prometheus 采集


場景描寫:為什么需要應用+系統雙指標?

想象一下,你上線了一個 Go Web 服務,結果突然響應變慢。
你打開監控系統:

  • 看到 QPS 正常,但是 平均響應時間升高
  • 系統監控發現 內存使用率拉滿
  • 最后定位是某個業務邏輯有內存泄漏

如果你的應用里沒有同時暴露業務指標和系統指標,可能要對接多個監控面板來排查。
而現在我們用 go-commons + Prometheus,一站式搞定。


代碼實現

下面我們實現一個最小的 Web 服務:

  • /hello:業務 API,用來模擬請求
  • /metrics:暴露 Prometheus 指標,包括 QPS + 內存使用率
package mainimport ("fmt""net/http""sync/atomic""time""github.com/Rodert/go-commons/systemutils/memutils""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"
)var (// 定義業務指標:QPSrequestsTotal = prometheus.NewCounter(prometheus.CounterOpts{Name: "app_requests_total",Help: "Total number of requests handled by the app",},)// 定義系統指標:內存使用率memUsageGauge = prometheus.NewGauge(prometheus.GaugeOpts{Name: "system_memory_usage_percent",Help: "Memory usage percentage from go-commons",},)// 并發安全計數器activeRequests int64
)func init() {// 注冊 Prometheus 指標prometheus.MustRegister(requestsTotal)prometheus.MustRegister(memUsageGauge)
}// 模擬業務接口
func helloHandler(w http.ResponseWriter, r *http.Request) {atomic.AddInt64(&activeRequests, 1)defer atomic.AddInt64(&activeRequests, -1)requestsTotal.Inc() // 請求數 +1fmt.Fprintf(w, "Hello, world! Active Requests: %d\n", atomic.LoadInt64(&activeRequests))
}// 定時采集內存使用率
func startMemCollector() {go func() {for {memInfo, err := memutils.GetMemInfo()if err == nil && memInfo.Total > 0 {usage := float64(memInfo.Used) / float64(memInfo.Total) * 100memUsageGauge.Set(usage)}time.Sleep(5 * time.Second)}}()
}func main() {startMemCollector()http.HandleFunc("/hello", helloHandler)http.Handle("/metrics", promhttp.Handler())fmt.Println("🚀 Server started at :8080")http.ListenAndServe(":8080", nil)
}

運行服務后:

go run main.go

訪問接口:

  • http://localhost:8080/hello
    👉 模擬業務請求

  • http://localhost:8080/metrics
    👉 可以看到 Prometheus 指標,包括:

# HELP app_requests_total Total number of requests handled by the app
# TYPE app_requests_total counter
app_requests_total 3# HELP system_memory_usage_percent Memory usage percentage from go-commons
# TYPE system_memory_usage_percent gauge
system_memory_usage_percent 45.8

現在你就擁有了 應用+系統雙指標 的監控能力 🚀。


為什么選擇 go-commons?

相比直接使用 gopsutil 或者 node_exporter:

  • go-commons 更輕量,依賴更少,大部分功能基于標準庫實現
  • 內置了 字符串、集合、并發工具,不僅能采集系統指標,還能在業務邏輯里更快寫工具函數
  • 提供了 本地/在線 API 文檔(點擊查看),開發體驗更友好

一句話:它不僅是工具庫,還能成為你寫監控采集器的“底座”


邀請大家參與開源 🎉

go-commons 目前還在快速迭代中:

  • 我們計劃增強 systemutils,提供更多監控指標(網絡、進程、IO 等)
  • 歡迎大家提交 PR,貢獻新的工具函數或監控擴展
  • 也歡迎在 Issue 里分享你的使用場景,讓這個項目更貼近開發者的需求

開源的意義不僅在于“拿來用”,更在于一起打磨
如果你也對 Go 工具庫 + 監控場景 感興趣,快來加入吧!

👉 項目地址:https://github.com/Rodert/go-commons

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97909.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

容器化部署番外篇之docker網絡通信06

一、四種網絡模式 Bridge模式:容器的默認網關,默認新建容器的網絡模式Host模式:容器和宿主機共用一個 Network,使用主機的IP:PORT就可以訪問容器,但安全性不高,用得少Container模式:這個模式指定…

Linux 線程的概念

序言: 在這篇博客中我們將講解線程的概念,如何理解線程,線程和進程的區別,線程的優缺點等,我相信你看完這篇博客后會以別樣的視角重新理解線程,下面的內容全部是基于Linux操作系統的。 一、線程的概念 1…

vscode 中通義靈碼顯示登錄過期

本文主要分享:vscode 中通義靈碼顯示登錄過期的解決辦法。vscode 中的小插件通義靈碼,用的好好的,突然提示:登錄過期,嘗試訪問網頁版阿里云,登錄后,關閉 vscode 重新打開,通義靈碼還…

ESP32C3-MINI-1開發板踩坑記錄

某東買了一個ESP32C3-MINI-1開發板,名字跟ESP官網的很像,想著應該差不多的,價格便宜17塊,而官網的就貴了60還不包郵,買來才發現是巨坑。 看結論,直接到最后,前面都是我的踩坑過程。第一塊板子發…

基于粒子群算法的山地環境無人機最短路徑規劃研究(含危險區域約束的三維優化方法)

無人機在復雜地形與危險環境中的自主路徑規劃是保障任務順利執行的關鍵問題。本文針對山地環境下單無人機三維路徑規劃難題,提出了一種基于粒子群算法(PSO)的優化方法。首先,建立了包含真實地形高程、危險區域和飛行約束條件的三維…

Linux-> UDP 編程2

目錄 本文說明 一:字典程序的幾個問題 1:字典的本質 2:翻譯功能的本質 3:讓服務端和翻譯功能相關聯 二:字典類(Dict.hpp) 1:加載詞典(Load) 2:翻譯單詞(Translate) 三:服務…

輝視養老方案:重塑老年生活的溫馨與安心

在當今社會,隨著老齡化進程的加速,如何為老年人提供更加便捷、舒適且安全的養老環境,成為了全社會共同關注的焦點。輝視養老方案應運而生,它以科技為翼,以關愛為心,通過遠程探望、客控系統、信息服務、IPTV…

SQuAD:機器閱讀理解領域的里程碑數據集

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 1 什么是SQuAD? SQuAD(Stanford Question Ans…

【vim,Svelte】怎樣使用 vim 編輯 Svelte 那些奇奇怪怪名字的文件?

當你要使用 vim(或者neovim)來編輯 Svelte 下面的文件時,比如這些文件: page.svelte layout.svelte$ vim page.svelte $ vim "page.svelte" $ vim page.svelte $ vim \page.svelte使用上面的命令,你會遇到這…

深入解析 HTTP 狀態碼

在日常的網絡瀏覽和 Web 開發過程中,我們總會不可避免地遇到各種 HTTP 狀態碼。比如常見的 “404 Not Found”,它意味著我們所請求的頁面不存在;還有 “500 Internal Server Error”,表示服務器端出現了錯誤。這些由三位數字組成的…

【C++】C++類和對象—(中)

前言:在上一篇類和對象(上)的文章中我們已經帶領大家認識了類的概念,定義以及對類和對象的一些基本操作,接下來我們要逐步進入到類和對象(中)的學習。我們將逐步的介紹類和對象的核心——類和對象的六個默認成員函數。(注意:這六個…

使用python-fastApi框架開發一個學校宿舍管理系統-前后端分離項目

今天給大家分享一個我最近做的一個學校宿舍管理系統,python版,這個系統實現的功能有:首頁 | 學校管理 | 宿舍樓管理 | 宿舍管理 | 學生管理 | 學生調宿 | 學生退宿 | 報修等級 | 宿舍衛生評分 | 違紀記錄 | 管理員管理 。一共有11個菜單。 使…

阻塞 vs 非阻塞:程序等待的兩種哲學

當程序需要等待外部操作時,是應該"干等"還是"邊等邊干"?為什么有些程序會卡住不動,而另一些卻能流暢運行?這一切都取決于阻塞與非阻塞的編程選擇!本文將為你揭示這兩種模式的本質區別!…

MySQL 核心操作全解析(用戶 + SHOW+DML+DCL)

MySQL 核心操作全解析(用戶 SHOWDMLDCL) 基于你提供的實操筆記,我們將 MySQL 核心操作拆解為用戶管理、SHOW 查詢命令、DML 數據操作、TRUNCATE 與 DELETE 對比、DCL 權限控制五大模塊,梳理語法邏輯、補充避坑提示,幫…

多語言編碼Agent解決方案(6)-部署和使用指南

部署和使用指南 本指南提供完整的部署和使用說明,幫助您設置后端服務并在VSCode、Eclipse和IntelliJ中使用相應的插件。這個解決方案基于vLLM提供AI編碼輔助,支持英語、中文和日文。 前提條件 操作系統:Linux、macOS或Windows(推薦…

濾波器的三重境界:從信號處理到自動駕駛測試的基石

在自動駕駛的宏大敘事中,我們常常聚焦于人工智能、深度學習、高精地圖等"明星技術"。然而,在這些耀眼的光環背后,有一個低調卻至關重要的"幕后英雄"——濾波器。它不僅是信號處理的工具,更是連接物理世界與數…

Part4.第8章:神經網絡

第8章 激活函數 如果沒有激活函數,不論幾層的神經網絡都是一個線性回歸。激活函數的作用是引入非線性。

nextjs+shadcn+tailwindcss實現博客中的overview

最近在用nextjsshadcntailwindcss練手,實現一個博客。做到了overView這里,可實現如下效果1.首先要安裝tailwindcss,這個在創建項目的時候就安裝了。2.然后安裝shadcn,官網教程:3.代碼如下:import {Card,CardContent } …

Kotlin 高階語法解析

Kotlin 高級語法深度解析1. 協程(Coroutines)1.1 基礎概念1.掛起和恢復2.協程構建器 (Coroutine Builders)3.協程作用域4.調度器1.2 核心用法1.3 實戰示例2. 密封類(Sealed Classes)2.1 定義與特性2.2 模式匹配2.3 應用場景3. 內聯…

9 基于機器學習進行遙感影像參數反演-以隨機森林為例

目錄 1 讀取數據 2 數據預處理 3模型訓練 4模型預測 5精度分析 由于回歸任務的標簽數據獲取比較困難,我們這次用水體指數NDWI來模擬作為回歸任務的標簽,通過隨機森林來擬合回歸NDWI,其計算公式如下: NDWI = (band3 - band5) / (band3 + band5) 實際情況下需要回歸的數…